фильтр посмотреть в диалоге - PullRequest
0 голосов
/ 12 апреля 2011

Я создал диалог в классе, метод диалога выглядит следующим образом:

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

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

Я отвечаю на ваш последний вопрос: "В 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» и проверьте имя системы элемента управления.Например, если это 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);
}

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

0 голосов
/ 14 апреля 2011

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

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

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

    DialogField CustomerDlg;CustAccount customer;

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

    dialog.addGroup ("Customer");CustomerDlg = dialog.addField (typeid (CustAccount));CustomerDlg.value (customer);

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

    ... customer = CustomerDlg.value ();

...