过滤器在对话框中查找

时间:2011-04-12 08:03:47

标签: dialog x++ axapta

我在类中创建了一个对话框,对话框方法如下

static void dialog(Args _args)
{
Dialog              dialog;
DialogField         dialogFieldCurrentState;
DialogField         dialogFieldNewState;
CustInvoiceTable    custInvoiceTable;


;

custInvoiceTable = _args.record();



dialog                  = new Dialog("Change State");
dialogFieldCurrentState = dialog.addField(TypeID(State_LT),"Current State: ");
dialogFieldCurrentState.value(custInvoiceTable.State);
dialogFieldCurrentState.enabled(false);
dialogFieldNewState     = dialog.addField(TypeID(State_LT),"New State: ");

if (dialog.run())
{
    custInvoiceTable.State =  dialogFieldNewState.value();

}

}

在我的对话框中有两个文件Current StateNew State。现在,当我选择New State所有列表时 显示(不论国家)我不想要的状态。只有国家/地区的国家/地区必须显示 在查找中 。我需要使用类似于例如过滤器的过滤器。 while select while select AddressState where addressState.CountryRegionId == custInvoiceTable.CountryRegionId;所以只有哪个状态 与一个国家有关。

State_LT这里是一个字符串EDT(我把它放在State_LT的关系中)State_LT == AddressState.StateId

在AdressState中有一个方法lookupStateId(),如何从对话框中调用它(上面的代码) ?

2 个答案:

答案 0 :(得分:4)

我正在回答你的上一个问题:“在AdressState中有一个方法lookupStateId(),如何从对话中调用它(上面的代码)?” - 用大写字母书写的方式无助于人们更好地理解你的观点。

目前尚不清楚为什么dialog是一种静态方法,无论如何你需要以下内容。

假设您的ClassDeclaration看起来像这样:

class TestClass1 extends RunBase
{
    Dialog      dialog;
    DialogField dialogFieldCurrentState;
    DialogField dialogFieldNewState;
    // etcetera
}

您的dialog是这样的:

public Object dialog()
{
    ;

    dialog = super();

    dialogFieldCurrentState = dialog.addField(TypeID(AddressStateId),"Current State: ");
    dialogFieldCurrentState.enabled(false);
    dialogFieldNewState     = dialog.addField(TypeID(AddressStateId),"New State: ");
    dialogFieldNewState.lookupButton(FormLookupButton::Always);     // If needed

    return dialog;
}

要按照您希望的方式实现查找,您需要做两件事。首先,打开对话框,右键单击New State,单击Setup,然后检查控件的System Name。例如,如果它是 Fld2_1 ,那么您需要创建以下方法:

void fld2_1_lookup()
{
    Object control = dialog.formRun().controlCallingMethod();
    ;

    AddressState::lookupStateId(control, dialogFieldNewState.value());
}

其次,有必要覆盖以下方法:

public void dialogPostRun(DialogRunbase _dialog)
{
    super(_dialog);

    _dialog.dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogForm().formRun().controlMethodOverloadObject(this);
}

这应该可以解决问题。我有一段时间没有这样做,但我不认为我忘记了什么。

答案 1 :(得分:0)

在对话框中查找客户的示例:

例如,要在对话框中有一个客户选择下拉列表,

  • 报告类声明方法--->

    DialogField CustomerDlg;   CustAccount客户;

    • 在报告对话框中:----->

    dialog.addGroup( “客户”); CustomerDlg = dialog.addField(typeid(CustAccount)); CustomerDlg.value(客户);

    • 在getFromDialog方法中:---->

    ... customer = CustomerDlg.value();