Вы находитесь на странице: 1из 15

Business HTML

Compiled by: Seetharam Maddali


Embedding HTML-Business Expressions in HTML
HTML-Business expressions are embedded in HTML pages using the standard mechanism of the
<server> tag. A typical statement could look like this:
<h1> Order Status </h1>
<p> Customer Number: <server> VBCOM-KUNDE </server>
...
This causes the screen field VBCOM-KUNDE (VBCOM-CUSTOMER) to be included in the
Web page. HTML-Business expressions must always be enclosed in the <server> tag.
A problem arises if HTML-Business is inserted within an HTML tag. The following is not
possible in HTML:
<a href="<server> screenURL </server>"> Link </a>
HTML does not permit tags within tags, so <p <b>> is incorrect. HTML editors in particular
cannot cope with tags of this kind. For this reason an additional way of marking scripting
statements was introduced with JavaScript: the back tick (`). This character is used in the same
way as the <server> tag and can be used inside tags. The above hyperlink can therefore be written
as:
<a href="`screenURL`"> Link </a>
If the back tick appears in an HTML page as an uninterpreted character, it must be inserted with
the code "&#96". The line
<p> The following is an HTML Business expression: &#96VBCOM-KUNDE&#96 </p>
is left uninterpreted in the Web page and generates the following output on the browser
The following is an HTML Business expression: 'VBCOM-KUNDE'
Using Comments in HTML-Business
You can use HTML comments for commenting on HTML-Business expressions. An HTML
commentary starts with "
<!--" and ends with "-->" (a commentary may not end with ">" alone).
HTML-Business expressions which occur inside an HTML comment appear as uninterpreted
output on the page. Therefore the line
<!-- `VBCOM-KUNDE` -->
is not interpreted.
Furthermore, you can add comments on parts of an HTML-Business expression, also using
HTML comments. The following line contains a valid HTML-Business expression:
`repeat with j from 1 to <!--stepLoop.dim --> 10`
NOTE:
Remember, HTML comments end with "-->". The character ">" alone does not indicate the end
of a comment.
Business HTML
Compiled by: Seetharam Maddali
Linking HTML-Business Statements
Just as in JavaScript or C, several HTML-Business statements can be linked using a semicolon.
The following format is correct:
<p> `for (j=0; j <= array.dim; j++)
j; write("="); array[j]; write (", ")
end`
</p>
You could also write:
<p> `for (j=0; j <= array.dim; j++)`
`j` `write("=")` `array[j]` `write (", ")`
`end`
</p>
There must always be a semicolon or at least a single-character HTML code between successive
HTML-Business statements. In the above example, spaces fulfill this requirement. The following
sequence, however, would lead to an error:
<p> `for (j=0; j <= array.dim; j++)`
`j` `write("=")` `array[j]` `write (", ")`
`end`
</p>
These statements would be interpreted by SAPJulep as
for (j=0; j <= array.dim; j++)
j write("=") array[j] write (", ")
end
but this does not work because of the missing semicolons.
It is not necessary to have a semicolon before the key words "end", "else", "elsif" and "elseif" or
after statements which introduce a block. These are "for ()", "if ()", "elsif ()", "elseif ()"
and "repeat ".
Example:
Following this rule, the example below is correct:
`if (1)
for (i=j=1; i<=array.dim; i++)
write("array[i]="); <!-- this semicolon is mandatory -->
array[i]
end
else
j=0; write ("This never occurs!")
end;
if (j)` The impossible occurred! `End`
Business HTML
Compiled by: Seetharam Maddali
Variable Substitutions
The principal task of HTML-Business is to include values from R/3 screens in the Web page.
This is achieved by matching the names of the identifiers.
The following identifiers are available. Please note the syntax used in the table.
Nonterminal Derivation
___________ _________________________________________
field { ^ } identifier [ [ expression ] ] [ . attribute ]
attribute label |visSize |maxSize |dim |disabled |name |value
In HTML-Business, identifiers follow the same conventions as used in other programming
languages such as C or JavaScript. They must start with a letter (a...z, A...Z), an underscore (_) or
a tilde (~) and can consist of any number of these characters, including the digits 0-9 and hyphens
(-).
Example:
The following are valid identifiers:
nCustomers
_foo_bar
~frame
date1
ordered_items
vbcom-kunde
If you want to use identifiers containing other characters, for example the multiplication sign (*),
you must enclose these identifiers in single quotes. This is also the case if an identifier has the
same name as a key word. For example:
'from'
'*vbcom-kunde'
'$@#identifier()***'
NOTE:
You do not have to enclose identifiers such as VBCOM-KUNDE in single quotes
because of the hyphen. Simply write `VBCOM-KUNDE` instead of `'VBCOM-
KUNDE'`.
However, if the expression "VBCOM minus KUNDE" is to be evaluated, there must be
at least one space after "VBCOM" and before the minus sign: `VBCOM - KUNDE`
To include the contents of the field VBCOM-KUNDE on the R/3 screen in the HTML page,
simply enclose it in <server> tags or in the equivalent back ticks:
<p> Customer number: `vbcom-kunde` </p>
Business HTML
Compiled by: Seetharam Maddali
The possible attributes are:
dim The number of values for a field (= dimension)
maxSize Maximum permitted number of characters the field can hold
visSize Maximum number of characters displayed by the field in the screen
disabled Is the screen field ready for input? (This attribute is not yet supported. In future it
will be possible to use it to determine whether a field is ready for input.)
label Text describing the input field of the same name
name Outputs the complete name and index of the field.
Value Outputs the current value of the field. This attribute provides no added
functionality. It is used for syntax consistency and has the same effect as
specifying the field name without the value attribute.
Indirection
With the aid of the caret character "^", identifiers can be used as pointers. If, for example,
"field_name" has the value "vbcom-kunde", the following statement results in the field "vbcom-
kunde" being output:
<p> The value of the field 'Field_Name` is '^Field_Name` </p>
The following appears after this in the HTML page, for example:
<p> The value of the field VBCOM-KUNDE is 3100 </p>
Multiple indirections are possible, for example ^^^scarcely_practical[j]
maxSize and visSize
Nonterminal Derivation
_____________ ________________
attribute maxSize
attribute visSize
It is possible to access the maximum input length and the field's maximum visible length on the
screen. This can be done using the attributes maxSize and visSize, and can be activated as
follows:
<p>Please enter your customer number
<input type=text name="vbcom-kunde"
size=`vbcom-kunde.visSize`
maxSize=`vbcom-kunde.maxSize`>
</p>
Label
Nonterminal Derivation
_____________ ________________
attribute label
If an input field on the screen has a description with the same field name, it is possible to access
this description using the label attribute:
<p> `vbcom-kunde.label`: <input type=text name="vbcom-kunde">
Business HTML
Compiled by: Seetharam Maddali
In this way, in addition to the possibility of resource files (see also language resolution via source
files), it is possible to achieve language independence in HTML pages, for the R/3 logon
language then determines the texts in the HTML page.
Business HTML
Compiled by: Seetharam Maddali
Dim
Nonterminal Derivation
attribute dim
Dim is an important attribute. It indicates how many values a field has (dimension of a multi-
value field, array dimension). This is important for step loops on the screen which are represented
in multiple-value fields. For example, if the step loop has a column formed from the field
VBCOM-WGKEY with 20 rows, VBCOM-WGKEY.dim returns the value 20. For fields with
only one value, the value 1 is returned, and if a field is not defined, the value returned is 0.
Multiple-value fields are activated by specifying an additional index. This is added in square
brackets in the usual way and is defined using the values 1 to dim. If you wanted to activate the
second value of the field VBCOM-WGKEY for example, you would need the following
expression:
<p> Material group No. 2: `vbcom-kunde[2]` </p>
If a negative index is accessed, a runtime error occurs. Indices which are greater than the value
defined by dim lead to output of an empty string.
Name and Value
Nonterminal Derivation
attribute name
attribute value
The attributes name and value, when used together with HTML input tags, help to construct valid
field names.
The attribute value simply outputs the value of its field and does therefore not provide added
functionality.
The attribute name outputs the complete name and index of the given field.
Example:
For example, to create an input tag for the multi-value field "vmcom-kunde", you could write
`repeat with I from 0 to vbcom-kunde.dim`
<input type=text name="vbcom-kunde[`I`]" value="`vbcom-kunde[I]`">
`end`
This results, for example, in the following output:
<input type=text name="vbcom-kunde[1]" value="4711">
<input type=text name="vbcom-kunde[2]" value="8523">
<input type=text name="vbcom-kunde[3]" value="1234">
As the previous example shows, the sequence of backticks and quotes might be confusing.
Instead, you could use the attributes .name and .value to write:
`repeat with I from 0 to vbcom-kunde.dim`
<input type=text name="`vbcom-kunde[I].name`" value="`vbcom-kunde[I].value`">
`end`
The output will be the same as in the example above, that is:
<input type=text name="vbcom-kunde[1]" value="4711">
<input type=text name="vbcom-kunde[2]" value="8523">
<input type=text name="vbcom-kunde[3]" value="1234">
Business HTML
Compiled by: Seetharam Maddali
Reserved Key Words
The following tokens are reserved as key words:
Keywords
archiveURL assert by declare
define else elseif elsif
end for from if
imageURL in include mimeURL
repeat times to wgateURL
with write writeEnc
These key words cannot be used as identifiers. If an identifier with the same name is used, it must
be enclosed in simple ticks ('), e.g. `repeat with i from 'from' to 'to'`
Expressions
In HTML-Business, expressions can be used in the same way as in C or JavaScript.
You can use the expressions shown in the table below. Please note the syntax used in the table.
Nonterminal Derivation
_____________
_________________________________________________________________
expression simpleexpr [compop simpleexpr]
simpleexpr term { addopr simpleexpr}
term factor { mulopr factor}
factor (! | ++ | --) factor( expression ) |function call |assignment |lvalue [++ | --]
|constant
function call internalfn ( argument {, argument} ) |externalfn ( expression {, expression} )
internalfn write | writeEnc | wgateURL | archiveURL | imageURL | mimeURL | assert
mulopr * / % &&
addopr + - & ||
compop == | != | > | < | >= | <=
Bracketing is supported if the evaluation sequence of the operators is to be broken.
Operators with identical weighting are grouped and are evaluated from left to right. The
following operators are permitted, listed in decreasing weighting:
Operator Semantics
! Not
++ Increment
-- Decrement
= Assignment
* Multiplication
/ Division
% Modulus
&& Logical and
Business HTML
Compiled by: Seetharam Maddali
+ Addition
- Subtraction
& Concatenation
|| Logical or
== Equal to
!= Not equal to
> Greater than
< Smaller than
>= Greater than or equal to
<= Smaller than or equal to
Example:
The following are examples of correct expressions:
vbcom-kunde
nCustomers % 10
!fExists
a > b*2+1
name != "Walt"&" "&"Whitman"
(x -y) * (a+b) & " US$"
cond1 && (cond2 || cond3) && cond4
Functions
HTML-Business provides the following useful standard functions for some transactions.
Please note the syntax used in the following tables.
write
writeEnc
wgateURL
archiveURL
mimeURL
imageURL
assert
HTML-Business contains a function "write()" which is similar to that in JavaScript. This permits
expressions to appear as output in the HTML page. In this process, the individual arguments are
included in direct succession in the HTML page; no field separators are added.
write
Nonterminal Derivation
function write ( expression {, expression} )
Example:
Two examples:
<p> `write (i, ". ", xlist-matnr)` </p>
<p> `write (j * 2, 123, j > 3)` </p>
Business HTML
Compiled by: Seetharam Maddali
writeEnc
"writeEnc()" behaves like "write()". However, in contrast to "write", the output is included in the
page URL coded (therefore "
Enc": "encoded"). All non-alphanumeric characters are converted into the relevant hexadecimal
coding. This may be necessary if a URL is to be set up which contains fields including special
characters or blanks.
Nonterminal Derivation
function writeEnc ( expression {, expression} )
Example:
The difference between write and writeEnc can be illustrated using the following example:
<a href="http://pn0208/scripts/any.dll?matbez=`write (matbez[j])`&quantity=1">
The least favorable expansion of the above code example is:
<a href="http://pn0208/scripts/any.dll?matbez=Grosse Stuehle&quantity=1">
Spaces, for example between "Grosse Stuehle" [large chairs], are not permitted in URLs.
However, if "writeEnc" is used:
<a href="http://pn0208/scripts/any.dll?matbez=`writeEnc(matbez[j])`&quantity=1">
the following is completely correct:
<a href="http://pn0208/scripts/any.dll?matbez=Grosse%20Stuehle&quantity=1">
wgateURL
In order to communicate with the ITS software as safely and simply as possible, the function
"wgateURL()" has been incorporated into HTML-Business. Using this it is possible to send
parameters to the servers without thinking about internal system information or coding a URL
into HTML templates permanently. In this way, templates are easily portable between servers.
Nonterminal Derivation
function wgateURL ( identifier = expression {, identifier = expression} )
The following example shows how this works:
<ul>
`repeat with j from 1 to xlist-matnr.dim`
<li>
<a href="`wgateURL(matnr=xlist-matnr[j], quantity=xlist-
kwmeng[j])`">
`xlist-matbez[j]` </a> </li>
`end`
</ul>
This HTML template would be expanded as follows:
<ul>
<li>
Business HTML
Compiled by: Seetharam Maddali
<a href="http://pn0208/scripts/wgate.dll/vw01?~State=4711&matnr=9132&quantity=2">
Microsoft Word Update </a> </li>
<li>
<a href="http://pn0208/scripts/wgate.dll/vw01?~State=4711&matnr=9133&quantity=1">
Microsoft Excel Update </a> </li>
</ul>
Always ensure that the value of the attribute href is enclosed in double quotes (").
In addition to including system information such as the field "~State", the function also codes all
parameters in accordance with URL requirements (see also writeEnc ).
The URL used by "wgateURL()" is defined in the global service description "global.srvc" under
the name "~URLwgate" and can be adapted there for the appropriate server.
The parameter "~target" has a special meaning. This is explained in full in the Browser
Independence section.
Using the parameter "~anchor", an HTML anchor can be generated in the Wgate URL:
<form method="POST" action="`wgateURL(~anchor="footer")`">
This is expanded to:
<form method="POST" action="/scripts/wgate.dll/vw01#footer">
archiveURL
The function "archiveURL()" can be used in the same way as "wgateURL()" to access the iXOS
archive system.
Derivation
archiveURL ( command, archiveID=expression, docID=expression)
The individual parameters should be taken from the product description of the accompanying
Archive-Web-Dll.
In order to implement this function, the relevant Archive-Web-Dll must first be installed correctly
on the Web server.
The URL used by "archiveURL()" is specified in the global service description "global.srvc"
under the name "~URLarchive".
imageURL
Note:
As of Version 1.1 of the ITS and Version 3.1H of R/3, the imageURL function is
obsolete. New HTML templates should use the mimeURL function instead. However, the
imageURL function is still supported to ensure compatibility with existing HTML
templates.
Using the function "imageURL()" it is possible to access images which are stored directly in the
HTTP server's file system according to their language. This allows the management of multi-
lingual images.
Business HTML
Compiled by: Seetharam Maddali
Derivation
imageURL ( ~type=expression [, ~theme=expression] [, ~language=expression] , ~
name=expression )
This function permits the images from Web sites to be activated according to language and
theme.
The URL generated depends on the following dimensions:
~URLimage (defined in global.srvc)
The image type (~type)
The current logon language (~language)
The current theme (~theme)
The name of the image (~name)
From these dimensions the basic directory structure results in:
<~URLimage>/<~type>/<~language>/<~theme>/<~name>
The dimensions ~language and ~theme are initially obtained from the service description file, but
can be overwritten if explicit entries are made when imageURL() is called up.
Values which are not defined or which are empty are removed from the directory structure.
Example:
Some examples (where ~language is "E" and ~theme is not defined):
<img src="`imageURL(~type="backgrounds", ~name="marmor.gif")`">
gives
<img src="/sap/its/graphics/backgrounds/E/marmor.gif">
<img src="`imageURL(~language="", ~name="marmor.gif")`">
gives
<img src="/sap/its/graphics/marmor.gif">
<img src="`imageURL(~theme="ides", ~name="marmor.gif")`">
gives
<img src="/sap/its/graphics/E/ides/marmor.gif">
<img src="`imageURL(~type="backgrounds", ~theme="ides",
~language="D", ~name="marmor.gif")`">
gives
<img src="/sap/its/graphics/backgrounds/D/ides/marmor.gif">
mimeURL
The function mimeURL() replaces the function imageURL() and should be used instead. It
provides more flexible and easier access to service, language and theme dependent files like
images, sounds and other multimedia data (hence the name mimeURL).
Derivation
mimeURL ( [ [~service]=expression, ] [ [~theme]=expression,] [ [~language]=expression,]
[~name]=expression )
Business HTML
Compiled by: Seetharam Maddali
Parameter names can be omitted resulting in shorter but less comprehensible function calls. All
parameters except ~name are optional and will be derived from the current session context if not
already defined as an argument. If parameter names are omitted the default order is: ~service,
~theme, ~language, ~name
Similar to the imageURL() function, mimeURL() constructs a URL path into the web server's
document directory. The general structure of this path is:
<~URLmime>/<~service>/<~theme>/<~language>/<~name>
Depending on the presence of certain function arguments parts of this path are omitted.
The parameters have the following meaning:
ParameterSemantics
~service Specifies the name of the service; if omitted the name of the current service will
be used. Special service names are "global" - which should be used for all files that
are used by several servers - and "system" - which is used for the ITS system
messages.

~theme Specifies the theme to use; if omitted the current theme (defined in the service's
.srvc-file) is used. You can specify ~theme="" which will omit the whole theme-
part of the path constructed
~language .Specifies the language to use; if omitted the current language (defined in the
service's .srvc-file or using the login page) is used.You can omit the language-part
in the path constructed by specifying ~language="".
~name Defines the name (and optional subdirectories) of the file to be referenced.
Examples are "ok.gif" or "buttons/roundones/cancel.gif".
Example:
The following examples illustrate the use of mimeURL():
If ~URLmime is set to /sap/its/mimes, the current service is vw01, the current language is E and
the current theme is 99, calling mimeURL() will result in the following output:
<img src="`mimeURL(~name="ok.gif")`">
gives <img src="/sap/its/mimes/vw01/99/E/ok.gif">
<img src="`mimeURL(~service="global", ~name="ok.gif")`">
gives <img src="/sap/its/mimes/global/99/E/ok.gif">
<img src="`mimeURL("", ~name="buttons/ok.gif")`">
gives <img src="/sap/its/mimes/99/E/buttons/ok.gif">
<img src="`mimeURL("","buttons/roundones/ok.gif")`">
gives <img src="/sap/its/mimes/99/E/buttons/roundones/ok.gif">
<img src="`mimeURL("", 1, "buttons/roundones/ok.gif")`">
gives <img src="/sap/its/mimes/1/E/buttons/roundones/ok.gif">
Business HTML
Compiled by: Seetharam Maddali
<img src="`mimeURL("global", 1, "D", "buttons/roundones/ok.gif")`">
gives <img src="/sap/its/mimes/global/1/D/buttons/roundones/ok.gif">
<img src="`mimeURL(~service="system", ~name="ok.gif", 1, "")`">
gives <img src="/sap/its/mimes/system/1/ok.gif">
assert
Using the function "assert()", error messages from the R/3 System can be reproduced collectively
in Web pages.
Derivation
assert ( identifier )
If an error occurs in the R/3 System while user entries are being checked (for example, non-
acceptance of an entry), the present cursor position (focus) on the screen is used to determine
which field caused the error. The error message itself appears in the system field
"~MessageLine".
When generating the HTML page, a check is made for each assert() statement, to see if the field
name given for assert matches the field in the screen on which the cursor is placed due to the
error.
assert() then issues an appropriate error message. The default is: "@@ Error @@".
The output from assert() can be changed through definition of the system field "~ErrorMarker" in
the global service description "global.srvc". Any HTML code can be defined.
For example:
<form >

Material no <input type="text" name="matnr">`assert(matnr)`
Quantity <input type="text"
name="quantity">`assert(quantity)`

<p>`~MessageLine`</p>
</form>
Conditional Substitutions
As the HTML-Business page exists only as a template and is not generated in a fully dynamic
form at runtime, a conditional substitution must be possible in order to react to the current
application status with different page construction.
For this purpose, the if-statement exists as an HTML-Business expression. It follows the syntax
and semantics of other common programming languages (C, JavaScript).
Derivation
if ( expression ) htmlbusiness { [elsif | elseif] ( expression ) htmlbusiness }[else htmlbusiness
]end
Nesting of any kind is possible for HTML-Business statements, i.e. HTML-Business can in turn
contain conditional or repeated statements.
Business HTML
Compiled by: Seetharam Maddali
The key words "elsif" and "elseif" can be used as alternatives.
The term 'expression' refers to any expression which evaluates to 0 (condition not met, FALSE)
or not equal to 0 (condition met, TRUE).
The following are examples of this kind of expression:
VBCOM-KUNDE >= 1000
VBCOM-KUNDE
j % 3 == 0
j / (4 - 1) != a * (b + (c + 2))
s == "Walter" & " " & "Weissmann"
(x > 2 && x <99) || (s > "abc")
Example:
The following are examples of if-statements:
`if (VBCOM-KUNDE) VBCOM-KUNDE else` Undefined Customer Number `end`
`if (j % 3 == 0)` <TR> `else` <TD> `end`
`if (1) write("This is always true!")
elsif (0) write("This is never true!")
else write("The impossible occurred!") end`
`if (x > 0 && x < 100)`
x is greater than 0 and smaller than 100
`if (y > 0 && y < 100)`
y is greater than 0 and smaller than 100
`elsif (Y > 100)`
y is greater than 100
`end
elsif (x <= 0)`
x is smaller than 0!
`else`
x is greater than 99!
`end`
Summary of HTML-Business Grammar
The following grammar and syntax are implemented with HTML-Business expressions.
Nonterminal Derivation
htmlbusiness ([ html | script[;] ] htmlbusiness)| eof
html bytestream
script (declaration |expression |conditional |loop)
declaration declare externalfn { , externalfn } in module
externalfn identifier
module constant
Business HTML
Compiled by: Seetharam Maddali
function funcname ( argument {, argument} )
argument [identifier =] expression
expression simpleexpr [compop simpleexpr]
simpleexpr term { addopr simpleexpr}
term factor { mulopr factor}
factor (! | ++ | --) factor( expression ) |assignment |lvalue [++ | --] |constant
function call internalfn ( argument {, argument} ) |externalfn ( expression {, expression} )
internalfn write | writeEnc | wgateURL | archiveURL | imageURL | mimeURL | assert
mulopr * / % &&
addopr + - & ||
compop == | != | > | < | >= | <=
lvalue field | register
field { ^ } identifier [ [ expression ] ] [ . attribute ]
attribute label |visSize |maxSize |dim |disabled |name |value
assignment lvalue = expression
conditional if ( expression ) htmlbusiness{ (elsif | elseif) ( expression ) htmlbusiness }[else
htmlbusiness ]
loop repeat expression times htmlbusiness end |repeat with register in field
htmlbusiness end |repeat with register from expression to expression by expression
htmlbusiness end |for ( expression ; expression ; expression ) htmlbusiness end
register identifier
identifier { ~ | _ | - } char { char | digit | _ | ~ | - } |
constant digit {digit} |" bytestream "#identifier
char a..z | A..Z