фильтр искать в диалоге

Я создал диалог в классе, метод диалога приведен ниже.

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 State и New State. Теперь, когда я выбираю New State, отображается список всех состояний (независимо от страны), которые мне не нужны. В поиске должны отображаться только штаты, соответствующие стране. Мне нужно использовать фильтр, например, например. while select while select AddressState where addressState.CountryRegionId == custInvoiceTable.CountryRegionId;, чтобы отображались только состояния, связанные со страной.

State_LT здесь представляет собой строку EDT (где я поставил отношение State_LT) State_LT == AddressState.StateId

В AdressState есть метод lookupStateId(), как его вызвать из диалога (код выше)?


person piku    schedule 12.04.2011    source источник


Ответы (2)


Отвечаю на ваш последний вопрос: "В 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;
}

Чтобы реализовать поиск так, как вы хотите, вам нужно сделать две вещи. Сначала откройте диалоговое окно, щелкните правой кнопкой мыши новое состояние, выберите «Настройка» и проверьте системное имя элемента управления. Если, например, это 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);
}

Это должно делать свое дело. Давно этого не делал, но не думаю, что что-то забыл.

person 10p    schedule 14.04.2011
comment
Еще раз спасибо 10p и да, я согласен с вами с CAPS, извините :) - person piku; 15.04.2011
comment
я добавил метод упаковки/распаковки, запуска в класс, и он работает хорошо. Кстати, зачем нам здесь паковать/распаковывать? Это необходимо? Также я хочу, чтобы состояние, выбранное в другой форме, было передано в это (диалоговое) поле currentState... - person piku; 15.04.2011
comment
Пожалуйста, проверьте страницу 167 Inside Microsoft Dynamics AX 4.0: download.microsoft.com/download/2/5/8/ - person 10p; 15.04.2011
comment
огромное спасибо! одно точно ... если я знаю AX, это из-за вас, ребята, и ТАК :) - person piku; 15.04.2011

Пример поиска клиента в диалоге:

Например, чтобы в диалоговом окне отображалось раскрывающееся меню выбора клиента,

  • В методе объявления класса отчета --->

    DialogField CustomerDlg; клиент CustAccount;

    • In the reports dialog method: ----->

    dialog.addGroup("Клиент"); CustomerDlg = dialog.addField(typeid(CustAccount)); CustomerDlg.value(клиент);

    • В методе getFromDialog: ---->

    ... клиент = CustomerDlg.value();

person maeve k    schedule 14.04.2011