Try OpenEdge Now
skip to main content
Developing AppServer Applications
Design and Implementation Considerations : Deployment considerations : Advantages of using portable r-code
 

Advantages of using portable r-code

ABL r-code is the intermediate binary code that OpenEdge generates when it compiles ABL source files. This is the code that is actually run when a procedure is executed. ABL r-code is portable between two dissimilar platforms if all of the following apply:
*The source code is not dependent on the user interface
*The source code is not dependent on DataServer connections
*The platforms are compatible between 32-bit and 64-bit architectures
For more information, see the sections on portable r-code in OpenEdge Deployment: Managing ABL Applications.
Using portable r-code, you can perform application-server development on a platform that is different from your application-server deployment platform. For example, you can compile r-code that is destined to run on a UNIX 32-bit AppServer agent on a Windows ABL client. Further, this means that by compiling on the Windows ABL client, a compiler license for the UNIX platform is not required.
Note the following cautions if you intend to use portable r-code:
*Examine your code for platform-specific code blocks. The presence of these code blocks can limit your ability to make your r-code portable.
*Ensure that your ABL code addresses all target r-code platforms on which you want your code to run.
The following examples compare platform-specific preprocessor directives that will be resolved at compile time with a comparable ABL code that is resolved at run time.
Preprocessor directive resolved at compile time:
&IF &OPSYS = "WIN32" &THEN
  ...
&ELSE
  &IF &OPSYS = "UNIX" &THEN
  ...
  &ELSE
  ...
Non-preprocessor ABL code resolved at run time:
IF OPSYS = "WIN32" THEN
  ...
ELSE
  IF OPSYS = "UNIX" THEN
  ...
  ELSE
  ...
If the code from the first example is compiled on a Windows client, the "WIN32" logic would be executed even if the resulting r-code is run by an AppServer agent on a UNIX host. Therefore, if there can be multiple deployment platforms for AppServer agent code, you should use run-time resolution for platform-specific blocks as the second code example in this section shows.