文章目錄
第十章 Caché 嵌入式代碼 - 嵌入式HTML
- `&html`標記語法
- 嵌入式JavaScript
- 嵌入式SQL
第十章 Caché 嵌入式代碼
嵌入式HTML
嵌入的HTML語句通過&html
指令與其餘代碼分開,如下例所示:
/// d ##class(PHA.TEST.ObjectScript).TestHTML()
ClassMethod TestHTML()
{
WRITE "start",!
&html<
<html>
<body>
<b>I'm bold!</b>
<i>I'm italic</i>
<u>I'm underlined</u>
</body>
</html>
>
WRITE "end"
}
DHC-APP>d ##class(PHA.TEST.ObjectScript).TestHTML()
start
<html>
<body>
<b>I'm bold!</b>
<i>I'm italic</i>
<u>I'm underlined</u>
</body>
</html>
end
&html
指令必須縮進;它不能出現在第1列中。&html
指令不區分大小寫;您可以指定&HTML
,&Html
,&html
.&html
指令可以與標籤、命令或/* ... */
註釋出現在同一行。與所有ObjectScript代碼一樣,它必須與前面至少有兩個空格的無參數命令分開。&html
指令後面跟一個左尖括號,中間沒有空格、換行符或註釋。嵌入的HTML代碼由右尖括號結束。- 嵌入的HTML和右尖括號中的HTML代碼不必縮進。它們可以出現在第1列中,但是爲了代碼的清晰性,建議使用縮進。
- HTML代碼不必包含
<html>
結構標記(或任何其他結構標記);但是,完全支持結構標記。
&html
指令的正文應該包含有效的HTML標記。可以使用縮進和空格以任何喜歡的方式設置HTML格式。HTML代碼中的空行將被保留。Studio識別&html
指令,並使用着色器對HTML標記進行語法着色。
宏預處理器在ObjectScript解析器處理任何嵌入的HTML代碼之前展開宏。嵌入式HTML中不支持宏處理。例如,不能在嵌入的HTML中使用##
;單行註釋。但是,可以在嵌入的HTML代碼中使用宏預處理器的結果,如下面的示例所示:
/// d ##class(PHA.TEST.ObjectScript).TestHTMLM()
ClassMethod TestHTMLM()
{
#Define NumFunc ##Expression(17+4)
WRITE "start",!
&html<
<b>I'm bold!</b>
<i>I'm italic $$$NumFunc</i>
<u>I'm underlined</u>
>
WRITE "end"
}
DHC-APP>d ##class(PHA.TEST.ObjectScript).TestHTMLM()
start
<b>I'm bold!</b>
<i>I'm italic 21</i>
<u>I'm underlined</u>
end
&html
標記語法
可以使用用戶定義的標記語法來標識特定的&html
指令。此語法由“&html
”和左尖括號字符之間指定的字符或字符串組成。此標記的反面必須緊跟在嵌入HTML末尾的右尖括號之後。以下示例使用7作爲標記字符:
WRITE "start",!
&html7<
<b>I'm bold!</b>
<i>I'm italic</i>
<u>I'm underlined</u>
>7
WRITE "end"
請注意,在&html
、標記和左尖括號之間不允許有空格(空格、製表符或換行符),在結束尖括號和反轉標記之間也不允許有空格。
標記可以是單個字符,也可以是一系列字符。標記不能包含以下標點符號:
<({ + - / \ | * })>
標記不能包含空格字符(空格、製表符或換行符)。它可能包含所有其他可打印字符和字符組合,包括Unicode字符。標記和反轉標記區分大小寫。
相應的反向標記必須包含與反向順序的標記相同的字符。例如:&htmlABC< ... >CBA
.如果標記包含[
或(
字符,反轉標記必須包含相應的]
或)
字符。
以下是有效&html
標記和反向標記對的示例:
/// d ##class(PHA.TEST.ObjectScript).TestHTMLM1()
ClassMethod TestHTMLM1()
{
&html@@< <b>Be bold!</b> >@@
&html[< <b>Be bold!</b> >]
&htmlMyTest< <b>Be bold!</b> >tseTyM
&htmlA16[a< <b>Be bold!</b> >a]61A
}
DHC-APP>d ##class(PHA.TEST.ObjectScript).TestHTMLM1()
<b>Be bold!</b>
<b>Be bold!</b>
<b>Be bold!</b>
<b>Be bold!</b>
選擇標記字符或字符串時,請注意以下重要限制:HTML代碼不能在代碼中的任何位置包含字符序列“>reversemarker
”,包括文字字符串和註釋。例如,如果標記是“ABC
”,則字符串“>CBA
”不能出現在嵌入的HTML中的任何位置。
嵌入式JavaScript
嵌入式JavaScript允許您在ObjectScript程序中包含JavaScript代碼。可以使用嵌入式JavaScript指令的以下任何語法形式:
/// d ##class(PHA.TEST.ObjectScript).TestJS()
ClassMethod TestJS()
{
&js< JavaScript code >
&jscript< JavaScript code >
&javascript< JavaScript code >
}
/// d ##class(PHA.TEST.ObjectScript).TestJS()
ClassMethod TestJS()
{
&js< var s=1 >
&jscript< var s= s+1 >
&javascript< var s= s+2 >
}
DHC-APP>d ##class(PHA.TEST.ObjectScript).TestJS()
JavaScript code
JavaScript code
JavaScript code
嵌入式JavaScript指令的語法和解析(包括標記語法的使用)與嵌入式HTML相同。
嵌入式SQL
嵌入式SQL允許在ObjectScript程序中包含SQL代碼。語法爲&sql()
。例如:
/// d ##class(PHA.TEST.ObjectScript).TestSQL1()
ClassMethod TestSQL1()
{
&sql( SELECT Name INTO :n FROM Sample.Person )
WRITE "name is: ",n
}
DHC-APP>d ##class(PHA.TEST.ObjectScript).TestSQL1()
name is: Adams,Diane F.