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

#dialog #x #axapta

#диалоговое окно #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 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(), как вызвать его из диалогового окна (код выше)?

Ответ №1:

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

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

Комментарии:

1. Еще раз спасибо 10p и да, я согласен с вами с заглавными буквами, извините 🙂

2. я добавил метод pack / unpack, run в класс, и он работает хорошо. Кстати, почему нам нужно упаковать / распаковать здесь? Это необходимо? Также я хочу, чтобы состояние, выбранное в другой форме, передавалось в это (диалоговое) поле currentState…

3. Пожалуйста, проверьте страницу 167 внутри Microsoft Dynamics AX 4.0: download.microsoft.com/download/2/5/8 /…

4. огромное спасибо! одно можно сказать наверняка .. если я знаю AX, это из-за вас, ребята, и ТАК ДАЛЕЕ 🙂

Ответ №2:

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

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

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

    Диалоговое поле CustomerDlg; учетная запись customer;

    • В методе диалога отчетов: ——>

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

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

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