Thick client support in managed applications that run in the client/server mode

This article describes the standards that apply to implementation of thick client support in managed applications that run in the client/server mode. All of the listed recommendations are mandatory unless noted otherwise.

1. When you implement the thick client support in managed client/server applications, keep in mind that in this scenario the server code might be executed on the client.

You might need to implement the thick client support in the managed mode because some of the platform features are not available in the thin client.

2. You might need to implement the execution of some server code fragments on the client:

  • Event handlers in manager modules (ChoiceDataGetProcessing, FormGetProcessing, and so on)
  • Subscriptions to these manager module events

Enclose the rest of the server code, which is located in the session module, object modules, managed modules, and modules of other metadata objects (except form, command, and common modules), in the following preprocessor instruction:

#If Server Or ThickClientOrdinaryApplication Or ExternalConnection Then


To perform a quick configuration integrity check for the scenario where a managed application running in the client/server mode is accessed using a thick client, you can use the configuration check feature.

3. If you need to call server procedures or functions from the client code, implement them in common server modules with the Server call flag. Ensure that values of mutable types (CatalogObject, DocumentObject, and so on) are not passed to the procedure parameters and function return values. 

Incorrect example of ChoiceDataGetProcessing event handler:

Procedure ChoiceDataGetProcessing(ChoiceData, Parameters, StandardProcessing)
  Interactions.ChoiceDataGetProcessing(ChoiceData, Parameters);
  StandardProcessing = False;

The correct example includes a server call (and no values of mutable types are passed):

Procedure ChoiceDataGetProcessing(ChoiceData, Parameters, StandardProcessing)

  InteractionsServerCall.ChoiceDataGetProcessing(ChoiceData, Parameters);
  StandardProcessing = False;


Add comment