#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();