Description
Repetitively referring objects as arguments for a function is unsupported. Use the following workaround and example to change it into a supported format.
Workaround
Assign the repetitively referenced object to multiple different variables and pass these variables to a function.
Example
The original script:
w_1.wf_1(dw_1,dw_1)
Re-write it using the following format:
u_dw ldw_1, ldw_2 ldw_1 = dw_1 ldw_2 = dw_1 w_1.wf_1(ldw_1,ldw_2)
Description
Passing Menu object as a reference parameter is unsupported.
Workaround
Pass the Menu object by value or as read-only instead of by reference. The reason is, when passing by value or as read-only, if you change the properties of the object by value or as read-only, you are changing the original object, which is the same as passing by reference.
Description
The return values of functions and properties of objects cannot be directly used as reference parameters for functions.
Workaround
Follow the steps below to work around this issue:
Step 1: Create a variable and assign the return value of a function or the property of an object to the variable.
Step 2: Call the variable where the return value or the property is called in the original code.
Step 3: Assign the return value of calling the variable to the original property or object.
Code example
The original code
poptags(theobject.item[theitem])
Modified to
menu lm_menu lm_menu = theobject.item[theitem] poptags(lm_menu)
Description
Shared variables are unsupported. For example, In the pfcmain.pbl of a PFC application, the pfc_u_dw uses a shared variable snv_property with its type being n_cst_dwsrv_property. The snv_property is unsupported.
Workaround
Follow the steps below to work around this issue.
Step 1: Change the variable snv_property as an instance variable of n_cst_appmanager (usually declared as gnv).
Step 2: Open the pfc_u_dw, and replace all the "snv_property" with the "gnv_app.snv_property".
Note
Since the parent code is changed, when deploying a new PFC, the same modification needs to be done again.
Other shared variables can also be worked around in this way.
Description
The Null value calculation in PowerServer is quite different from that in PowerBuilder. This is caused by the different calculation methods used in PowerScript and JavaScript.
Workaround
When using expressions with Null value calculations, you should add conditional statements to ensure that you get the correct result.
Example #1
A and/or B is/are likely to carry a Null value in the following assignment:
C = A + B
Re-write it using the following format:
IF IsNull(A) or IsNull(B) THEN SetNull(C) ELSE C = A + B END IF
Example #2
Another example for relational operations:
IF A = B then MessageBox ("Return Value","True") ELSE MessageBox ("Return Value","False") END IF
Re-write it using the following format:
IF IsNull(A) or IsNull(B) then MessageBox ("Return Value", "False") ELSEIF A = B then MessageBox ("Return Value", "True") ELSE MessageBox ("Return Value", "False") END IF
Note
The following table shows the different return values that PowerBuilder and PowerServer will produce when an expression contains at least one null value. In these examples, the values of variables A and B are both null:
Expressions |
Return Value in PowerBuilder |
Return Value in PowerServer |
---|---|---|
A+1 |
Null |
1 |
A+B |
Null |
Null |
A*B |
Null |
0 |
A=1 (relational) |
Null |
False |
A<>1 |
Null |
True |
NOT (A=1) |
Null |
True |
A=A (relational) |
Null |
True |
A=B |
Null |
True |
IsNull(A=1) |
True |
False |