最近做項目接觸到了很強大的Web套件工具:碩正富文本應用套件,特此記錄下學習插件的點滴:
********************* TreeList/FreeForm *********************
1.頁面通過xml配置,xml中的table_id對應數據庫的表名,col_physical_name對應表中的字段,col_type對應字段的類型。
2.頁面加載時執行OnReady方法,在OnEvent方法中判斷各種事件的觸發。
3.頁面加載類型分為TreeList和FreeForm兩種,TreeList為列表,通常取AF為id,FreeForm為表單,通常取FM為id。
4.Tab標簽頁下的方法調用:Tab1為當前table頁的id,tab_OrderData為頁簽的id
var changeXML = AF.func("Tab1.tab_OrderData.GetChangedXml", "level=2");
5.xml中列的屬性,col_type對應的是數據庫中字段的類型,而datatype是頁面驗證的數據類型,通過配置datatype可自動驗證數據。
6.配置下拉框數據時,edittype要寫成dropdownlist,還要起一個dropdownlistid,在下方dropdownlists處配置數據源。例如:
<input table_id="tb_serviceReport_info" align="left" col_physical_name="ServiceId" col_type="NVarchar" id="ServiceId" edittype="editabledroptreelist" droplistid="Drop_ServiceId" LeftText="服務號:" width='2' nullAble="false"/>
數據源:
<DropLists>
<DropList id="Drop_ServiceId" treelist="ServiceDetail.xml" DataCol="ServiceId" DisplayCol="ServiceId"
isTreeNodeSelectAble="true" />
</DropLists>
7.TreeList列表在提交時,property中必填key,否則不能提交。
8.TreeList列表在加載數據時,后台table轉json的方法中需要傳入記錄總條數,用來顯示分頁控件,否則記錄只會顯示一條。
9.在列表首列加入全選checkbox:AF.func("InsertCol", "0\r\nname=checked;isCheckboxOnly=true");
10.獲取選中checkbox的行號(多行號用逗號分割):var checkRowNumbers = AF.func("findAll", "checked=1");
11.標簽切換:AF.func("SetCurSel", "Tab1 \r\n 1"); 最后那個是切換到第幾個標簽,從0開始
12.aspx頁面文件應該在根目錄下一級,如果在文件夾下還有二級文件夾,則在查找條件區的字段時會因找不到路徑而報錯。
13.搜索區的字段加載不出來的原因是頂部的xmlpath配置不正確,如果是tab頁的話,則xmlpath應為主表對應的xml,而非tab頁的。
14.自增長的表插入一條數據時返回主鍵:insert into tb1 values('...'); select @@IDENTITY id
15.加載列表時,如果有主外鍵關聯的字段,這樣配置:
首先清楚什么是主表、子表:如果有一個用戶表,一個性別碼表,則性別表為主表,用戶表為子表。
<Col table_id="relation_type" col_main_name="PROVIDER_TYPE" col_physical_name="LBMC" name="PROVIDER_TYPE" col_type="NVarChar" relation="inner" width="150" align="center" editAble="false">供應商類別</Col>
注:①table_id對應下面TableLists中的TableInfo中的id="relation_type",並不是真正的表名。
②col_main_name為子表中與主表對應的字段
③col_physical_name是主表中存名稱的字段,也就是用來顯示在頁面上的字段。
④name為子表中對應主表的字段名。
配置好上面的字段后,再配置兩表的關聯關系:
<TableLists>
<TableInfo id="relation_type" table_alias_name="code_provider" table_physical_name="tbl_si_type" relation_table_name="TBL_PROVIDER" main_col="PROVIDER_TYPE" detail_col="CODE" relation="inner join" />
</TableLists>
注:①id="relation_type"對應上面配置的table_id
②table_alias_name不是真正的字段,無關緊要。
③table_physical_name是主表的表名
④relation_table_name是子表的表名
⑤main_col為子表中與主表關聯的字段
⑥detail_col為主表中與子表關聯的字段
⑦relation為兩表關聯的關系,連接可分為:內連接、左連接、右連接
16.數據庫在設計表的時候,注意字段不要與關鍵字重復。
17.可編輯的下拉框:edittype="editabledroptreeList",把editable去掉則為只讀。
18.列表混添加混編輯,應該調用tl.AddMuiltTlData方法。
19.Jquery Ajax火狐瀏覽器返回的result為何是object XmlDocument?因為ajax請求缺少dataType屬性。
20.Jquery的dataType包括:
①"xml": 返回 XML 文檔,可用 jQuery 處理。
②"html": 返回純文本 HTML 信息;包含的 script 標簽會在插入 dom 時執行。
③"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。除非設置了 "cache" 參數。注意:在遠程請求時(不在同一個域下),
所有 POST 請求都將轉為 GET 請求。(因為將使用 DOM 的 script標簽來加載)
④"json": 返回 JSON 數據 。
⑤"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回
調函數。
⑥"text": 返回純文本字符串
21.列表刪除數據時,提示找不到main_table_name,可能是調用了FreeForm的方法;
22.屏蔽右鍵:Right_Shield(AF); //屏蔽右鍵
23.TreeList和FreeForm獲取元素的值:
①FM:FM.func("GetValue", "字段");
②AF:var currentRow = AF.func("GetCurrentRow", ""); AF.func("GetCellData", currentRow + " \r\n 字段");
24.日期控件默認值:defaultvalue="=now()" datatype="date"
25.小數格式:editmask="#,###.0000" datatype="double"
26.插入行:AF.func("InsertRows", "0 \r\n 1");
27.Treelist賦值:
var curRowNum = AF.func("GetCurrentRow", ""); //獲取當前行
AF.func("SetCellData", curRowNum + " \r\n 字段 \r\n" + 值); //注意\r\n與值之間不要有空格
28.FreeForm賦值:
FM.func("SetValue", "字段 \r\n" + 值); //FreeForm不需要獲取行號,\r\n與值之間不要有空格
29.取消行:AF.func("DeleteRows", curRowNum + " \r\n 1");
30.設置元素屬性,如隱藏、不可用、不為空等:AF.func("SetObjectProp", "ID \r\n visible \r\n false");
31.獲取xml的時候要寫level=2,否則后台找不到NewRow還是ModifyRow,如:AF.func("GetChangedXML", "level=2");
32.加載數據:
TreeList:AF.func("bBar.SetObjectProp", "ID0\r\n dataURL \r\n" + data + "\r\n mode=asynch");
FreeForm:FM.func("Load", data);
33.加載列表數據,並且加載分頁數據:
var h = AF.func("GetHandle", "");
AF.func("bBar.BindPager", h + "\r\n ID0");
AF.func("bBar.SetObjectProp", "ID0\r\n dataURL \r\n" + data + "\r\n mode=asynch");
34.TreeList GetChangedXML 獲取數據幾種方式:
可選, 可以有如下的選項,相互以分號分隔:
level - 級別號,可以是0(默認)、1、2、3,其含義分別為:
0 - 級別0,生成當前全部、最新內容(不包括修改前的原始內容);
1 - 級別1,僅生成被修改過的單元格的內容(包括原始內容);
2 - 級別2,在級別1的基礎上,增加被修改過單元的整行內容;
3 - 級別3,內容包含所有行、所有列、修改前后的內容;
isIgnoreChange - true/false, 僅用於Level=0. true表示不管內容是否被修改過,始終生成XML; false表示除非內容被修改過,否則返回空串. 默認是false;
startRow - 開始行,默認是0;
endRow - 結束行,默認是-1,-1表示最后行;
DateFormat - 日期的格式,默認是'%Y.%m.%d',可參見公共內容中now( )函數的參數;
********************* Report *********************
1.report定義: <script>insertReport('AF', 'workMode=inputDSRunTime')</script>
(注意:報表分為好幾種模式,只有在inputDSRunTime模式下才可以獲取由數據源綁定的和數據,為操作數據庫做准備)
2.report報表綁定數據分為兩種:
1:data綁定,主要用於數據庫中的主表數據。
2:dataRow綁定,主要用於數據庫中的明細列表的顯示。
3.report獲取數據的方式范圍兩種:
1:對於數據綁定為data方式的獲取方式 :
(1) var mainchangeXML = AF.func("CollectXML", "BackColor=#FEFEFE"); //通過背景顏色獲取主表的XML
(2) var mainchangeXML = AF.func("CollectXML", "別名"); //通過別名獲取主表的XML
2: 對於數據綁定為data方式的獲取方式 :
(1) var childChangeXML = AF.func("GetChangedXML", "ds=ds1;level=2"); //獲取明細表XML ds=ds1表示當前
綁定Data為ds1的XML數據
4.report獲取修改過內容的單元格函數 GetChangedCells (注意:ResetChanged 和 GetChangedCells要一起使用,
否則會達不到想要的效果,其中ResetChanged函數一般用在碩正 OnReady函數中) 例:
1: AF.func("ResetChanged", ""); //合並修改內容,為以后調用 GetChangedCells( ) 作准備.
2: var mainchangeCells = AF.func("GetChangedCells", ""); //獲取修改過內容的單元格 和ResetChanged一起使用
5.report綁定數據:
AF.func("setsource", "ds0 \r\n " + data); //data為Json數據
6.report綁定數據源: calc函數:此函數用在setsource后,否則不會顯示數據,另外在執行了calc函數之后,在執行 insertRows
函數會達不到效果,所以一定要在執行完calc函數之后在用其他函數。例:
AF.func("calc", ""); //執行報表的計算,包括數據源的取數填充
7.report定義事件函數:SubscribeEvent 事件要先定義才能在碩正OnEvent中使用,這里不如treelist和freeform強大 例:
AF.func("SubscribeEvent", "SelChanged \r\n Clicked \r\n DblClicked \r\n EditChanged \r\n Editing");