Вообще варианта 2, но попробую показать на одном из них. (картинки с обоими вариантами prompt в классах RunBase неоднократно пробегали на форуме и даже есть в директории аксапты)
X++:
// 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;
}
Вот собственно этот код есть в методе promptPrim класса RunBase
Как видим, вызываются последовательно promptPack и promptUnpack, которые в свою очередь вызывают pack и unpack класса.
То есть, когда класс исполняется на сервере, параметры в диалог попадают через те же методы, что и обычно. Но, соответственно, для того, чтобы они вернулись из диалога, они должны сохраняться в методе pack()