Как отфильтровать значения поиска в диалоговом поле в диалоговом окне отчета на основе другого диалогового поля в отчетах AX 2012 AOT?

Как я могу реализовать настраиваемый поиск в диалоговом окне отчета.

например, у меня есть два поля в моем диалоговом окне отчета 1) Custgroup 2) CustAccount

если я выбрал конкретную группу клиентов в первом поле, то поиск во втором поле должен показывать только клиентов, которые входят в эту группу клиентов.

//class

    public class ReportRun extends ObjectRun
    {

        DialogField dialogcustGroup,dialogcustaccount ;
        CustTable  obj_CustTable ;
    }

   //dialog method
   public Object dialog(Object _dialog)
{
    DialogRunbase dialog = _dialog;
    DialogGroup     toFromGroup;
    Args _args;
    str accountnum,custGroup;
    ;
   // _args =  new Args();
   //  obj_dev_CustTable = _args.record(); 
    //accountnum = obj_dev_CustTable.AccountNum;

    dialogcustGroup = dialog.addFieldValue(extendedTypeStr(CustGroup),CustGroup,"");

    while select obj_CustTable
         where obj_CustTable.AccountNum == dialogcustGroup .value()
    {
         CID     =  obj_dev_CustTable.CID;
     dialogcustaccount =dialog.addFieldValue(ExtendedTypeStr(AccountNum),accountnum,"CID");
    }


    return dialog;
}  

Любая помощь будет здорово!!!!


person Mohd Saddaf khan    schedule 24.01.2013    source источник


Ответы (2)


Лучший способ сделать это — переопределить метод lookup() для указанного DialogField. См. пример ниже — он работает просто отлично.

class CustomizedLookup extends RunBase
{
   DialogRunbase               dialog;
   DialogField                 dFieldCustGroup;
   DialogField                 dFieldCustAccount;
   CustGroupId                 fetchedCustGroup;
   CustAccount                 fetchedAccountNum;
}
protected Object dialog()
{
   dialog = super();

   FieldCustGroup = dialog.addField(extendedTypeStr(CustGroupId),"sysLabel1");
   dFieldCustGroup.allowEdit(true);

   dFieldCustAccount = dialog.addField(extendedTypeStr(CustAccount),"sysLabel1");
   dFieldCustAccount.allowEdit(false);

   return dialog;
}
public void dialogPostRun(DialogRunbase _dialog)
{
   super(_dialog);

// allow to call the event methods 
// of this class (e.g. Fld1_1_modified() method)
   _dialog.dialogForm().formRun().controlMethodOverload(true);
   _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
}
private boolean Fld1_1_modified() // dFieldCustGroup
{
   FormStringControl   control;
   boolean             isFieldModified;

   control = dialog.formRun().controlCallingMethod();

   isFieldModified = control.modified();

   if(isFieldModified)
   {
       fetchedCustGroup   = dFieldCustGroup.value();
       dFieldCustAccount.allowEdit(true);
   }
   return isFieldModified;
}
private void Fld2_1_lookup() //dFieldCustAccount
{
   FormStringControl control = dialog.formRun().controlCallingMethod();
   SysTableLookup sysTableLookup =  SysTableLookup::newParameters(tablenum(CustTable),control);
   Query                   query = new Query();
   QueryBuildDataSource    queryBuildDataSource;
   QueryBuildRange         queryBuildRange;

   queryBuildDataSource = query.addDataSource(TableNum(CustTable));
   queryBuildRange = queryBuildDataSource.addRange(FieldNum(CustTable, CustGroup));
   queryBuildRange.value(fetchedCustGroup);  

   sysTableLookup.addLookupfield(fieldnum(CustTable, AccountNum));
   sysTableLookup.addLookupfield(fieldnum(CustTable, CustGroup));
   sysTableLookup.parmQuery(query);
   sysTableLookup.performFormLookup();
}
public boolean getFromDialog()
{
   boolean ret;

   ret = super();

   fetchedAccountNum = dFieldCustAccount.value();

   return ret;
}
static void main(Args _e)
{
   CustomizedLookup customizedLookup;

   customizedLookup = new CustomizedLookup();

   if (customizedLookup.prompt())
   {
       customizedLookup.run();
       // do some actions with your data 
       customizedLookup.theAction();         
   }
}
private void theAction()
{
   info(strFmt("Customer Group: %1",fetchedCustGroup));
   info(strFmt("Account Number: %1",fetchedAccountNum));
}
person SchinSchiLa    schedule 27.08.2014

Необходимо объявить еще несколько методов, таких как pack, unpack и main.

person user978324    schedule 24.01.2013