a2ac77bc1a05395885d8a55f2595a47a00aac60e.svn-base 8.14 KB
<HTML>
<head>
<META http-equiv="content-type" content="text/html; charset=big5">
<link rel="stylesheet" href="../temp1.css" type="text/css">
<script type="text/javascript" src="functable_big5.js"></script>
<script>
 function gentable()
 {
  var xmlDoc = getXMLDoc("func_pub_big5.xml");
  genfunctable('TagFuncTable', 'TagFunc', xmlDoc);
  var url = window.location.href;
  var off = url.indexOf("#");
  if(off != -1) {
   var tag = url.substring(off+1);
   var tag3 = tag.substring(0, 3);
   if(tag3 != "Tag") window.setTimeout("gofunc('" +tag+ "')", 500, "javascript");
  }
 }
 function gofunc(tag)
 {
  var od = document.getElementById(tag);
  window.scrollTo(0, od.offsetTop);
 }
</script>
</head>
<body onLoad="gentable()" bgcolor=#ffffff vlink=#0000ff>


<div id="Tag60"/>
<Table cols=2 border=0 width=100%>
<col width=60%>
<col width=40%>
<tr height=91><td/><td><img src='devsh.jpg'></td></tr>
</table>
<h3> <font color=#3366ff>公共內容</font></h3><hr color=#2266ee size=1>
  Supcan TreeList和Supcan Report有一些公共的內容,例如表達式,Supcan Report的單元格與單元格之間的邏輯關係、Supcan TreeList列與列之間的邏輯關係都可以用表達式來描述。<br>
  Supcan底層類庫提供了高速的表達式解析功能、並內置了六十多個常用的計算函數。<br>


<div id="Tag601"/><br><br><br>
  <font style='font-size:15pt;font-family:黑體'>1.表達式</font><hr color=#2266ee size=1>
  Supcan的表達式分二種:關係表達式和格式掩碼.<br>
  所謂「關係表達式」就是如前所述的單元格與單元格之間的計算關係、列與列之間的計算關係、小計/合計運算邏輯;而「格式掩碼」則是Report的單元格或Treelist的列用於描述自身顯示的特殊的表達式.<br>
<br>
  Supcan Report的表達式在單元格內直接輸入,舉例如下:<br>
<pre class='cpp'>
 //支持函數的多層嵌套
 =sum(203.12, 200.1, min(20, 20) * 20)
 
 //A3、B4、 B5表示單元格
 =average(A3, B4, if(B5>2, 3, 4))
 
 //A3至C4的矩形區域內所有單元格
 =sum(A3:C4)</pre>
<br>
  Supcan Treelist的表達式可以在其XML描述文件中直接定義,舉例如下:<br>
<pre class='xml'>
  //表示p2列與price列的關係
 &lt;express&gt;p2=if(price!=100, price-100, price)&lt;/express&gt;
 
 //total、price、num列的關係
 &lt;express&gt;total=round(price * num, 4)&lt;/express&gt;
 
 //num@origin表示num列的原始數據(和修改後內容無關)
 &lt;express&gt;total2=round(price * num@origin, 4)&lt;/express&gt;</pre>
<br>
  格式掩碼和關係表達式相比,沒有什麼大的差別,它還可以包含"textColor="的文字顏色分句,如果是Treelist,還可以有左側圖片、右側圖片分句,舉例如下:<br>
<pre class='cpp'>
 //數字以人民幣顯示
 =RMB(data)
 
 //日期型數據以中國銀行格式顯示
 =ChineseBankDate(data)
 
 //日期型數據以指定格式顯示
 =FormatDate(data, 'DD/MM/YYYY')
 
 //布爾型數據以「是」/「否」顯示
 =if(data, '是', '否')
 
 //數據乘以1000,然後在後面跟隨「噸」(數據本身未變)
 =data *1000 + '噸'
 
 //textColor=...是文字顏色
 ='$'+data; textColor=if(data>100,'#0000ff', red)
 
 //Treelist的右側圖片: rightImage,圖片URL根據當前行的productID列內容算出:
 ='產品:'+data+ ',圖樣:'; rightImage=if(productID=1, 'fruit.jpg', if(product=2, '../meta/office.ico', 'ele.png'))</pre>
<br>

  表達式書寫規則如下:<br>
<table width=98% class='ruleTable' border=1 align=center callspacing=8 cellpadding=10><tr><td>
1.加、減、乘、除分別以+、-、*、/表示;<br>
2.支持「>」、「<」、「=」、「>=」、「<=」、「!=」(或「<>」)比較邏輯運算;<br>
3.支持「and」(或「&&」)、「or」(或「||」)、「not」(或「!」)與或非邏輯運算;<br>
4.運算優先級:括號 > 乘除 > 加減 > 比較邏輯運算 > 與或非邏輯運算;<br>
5.與或非運算優先級:非 > 與 > 或;<br>
6.允許數字和串混合計算;<br>
7.支持串的大小比較運算;<br>
8.不支持位運算;<br>
9.純數字不支持嵌入千位符(,逗號);<br>
</td></tr></table>

<div id="Tag602"/><br><br><br>
  <font style='font-size:15pt;font-family:黑體'>2.計算函數</font><hr color=#2266ee size=1>
<div id="TagFuncTable"/></div><br>
<div id="TagFunc"></div>

<div id="Tag603"/><br><br><br>
  <font style='font-size:15pt;font-family:黑體'>3.宏</font><hr color=#2266ee size=1>
