JavaScript uses different characters from those used within the DataWindow to delimit strings and identify special characters. For DataWindow object properties, several levels of nested strings and two types of delimiter can create a complicated expression.
In JavaScript, strings are delimited by double quotes and the escape character in strings is the backslash (\). The escape character allows you to include double quotes and special characters within a string. The DataWindow can use either double or single quotes to delimit strings and uses tilde (~) as an escape character.
Because some parts of the string are parsed by the language and some by the DataWindow, strings passed to the DataWindow often use both types of escape character. The one to use depends on whether the DataWindow or the external language will evaluate the character. The external language deals with the outer string and converts escape sequences to the corresponding special characters. Nested strings are dealt with by the DataWindow parser.
Observe these guidelines for each type of character:
Special characters use the language escape character. Tabs, newlines, and carriage returns are \t, \n, \r
Nested double quotes require the language escape character (\) so they won't be interpreted as the closure of the opening double quote. Depending on the level of nesting, they may also require the DataWindow escape character (~).
Single quotes for nested strings do not need the language escape character, but depending on the level of nesting they may need the DataWindow escape character.
Tildes are specified in odd-numbered groups. They do not interact with the language escape character in counting the number of escape characters used.
Both of these JavaScript examples are valid ways of nesting a string:
dw_1.Modify("DataWindow.Crosstab.Values=\"empname\"");
dw_1.Modify("DataWindow.Crosstab.Values='empname'");
The following three JavaScript statements specify the same string. They show a string with three levels of nesting using different combinations of escape characters and quote types. In the first example, note the escaping of the inner quote with a tilde for the DataWindow and a backslash for the language:
dw_1.Modify("emp_id.Color=\"16777215 \t If (emp_status=~\"A~\",255,16777215)\"");
dw_1.Modify("emp_id.Color=\"16777215 \t If (emp_status='A',255,16777215)\"");
dw_1.Modify("emp_id.Color='16777215 \t If (emp_status=\"A\",255,16777215)'");
The corresponding example in PowerBuilder is:
dw_1.Modify("emp_id.Color = ~"16777215 ~t If (emp_status=~~~"A~~~",255,16777215)~"")
A special case of specifying tildes involves the EditMask.SpinRange property, whose value is two numbers separated by a tilde (not an escape character, simply a tilde). In code, the value is in a nested string and needs a tilde escape character. The two tildes are interpreted as a single tilde when parsed by the DataWindow:
dw_1.modify("benefits.EditMask.SpinRange='0~~10'");