Rabu, 17 Desember 2014

Refresh Datasource dari sebuah form

Jika kita membuat suatu Form terutama DropDialog yang diperuntukan untuk mengentry data, terkadang sukar sekali untuk merefresh form induknya supaya memperlihatkan hasil entry kita.
berikut adalah contoh untuk merefresh datasource induk.

Di form Childnya (DropDialog) ...
Buka node method
di method CloseOK()
tambahkan macro #Task

public void closeOk()
{
      #Task
      FormRun formRun;

      super();

      formrun = element.args().caller();

      if(formrun)
      {
             formrun.task(#taskF5);
       }
}

implementasinya bisa speerti ini :

public void closeOk()
{

      #Task
      FormRun formRun;

      RefRecId custRecId = element.args().record().RecId;
      RefRecId caseRecId;
  
      Inventtable            ITinventtable;

      ITinventtable.InventId = FieldInventId.valueStr();
      ITinventtable.Name     = FieldInventname.valueStr();

      ITinventtable.insert();
   
      formrun = element.args().caller();
      formrun.task(#taskF5);

     if(formHasMethod(element.args().caller(), identifierstr('setTouched')))
    {
        element.args().caller().setTouched();
       
    }

    super();

   element.savelastvalues();

}

private void saveLastValues()
{
    xSysLastValue::putValue([FieldInventId.valueStr()], curext(), curuserid(), UtilElementType::Form, form.name());
}

Senin, 15 Desember 2014

Melempar value dari form ke form

Kali ini adalah script untuk melempar value dari Form A ke Form B.

Misalkan kita mempunyai form A dengan value 'husna'. Nilai 'husna' ini ingin kita transfer/lempar ke form B.

Pertama kita mempunyai 2 Form, A dan B
Buat juga menuitem displaynya untuk ke dua form tersebut.

Di form A, tarik menuitem display formB ke form A, jadikan sebagai button link ke form B.
Expand node menuitembutton B ke node method.
tambahkan method Clicked()
void clicked()
{
    Args                    args;
    FormRun                 formrun;
    super();

    args = new Args(formStr([formB]));
    args.record([datasource darimana value berasal]);
    formrun = classFactory.formRunClass(args);
    formrun.init();
   
}
contoh :
void clicked()
{
    Args                    args;
    FormRun                 formrun;
    super();

    args = new Args(formStr(FormB));
    args.record(EmplTable);
    formrun = classFactory.formRunClass(args);
    formrun.init();
    //formrun.run();
    //formrun.wait();
    //formrun.detach();
}
di Classdeclaration Form B
public class FormRun extends ObjectRun
{
    [table value yang akan ditangkap berasal]
    Contoh
    Empltable      empltable;
}
Tambahkan juga method init di form B
public void init()
{
     super();
    empltable = element.args().record();
}

selanjutnya..silahkan diolah ..
misalnya anda ingin menangkap value dari field employeeId.
tinggal ambil dari empltable.

empltable.EmployeeId

Erorr CS1963 - An expression tree may not contain a dynamic operation.

Kali ini saya mendapatkan erorr dengan code CS1963, padahal sebelumnya saya sudah mendefinisikan 'var item in Model' di @foreach(var...