<br><b>1.TreeList中的宏</b><br>
<br>
<table width=98% cols=2 cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<col width=90><col>
<tr bgcolor=#c8e0ef><td style="border-right:0px;" align=left><b><font color=#660000>@origin宏</font></b></td><td align=right style="border-left:0px;">&nbsp;</td></tr>
<tr><td align=right>含義:</td><td>取修改前的原始值</td></tr>
<tr><td align=right>示例:</td><td>
<pre class='xml'>
 //計算列表達式:
 &lt;express&gt;total2=round(price * num@origin, 4)&lt;/express&gt;
 //num@origin表示num列的原始數據</pre>
</td></tr></table><br>


<br>
<table width=98% cols=2 cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<col width=90><col>
<tr bgcolor=#c8e0ef><td style="border-right:0px;" align=left><b><font color=#660000>@parent宏</font></b></td><td align=right style="border-left:0px;">&nbsp;</td></tr>
<tr><td align=right>含義:</td><td>用於下拉Treelist的過濾表達式中,取父Treelist的當前行、指定列的內容</td></tr>
<tr><td align=right>示例:</td><td>

<pre class='cpp'>
 //對city列的下拉執行過濾:
 AF.func("Filter", "province=prov@parent\r\ncity");
 //prov@parent表示取父Treelist的當前行、prov列的內容
 //「父」是相對於下拉Treelist而言</pre>
</td></tr></table><br>



<br>
<table width=98% cols=2 cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<col width=90><col>
<tr bgcolor=#c8e0ef><td style="border-right:0px;" align=left><b><font color=#660000>合計宏</font></b></td><td style="border-left:0px;">@sum @average(或@ave) @max @min @first @last @rows</td></tr>
<tr><td align=right>含義:</td><td>用於Treelist的小計、合計表達式中,分別表示求和、求平均值、最大、最小、首行、末行值、行數.</td></tr>
<tr><td align=right>示例:</td><td>

<pre class='xml'>
 //某列的小計表達式:
 &lt;col name="price" subtotalExpress="='均價: '+@ave" /&gt;
 
 //複雜一點的:
 &lt;col name="price" subtotalExpress="='方差: '+js('delta', @max, @min)" /&gt;</pre>
</td></tr></table><br>


<br>
<b>2.Report中的宏</b><br>
<br>
<table width=98% cols=2 cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<col width=90><col>
<tr bgcolor=#c8e0ef><td style="border-right:0px;" align=left><b><font color=#660000>@單元名 宏</font></b></td><td align=right style="border-left:0px;">&nbsp;</td></tr>
<tr><td align=right>含義:</td><td>數據源填充區內、行不定時的動態單元名</td></tr>
<tr><td align=right>示例:</td><td>
<pre class='cpp'>
 //B列求和:
 =sum(B4:@B4)
 //@B4是取第四行、第二列單元格的內容,由於行是動態填充,所以
 //取數後公式中的該單元格名將被自動改為B5, B6, B7...</pre>
</td></tr></table><br>


<div id="Tag604"/><br><br><br>
  <font style='font-size:15pt;font-family:黑體'>4.XML/JSON異常包</font><hr color=#2266ee size=1>
  Treelist、Report組件通過Http Request向服務器索取填充數據,如果服務器遇到異常,通常返回的Http狀態碼為非200,組件將直接拋出該異常頁面。在Web Service規範中,如果服務器能捕捉到異常(try / catch),通常會採用SOAP協議中的fault包返回,使得客戶端能比較友好地顯示異常信息。<br>
  Supcan組件對非Web Service的普通XML/JSON格式的數據響應包也提供了類似的擴展支持,只要XML/JSON包符合如下格式(我們稱之為SoapLike異常包,即類似SOAP),客戶端就能彈出用戶能接受的錯誤信息:<br>
<pre class='xml'>
 &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
 &lt;fault&gt;
    &lt;faultcode&gt;錯誤代碼&lt;/faultcode&gt;  //或&lt;code&gt;
    &lt;faultstring&gt;錯誤&lt;/faultstring&gt;
    &lt;detail&gt;詳細描述&lt;/detail&gt;
    &lt;reason&gt;錯誤原因&lt;/reason&gt;
    &lt;faultactor&gt;錯誤角色&lt;/faultactor&gt;
 &lt;/fault&gt;</pre>
  在&lt;fault&gt;下,至少要有上述5種元素中的一種,Supcan組件就把這個包當作異常包看待。


<div id="Tag605"/><br><br><br>
  <font style='font-size:15pt;font-family:黑體'>5.圖片擴展URL</font><hr color=#2266ee size=1>
  Treelist、Freeform、Tree等組件經常會用到圖片,例如背景圖片、下拉圖片、按鈕圖片等,如果一個頁面中的小圖片過多,那麼向服務器發起的請求也多,勢必影響性能,為此,Supcan對圖片的URL作了一個擴展,允許將圖片部署在服務器端的一個zip包中,客戶端的圖片URL如果是採用如下寫法:<br>
    url="../res/boudle.zip#car33.bmp"<br>
  那麼boudle.zip會被下載到本地緩存,並自動抽取、顯示其中的car33.bmp。只要是引用該包中的圖片文件,不會再向服務器發多餘請求.<br>
  當然zip包也不宜過大,否則影響首次下載的性能.
<br><br><br><br><br><br>
<script type='text/javascript' src='nstd.js'></script>
</body></html>