第十章 瘋狂Caché 嵌入式代碼

文章目錄

第十章 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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章