Показать сообщение отдельно
Старый 05.04.2006, 12:10   #9  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от oip
vallys, у того класса, с которым я имею дело (LedgerJournalCopyPeriodic) и где я хотел применить controlMethodOverload стоит "Server".
Тогда придется иметь дело с Dialog на клиенте ... Думаю без модификации Dialog или RunBase не обойтись...
Например, можно у Dialog создать методы Dialog.dialogOnClient() и Dialog.setDialogOnClient():
Код:
Dialog dialogOnClient()
{
    return dialogOnClient;
}

void setDialogOnClient(Dialog dialog)
{
    dialogOnClient = dialog;
}
переменную dialogOnClient, естественно, добавить в ClassDeclaration, добавить вызов Dialog.setDialogOnClient() в Dialog::runOnClient():
Код:
...
dialogClient.unpack(dialogCon);
dialogClient.setDialogOnServer(dialogServer);
// тут -->
dialogServer.setDialogOnClient(dialogClient);
// <--
Dialog::addControls(
...
Тогда в RunBase.dialogPostRun(_dialog) имеем доступ к клиентскому Dialog
Код:
public void dialogPostRun(DialogRunbase _dialog)
{
    ;
    super(_dialog);
    _dialog.dialogOnClient().dialogForm().formRun().controlMethodOverload(true);
    _dialog.dialogOnClient().dialogForm().formRun().controlMethodOverloadObject(this);
}
В медодах fld1_1_modified() и fld2_1_lookup() тоже использовать клиентский Dialog, не забывая что все экземпляры DialogField, созданные в RunBase.dialog() принадлежат серверному Dialog
Код:
public boolean fld1_1_modified()  // fieldUpdateMethod
{
    Boolean ret;
    Object  control = dialog.dialogOnClient().formRun().controlCallingMethod();
    ;
    ret = control.modified();
    if (ret)
    {
        dialog.dialogOnClient().name2dialogClass().lookup(DialogRContractAccount.name()).value('');
    }
    return ret;
}

public boolean fld2_1_lookup()  // fieldUpdateMethod
{
    Boolean ret;
    Object  control = dialog.dialogOnClient().formRun().controlCallingMethod();
    ;
    RContractTable::lookupByCust(control, dialog.dialogOnClient().name2dialogClass().lookup(DialogRContractAccount.name()).value());
    return true;
}
Написал из головы - на практике не проверял
За это сообщение автора поблагодарили: Zick-Zibn (2), oip (1).