Цитата:
Сообщение от
sukhanchik
... RunBase - несмотря на то, что создается на сервере - он сам делает клиентскую копию себя, откуда и работает с формой. А данные просто передает через контейнер между экземплярами классов.
Хм... Думаю, что RunBase (вернее его наследник) делает клиентскую копию себя только если "Run on" равно "Called from" и экземпляр RunBase создан на сервере. Это можно увидеть в RunBase.PrompPrim():
Код:
...
// Move prompt to client when running on server and the class is swappable
if (isRunningOnServer() && this.canSwapBetweenCS() && this.canSwapBetweenCSPrim())
{
[clientPrompt,clientPacked] = runbase::promptOnClient(classidget(this),this.promptPack());
this.promptUnpack(clientPacked,clientPrompt);
return clientPrompt;
}
...
Если "Run on" равно "Server", то создается клиентская копия Dialog - см. Dialog.doRun() и Dialog::runOnClient(). Соответственно в метод RunBase.dialogPostRun() передается серверный Dialog у которого формы нет, а клиентский (c формой) остается 'в тени'.
Цитата:
Сообщение от
oip
Т.е. если класс выполняется на сервере, то ничего не поделаешь?
IMHO лучше "Run on" выставлять в "Called from" и создавать экземпляр RunBase на сервере принудительно. Получим и Dialog на клиенте (со всеми DialogField и формой) и выполнение RunBase.run() на сервере.