a2ac77bc1a05395885d8a55f2595a47a00aac60e.svn-base
8.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<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列的關係
<express>p2=if(price!=100, price-100, price)</express>
//total、price、num列的關係
<express>total=round(price * num, 4)</express>
//num@origin表示num列的原始數據(和修改後內容無關)
<express>total2=round(price * num@origin, 4)</express></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;"> </td></tr>
<tr><td align=right>含義:</td><td>取修改前的原始值</td></tr>
<tr><td align=right>示例:</td><td>
<pre class='xml'>
//計算列表達式:
<express>total2=round(price * num@origin, 4)</express>
//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;"> </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'>
//某列的小計表達式:
<col name="price" subtotalExpress="='均價: '+@ave" />
//複雜一點的:
<col name="price" subtotalExpress="='方差: '+js('delta', @max, @min)" /></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;"> </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'>
<?xml version="1.0" encoding="UTF-8" ?>
<fault>
<faultcode>錯誤代碼</faultcode> //或<code>
<faultstring>錯誤</faultstring>
<detail>詳細描述</detail>
<reason>錯誤原因</reason>
<faultactor>錯誤角色</faultactor>
</fault></pre>
在<fault>下,至少要有上述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>