UUAP開發(fā)手冊_第1頁
UUAP開發(fā)手冊_第2頁
UUAP開發(fā)手冊_第3頁
UUAP開發(fā)手冊_第4頁
UUAP開發(fā)手冊_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余39頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、UAP 開發(fā)樣例指導(dǎo)用友研發(fā)中心U8 平臺技術(shù)部< 本文檔適用于U871 版本 >目錄2、 樣例開發(fā)前提3、 建立UAP項(xiàng)目4、 建立表單模型(一)新建實(shí)體(二)新建實(shí)體屬性5、 建立表單布局6、 行為對象開發(fā)(一)表單開發(fā)(二)列表開發(fā)(三)生單二次開發(fā)(四)聯(lián)查報表(五)聯(lián)查UAP列表(六)UAP列表聯(lián)查U8單據(jù)(七)用戶自定義控件開發(fā) (八)U8單據(jù)引用UAP檔案7、 行為對象注冊功能介紹: 使用說明:應(yīng)用技巧: 8、 建立數(shù)據(jù)引擎功能介紹: 使用說明:應(yīng)用技巧: 9、 設(shè)置過濾條件功能介紹: 使用說明:應(yīng)用技巧: 十、設(shè)置欄目功能介紹使用說明應(yīng)用技巧十一、 W功能權(quán)限記錄級

2、權(quán)限字段級權(quán)限十二、 部署附錄:功能介紹1、行為對象升級說明 2、Logininfo 對象介紹 一、 摘要本文以U8-ERP中的銷售訂單為應(yīng)用原型,介紹了如何通過UAP進(jìn)行軟件開發(fā),文中給出了開發(fā)方法和豐富樣例。內(nèi)容包括: UAP表單開發(fā)原理I UAP項(xiàng)目的建立和導(dǎo)入、導(dǎo)出I UAP表單的模型設(shè)計和布局設(shè)計I UAP表單的行為對象開發(fā)I UAP表單列表設(shè)計與開發(fā)I UAP表單列表的行為對象開發(fā)I 如何對UAP表單的缺省按鈕進(jìn)行擴(kuò)展性開發(fā)I 如何對UAP表單的缺省按鈕進(jìn)行取代性開發(fā) 如何為UAP表單增加新的按鈕及行為 如何用程序代碼調(diào)用 UAP報表 如何用程序代碼調(diào)用 UAP表單列表 如何在UA

3、P表單中增加權(quán)限控制:功能權(quán)限、字段權(quán)限、記錄權(quán)限I 如何為UAP表單開發(fā)自定義控件 如何開發(fā)樹形檔案I 如何維護(hù)UAP數(shù)據(jù)引擎I如何維護(hù)欄目I如何維護(hù)過濾條件I 如何調(diào)用U8API U8單據(jù)自定義項(xiàng)如何引用 UAP檔案本文檔中使用的示例文件為“銷售訂單二次開發(fā)",可以通過UAP將該文件導(dǎo)入到帳套中。項(xiàng)目名稱為“SaleVoucher",導(dǎo)入后在項(xiàng)目中包括幾個自定義單據(jù):“銷售訂單”為二次開發(fā)的 Demo示例;“零售日報”為自定義空間二次開發(fā)的Demo示例;"列表檔案示例”、“樹形編輯檔案示例”、“樹形導(dǎo)航檔案示例”分別為各個對應(yīng)的檔案類型的示例。二、樣例開發(fā)前提

4、首先,需要安裝 U8產(chǎn)品,并建立一個帳套。其次,您需要向用友公司購買UAP表單設(shè)計許可;不過您可以使用UAP的演示版本,但是演示版本不能新建UAP項(xiàng)目,也不能注冊行為對象。三、建立UAP項(xiàng)目使用UAP登錄您的帳套后,在系統(tǒng)界面上的新建項(xiàng)目選項(xiàng)卡,選中“供應(yīng)鏈”后,在右邊的列表 中選擇“銷售管理”,在界面下方的幾個文本框中輸入項(xiàng)目名稱,編號,描述等;順序選擇框使用“默 認(rèn)”即可。點(diǎn)擊“確定”如果輸入信息與先前創(chuàng)建的項(xiàng)目信息不沖突,項(xiàng)目就可被成功創(chuàng)建。您也可以導(dǎo)入我們?yōu)槟峁┑腢AP樣例項(xiàng)目,導(dǎo)入方法如下。1、登錄UAP ;2、打開菜單“文件導(dǎo)入和導(dǎo)出”;3、選中“導(dǎo)入項(xiàng)目數(shù)據(jù)到目前的服務(wù)器”,點(diǎn)

5、“確定”按鈕;4、點(diǎn)“導(dǎo)入”按鈕,選取 U8安裝目錄下的“ uapsdk”目錄中的文件“ Samplefile ” ;5、導(dǎo)入成功后;6、在UAP已存在的項(xiàng)目中產(chǎn)生了一個名稱為" SaleVoucher”的項(xiàng)目;建立表單模型選中“自定義表單”節(jié)點(diǎn),單擊右鍵,使用“新建自定義表單”功能創(chuàng)建一個新的表單。然后在彈出的選擇界面中選擇“表單類型”下的“單據(jù)”,在名稱文本框中輸入一個表單名字,不要與以前創(chuàng)建的表單名字重復(fù)。在成功創(chuàng)建后,系統(tǒng)界面會如下圖(圖表1)所示:圖表在上圖所示的實(shí)體節(jié)點(diǎn),默認(rèn)有兩個子節(jié)點(diǎn),分別為“主表和第一子表”,根據(jù)當(dāng)前表單的需要設(shè)計實(shí)體,包括增加實(shí)體和實(shí)體屬性等。(一

6、) 新建實(shí)體需要為實(shí)體填寫“實(shí)體名稱”,和選擇“實(shí)體類型”。除此以外,還可以通過實(shí)體的屬性編輯窗口為實(shí)體設(shè)置各項(xiàng)信息。實(shí)體的相關(guān)屬性:名稱:實(shí)體顯示的名稱,僅用于設(shè)計時。發(fā)布狀態(tài):實(shí)體是否已發(fā)布,只讀。功能:為實(shí)體定義自定義功能,在運(yùn)行時顯示為表格對應(yīng)的工具欄按鈕。狀態(tài)設(shè)置:設(shè)置實(shí)體屬性、功能在表單運(yùn)行時的狀態(tài),決定實(shí)體屬性、功能在不同的環(huán)境下是否可用。物理表模式:設(shè)置實(shí)體物理表的創(chuàng)建模式,默認(rèn)為由UAP 在發(fā)布時自動創(chuàng)建。在特殊的應(yīng)用場景中可以使用“使用已存在的對象”或“無”。后兩種情況下 UAP 不負(fù)責(zé)實(shí)體物理表的維 護(hù)。物理表:設(shè)置該實(shí)體在數(shù)據(jù)庫存儲時使用的物理表,一般情況下一個實(shí)體對應(yīng)

7、一個物理表。數(shù)據(jù)引擎模式:設(shè)置實(shí)體運(yùn)行時數(shù)據(jù)的訪問方式。默認(rèn)為UAP 系統(tǒng)在發(fā)布時自動創(chuàng)建,特殊的應(yīng)用場景中可以使用“使用已存在的對象”或“無”,這兩種情況下系統(tǒng)不負(fù)責(zé)實(shí)體數(shù)據(jù)的讀取,只能通過用戶定義的接口獲取數(shù)據(jù)集。數(shù)據(jù)引擎:當(dāng)數(shù)據(jù)引擎模式為“使用已存在的對象”時,設(shè)置要使用的數(shù)據(jù)引擎對象。主鍵:設(shè)置實(shí)體物理表的主鍵字段名。主鍵類型:設(shè)置實(shí)體物理表主鍵字段的類型,可選“整數(shù)”或“GUID ”或“字符串”。行模式:多行或單行。一般主表設(shè)置為單行。(二) 新建實(shí)體屬性實(shí)體必須包含實(shí)體屬性時才有效。可以在UAP 界面“表單”窗口中,右鍵點(diǎn)擊實(shí)體對應(yīng)的節(jié)點(diǎn),選擇“新建實(shí)體屬性”菜單向?qū)嶓w添加實(shí)體屬性

8、:實(shí)體屬性通用屬性:類型:該實(shí)體屬性的類型。描述:對該實(shí)體屬性的單體描述。屬性名稱:實(shí)體屬性的名稱。默認(rèn)值:實(shí)體屬性的默認(rèn)值。使用默認(rèn)值:用戶未提供數(shù)據(jù)時,是否使用實(shí)體屬性的默認(rèn)值。發(fā)布:該實(shí)體屬性是否已經(jīng)發(fā)布。常用條件:該實(shí)體屬性是否可以在過濾中作為常用條件使用。區(qū)間條件:該實(shí)體屬性是否可以在過濾中作為區(qū)間條件使用。值更新事件:設(shè)置該實(shí)體屬性值更新時需要處理的腳本列表?;A(chǔ)資料類型字段共有三種類型的值更新事件:“攜帶當(dāng)前字段相關(guān)參照屬性到指定列”、 “計算定義公式的值到指定列”、“表達(dá)式為真 /假時改變指定欄目編輯狀態(tài)”;其余類型字段比基礎(chǔ)資料類型字段缺少第一種類型的值更新事件。1. 攜帶當(dāng)

9、前字段相關(guān)參照屬性到指定列2. 計算定義公式的值到指定列3. 表達(dá)式為真/假時改變指定欄目編輯狀態(tài)表單式為真假時修改指定欄目的編輯狀態(tài)表單式為真假時修改指定欄目的顯示狀態(tài)表單式為真假時修改指定功能狀態(tài)表單功能實(shí)體功能唯一約束:是否檢查該實(shí)體屬性的值在整個表單范圍內(nèi)唯一。文本對齊:實(shí)體屬性文本的顯示位置。顯示文本:實(shí)體屬性的不同語言環(huán)境中顯示的文本。允許空值:實(shí)體屬性的值是否可以為空。物理表:實(shí)體屬性對應(yīng)物理字段的表名,即該實(shí)體屬性所屬實(shí)體的物理表。字段:實(shí)體屬性對應(yīng)的物理字段名。除了支持以上通用屬性外,不同類型的實(shí)體屬性還具有不同的特性:1. 表單編號表單編號只能出現(xiàn)的主表實(shí)體中,并且只能有一

10、個表單編號類型的實(shí)體屬性。2. 表單名稱表單名稱類型的實(shí)體屬性只能在檔案類型的表單中使用,同表單編號一樣,表單名稱類型的實(shí)體屬性只能出現(xiàn)主表實(shí)體中,并且只能出現(xiàn)一次。3. 整數(shù)和正整數(shù)可否為0:數(shù)值型的值是否可為0。錄入長度:限制用戶可錄入數(shù)值的最多位數(shù)。數(shù)據(jù)格式:數(shù)值類型的顯示格式。最大值和最小值:數(shù)據(jù)的有效范圍。正整數(shù)的最小值必須等于或大于0。4. 小數(shù)和正小數(shù)可否為0:數(shù)值型的值是否可為0。錄入長度:限制用戶可錄入數(shù)值的最多位數(shù)。數(shù)據(jù)格式:數(shù)值類型的顯示格式。最大值和最小值:數(shù)據(jù)的有效范圍。正小數(shù)的最小值必須等于或大于0。小數(shù)位數(shù):數(shù)據(jù)保留的小數(shù)位數(shù)。5. 文本多行輸入:運(yùn)行時是否支持錄

11、入多行文本。最大長度:最多可錄入的文本長度。6. 日期和日期時間日期類型運(yùn)行短日期格式,即只包含年月日。日期時間類型包含年月日和時分秒。7. 枚舉枚舉類型的實(shí)體屬性需要設(shè)置枚舉值列表,枚舉值的顯示值為在界面顯示的文本,保存值為實(shí)際保存到數(shù)據(jù)庫的數(shù)據(jù),如枚舉類型的實(shí)體屬性“銷售類型”的枚舉值可設(shè)置為如下圖所示:U872 中枚舉字段支持選擇“枚舉模式”:使用已存在枚舉、新創(chuàng)建枚舉。選擇“使用已存在枚舉”后,需要為“枚舉類型”選擇一個 U8 系統(tǒng)中現(xiàn)有的枚舉中的一個。8. 基礎(chǔ)資料基礎(chǔ)資料類型的值來自指定參照檔案的對照值。參照對象:設(shè)置基礎(chǔ)資料類型實(shí)體屬性的參照檔案對象,可以從U8 檔案列表中選擇,

12、包含 UAP 中定義為檔案類型的表單。參照顯示值:該屬性是設(shè)置當(dāng)前就“基礎(chǔ)資料”字段在運(yùn)行時的文本框里顯示參照的那個字段的值。如上面的“參照對象”屬性選擇的存貨檔案,如果不設(shè)參照顯示值,則運(yùn)行時默認(rèn)顯示為存貨編碼,如果將“參照顯示值”屬性設(shè)置為存貨檔案的“存貨”名稱,運(yùn)行是該字段就會顯示為存貨的名稱。選擇方式:設(shè)置在運(yùn)行時的對照選擇方式。自動校驗(yàn):是否對錄入的值進(jìn)入檢驗(yàn)以確定數(shù)據(jù)是否來自指定的參照對象。選擇“否”時允許用戶錄入?yún)⒄諏ο笾胁淮嬖诘闹怠?. 基礎(chǔ)資料屬性基礎(chǔ)資料屬性類型的實(shí)體屬性必須和基礎(chǔ)資料類型的實(shí)體屬性結(jié)合使用。參照屬性:設(shè)置基礎(chǔ)資料屬性類型實(shí)體屬性要綁定的基礎(chǔ)資料類型實(shí)體屬性

13、,并指定關(guān)聯(lián)的參照字段。當(dāng)基礎(chǔ)資料類型的實(shí)體屬性值變化時,基礎(chǔ)資料屬性類型的實(shí)體屬性值隨之改變。10. 數(shù)量、價格和金額數(shù)量、價格和金額類型的實(shí)體屬性實(shí)質(zhì)上為小數(shù)類型,設(shè)置等同于小數(shù)類型的實(shí)體屬性。11. 復(fù)選框特殊類型的整數(shù)值,運(yùn)行時顯示為復(fù)選框,保存的數(shù)據(jù)為0(未選擇)或1 (選擇)。12. 制單人當(dāng)前單據(jù)的作者,一般設(shè)為登錄用戶。13. 制單日期和修改日期制單日期保存當(dāng)前表單生成的日期,修改日期保存表單最后一次修改的日期。這兩種類型的實(shí)體屬性實(shí)質(zhì)上為日期時間類型,設(shè)置等同于日期時間類型的實(shí)體屬性。5、 建立表單布局在完成實(shí)體的設(shè)計后,可以設(shè)計表單布局,UAP 支持一個表單多個布局視圖,用

14、戶可根據(jù)自己的使用習(xí)慣選擇一種布局視圖。布局視圖的設(shè)計與普通window 界面的布局設(shè)計基本一致。6、 行為對象開發(fā)行為對象開發(fā)是指增加表單或列表的功能按鈕,除了UAP 系統(tǒng)自帶的功能按鈕外,還可以增加按鈕,這些增加的功能按鈕是UAP 表單開發(fā)的基礎(chǔ)。UAP 提供了多種增加功能的途徑,首先通過設(shè)計界面的樹形菜單中的“功能”節(jié)點(diǎn)下的表單功能和列表功能的“功能管理”(圖表2)添加功能按鈕,這些功能按鈕最終在運(yùn)行時會被加載到U8 產(chǎn)品的門戶上;其次可以為每個表單實(shí)體添加功能按鈕(圖表3),為實(shí)體添加完成這些功能按鈕后,還需要在布局視圖上為該表單實(shí)體的“功能”屬性設(shè)置使用這些功能(圖表4),這些功能按

15、鈕最終在運(yùn)行時會被加載到該實(shí)體的工具欄按鈕上。圖表圖表圖表圖表增加功能按鈕時,很多工作都可以通過上圖(圖5)的設(shè)計界面完成,開發(fā)人員關(guān)心的僅僅是表單開發(fā)業(yè)務(wù)邏輯的實(shí)現(xiàn)。這些按鈕的作用主要是通過在運(yùn)行時對模型對象中數(shù)據(jù)的修改以及最終將修改的數(shù)據(jù)持久化來完成的。UAP 表單開發(fā)分為表單開發(fā)和列表開發(fā)兩種。因此對應(yīng)了兩種不同的開發(fā)類型定義了兩種不同的訪問模型對象數(shù)據(jù)的接口。(一 ) 表單開發(fā)表單開發(fā)訪問模型對象的接口IReceipt , 該接口被定義在中,所以在做表單開發(fā)前,你需要為新建的表單開發(fā)項(xiàng)目添加的引用。表單開發(fā)又可細(xì)分為表單功能開發(fā)和表單實(shí)體功能開發(fā),每個不同部分的開發(fā)又都分為UAP 已有

16、按鈕的功能修改開發(fā)和新增按鈕的功能開發(fā)。目前為止,只要是表單開發(fā),只需要實(shí)現(xiàn)上述接口即可。在實(shí)現(xiàn) IReceipt 接口后,在實(shí)現(xiàn)類中會繼承以下這些方法:/<summary>/ 門戶工具欄按鈕被點(diǎn)擊時觸發(fā)該方法,可以根據(jù)參數(shù)判斷是哪個按鈕被觸發(fā)/<paramname="ButtonArgs">被點(diǎn)擊門戶工具欄按鈕參數(shù)</param>/</summary>IButtonEventHandler GetButtonEventHandler ( VoucherButtonArgs ButtonArgs);/<summary&g

17、t;/ 運(yùn)行時表單加載之前調(diào)用的接口,可以處理表單加載之前的業(yè)務(wù)要求。/</summary>/<paramname="login">U8 登錄對象 </param>/<paramname="netLogin">.Net 登錄對象</param>/<paramname="Cardnumber"> 表單編號</param>/<paramname="ds">表單數(shù)據(jù)</param>/<paramname=&q

18、uot;state">表單狀態(tài)</param>/<paramname="voucherParameter"> void ReceiptLoading(U8Login.eEnum state, ReceiptLoadingParas表單載入?yún)?shù)</param>clsLogin login, string loadingParas);Cardnumber, DataSet ds, VoucherStat/<summary>/ 運(yùn)行時表單加載之后調(diào)用的接口,可以處理表單加載之后的業(yè)務(wù)要求。/</summary&

19、gt;/<paramname="ReceiptObject">所屬表單對象</param>void ReceiptLoaded( VoucherProxy ReceiptObject);/<summary>/ 值更新之前的接口,對值的合法性檢查在這里進(jìn)行/<paramname="para"> Cell 的值變動參數(shù)</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname=&quo

20、t;voucherObject">所屬表單對象</param>/</summary>void CellChanging( CellChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject);/<summary>/ 值更新之后的接口,對值的后續(xù)處理(如對其他Cell 值的變更)在這里進(jìn)行/<paramname="para"> Cell /<paramname="businessObject"

21、;> /<paramname="voucherObject"></param>所屬業(yè)務(wù)對象</param>所屬表單對象</param>/</summary>void CellChanged( CellChangeEventArgs para, BusinessProxybusinessObject,VoucherProxy voucherObject);/<summary>/ 增加行之前的接口,對行的合法性檢查在這里進(jìn)行/<paramname="para">新增的行

22、參數(shù)</param>/<paramname="businessObject"> /<paramname="voucherObject"> /</summary>void RowAdding( RowChangeEventArgs所屬業(yè)務(wù)對象</param>所屬表單對象</param>para, BusinessProxy businessObject,VoucherProxyvoucherObject);/<summary>/ 增加行之后的接口,對新增行的后續(xù)處理在這里進(jìn)

23、行/<paramname="para">新增的行參數(shù)</param>/<paramname="businessObject"> /<paramname="voucherObject"> /</summary>void RowAdded( RowChangeEventArgs所屬業(yè)務(wù)對象</param>所屬表單對象</param>para, BusinessProxy businessObject,VoucherProxyoucherObject);/&

24、lt;summary>/ 刪除行之前的接口,對行的合法性檢查在這里進(jìn)行/<paramname="para"> RowChangeEventArgs 類型,要刪除的行參數(shù)</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>/</summary>void RowsDeleting( RowChangeEventArgs

25、 para, BusinessProxy businessObject, Voucher Proxy voucherObject);/<summary>/ 刪除行之后的接口,對刪除行的后續(xù)處理在這里進(jìn)行/<paramname="para"> RowChangeEventArgs 類型,要刪除的行參數(shù)</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對

26、象</param>/</summary>void RowsDeleted( RowChangeEventArgs para, BusinessProxy businessObject, VoucherP roxy voucherObject);/<summary>/ 觀察者視圖工具條按鈕單擊事件的接口/<paramname="para"> 被單擊的按鈕參數(shù)</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<par

27、amname="voucherObject">所屬表單對象</param>/</summary>void ClickToolBarButton ( ToolBarActionEventArgspara, BusinessProxy businessObject, VoucherProxy voucherObject);/<summary>/ 設(shè)置為當(dāng)前行之前的接口/<paramname="para"> 被選擇的行參數(shù)</param>/<paramname="business

28、Object">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>/</summary>para, BusinessProxy businessObject,VoucherPrvoid RowSelecting( RowSelectEventArgsoxy voucherObject);/<summary>/ 設(shè)置為當(dāng)前行之后的接口/<paramname="para"> 被選擇的行參數(shù)</param&

29、gt; oxy voucherObject);/<paramname="businessObject">/<paramname="voucherObject"> /</summary>void RowSelected( RowSelectEventArgs所屬業(yè)務(wù)對象</param>所屬表單對象</param>para, BusinessProxy businessObject,VoucherPro/<summary>xy voucherObject);/ 業(yè)務(wù)數(shù)據(jù)合法性檢查之前的接

30、口/<paramname="businessObject"> /<paramname="voucherObject"> /</summary>void DataChecking( BusinessProxy /<summary>/ 業(yè)務(wù)數(shù)據(jù)合法性檢查之后的接口所屬業(yè)務(wù)對象</param>所屬表單對象</param>businessObject, VoucherProxy voucherObject);/<paramname="businessObject"&

31、gt; /<paramname="voucherObject"> /</summary>void DataChecked( BusinessProxy /<summary>/ 觀察者視圖填充數(shù)據(jù)前的接口所屬業(yè)務(wù)對象</param>所屬表單對象</param>businessObject,VoucherProxyvoucherObject);/<paramname="view"> 觀察者視圖接口(IEditWindow) 對象 </param>/<paramname=

32、"fillDataTable">即將要填充的數(shù)據(jù)</param>/</summary>void EditWindowFilling(IEditWindow view, DataTable fillDataTable, BusinessProxy businessObject, VoucherProxy voucherObject);/<summary>/ 觀察者視圖填充數(shù)據(jù)后的接口/<paramname="view"> 觀察者視圖接口(IEditWindow) 對象 </param>/&l

33、t;paramname="fillDataTable">已經(jīng)填充的數(shù)據(jù)</param>/</summary>void EditWindowFilled( nessObject, /<summary> / 參照打開前的接口/<paramname="view">/<paramname="para">IEditWindow view, DataTable fillDataTable,VoucherProxy voucherObject);觀察者視圖接口(IEditWindow

34、) 對象 </param>ReferOpenEventArgs 參照信息</param>/<paramname="businessObject">/<paramname="voucherObject"> /</summary>void ReferOpening( ReferOpenEventArgs所屬業(yè)務(wù)對象</param>所屬表單對象</param>para, BusinessProxyBusinessProxybusinessObject,busiVoucherPr

35、/<summary>/ 參照返回(關(guān)閉)后的接口/<paramname="view"> 觀察者視圖接口(IEditWindow) 對象 </param>/<paramname="para"> ReferCloseEventArgs 參照信息</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</pa

36、ram>/</summary> void ReferClosed( ReferCloseEventArgs para, BusinessProxy businessObject, Vou cherProxy voucherObject); /<summary>/ 創(chuàng)建用戶自定義控件接口,開發(fā)人員可以在這里創(chuàng)建用戶自定義控件。運(yùn)行時會把這個控件加載到 布局視圖中。(版本新增)/</summary>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname=

37、"voucherObject">所屬表單對象</param>/<paramname="ID"> 布局視圖中指定的自定義控件“ 控件 ID” </param>/<returns> 用戶自定義控件對象</returns>Control CreateControl( BusinessProxy businessObject, VoucherProxy voucherObj ect, string ID); /<summary> / 表單狀態(tài)更新之前的接口 /<paramname

38、="para"> 狀態(tài)的變動參數(shù)</param>/<paramname="voucherObject">所屬表單對象</param>/<returns> 是否允許改變狀態(tài)false- 不允許改變狀態(tài),表單仍將處于當(dāng)前狀態(tài)</returns>/</summary> bool StateChanging( VoucherStateChangeEventArgs para, VoucherProxy voucherObject); /<summary> / 表單狀態(tài)更新之

39、后的接口 /<paramname="para"> 狀態(tài)的變動參數(shù)</param>/<paramname="voucherObject">所屬表單對象</param>/</summary> void StateChanged( VoucherStateChangeEventArgs para, VoucherProxy voucherObject); /<summary> / 鼠標(biāo)左鍵雙擊數(shù)據(jù)行的接口 /</summary> /<paramname="par

40、a"> 鼠標(biāo)雙擊信息</param>/<paramname="businessObject"></param>/<paramname="voucherObject"></param>void RowDoubleClick( RowDoubleClickEventArgs para, BusinessProxy businessObject, Voucher Proxy voucherObject);/<summary>/ 鼠標(biāo)左鍵雙擊數(shù)據(jù)單元格的接口/</sum

41、mary>/<paramname="para"> 鼠標(biāo)雙擊信息</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>void CellDoubleClick( CellDoubleClickEventArgspara, BusinessProxy businessObject, VoucherProxy voucherObjec

42、t);/<summary>/ 鼠標(biāo)左鍵雙擊表格的標(biāo)題的接口/</summary>/<paramname="para"> 鼠標(biāo)雙擊信息</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>void HeaderDoubleClick( HeaderDoubleClickEventArgspara, Busines

43、sProxy businessObject, VoucherProxy voucherObject);/<summary>/ 設(shè)置當(dāng)前列之后的接口/</summary>/<paramname="para"> 列信息 </param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>void CellSelected ( C

44、ellSelectEventArgs para , BusinessProxy businessObject , VoucherPro xy voucherObject );1 、 表單功能開發(fā)(門戶工具欄按鈕功能開發(fā))說明IRecepit 接口中的方法/<summary>/ 門戶工具欄按鈕被點(diǎn)擊時觸發(fā)該方法,可以根據(jù)參數(shù)判斷是哪個按鈕被觸發(fā)/<paramname="ButtonArgs">被點(diǎn)擊門戶工具欄按鈕參數(shù)</param>/</summary>IButtonEventHandler GetButtonEventHand

45、ler ( VoucherButtonArgs ButtonArgs);這個方法是表單功能按鈕執(zhí)行的入口,根據(jù)在 UAP 表單功能的功能管理(見圖2)里添加的不同功能按鈕的 ButtonKey 來區(qū)別不同的功能。返回值類型為接口,該返回值對象會被UAP 運(yùn)行時調(diào)用來執(zhí)行該對象中的方法。IButtonEventHandler 接口定義了三個方法,按照運(yùn)行時被調(diào)用執(zhí)行的先后順序分別為:stringExcuting(VoucherProxyReceiptObject) 、stringExcute(VoucherProxyReceiptObject,stringPreExcuteResult) 、 s

46、tringExcuted(VoucherProxyReceiptObject,stringPreExcuteResult) 。注:( 1)三個方法的返回值為xml 字符串,其格式為"<result><systemresult="true"errinfo=""+errinfo+""/></result>" , 該返回值用來標(biāo)示當(dāng)前方法是否成功執(zhí)行,記錄在result 屬性里,errinfo 屬性用來記錄任何可能的信息。Excuting 方法的返回值可以作為Excute方法的第二個參

47、數(shù) PreExcuteResult傳入Excute,你可以在 Excute方法體重分析傳入的信息決定程序是否繼續(xù)執(zhí)行,或作出其他處理等,同樣, Excute 方法的返回值也可作為Excuted 方法的參數(shù)傳入,并作必要檢查。另外,你可以在保證上面規(guī)定的xml 結(jié)構(gòu)的前提下,在<result> 節(jié)點(diǎn)內(nèi)擴(kuò)展該xml 結(jié)構(gòu),以適應(yīng)你的應(yīng)用邏輯的需要。( 2)三個方法共有的參數(shù)就是當(dāng)前表單功能按鈕可以操作的表單模型。可以從該對象中取到當(dāng)前 可以操作的任何數(shù)據(jù)。示例 IsImplementAttribute( true )public IButtonEventHandler GetButto

48、nEventHandler( VoucherButtonArgs ButtonAr gs) / 保存按鈕UAP 已有功能的部分修改開發(fā)if (ButtonArgs.ButtonKey="btnSaveVoucher" ) returnnew AcceptOrderButton (); / 審核按鈕UAP 已有功能替代修改開發(fā)if (ButtonArgs.ButtonKey="btnAudit" ) returnnew AuditButton ( AuditType .Audit); / 鎖定按鈕 新增功能開發(fā)if (ButtonArgs.ButtonKe

49、y="SenDevLock" )returnnew LockVoucherButton ( LockType .Lock); 這個方法是表單功能按鈕執(zhí)行的入口,IsImplementAttribute 屬性 需要手工添加到方法上面。根據(jù)在UAP 表單的功能管理里不同功能按鈕的ButtonKey 來區(qū)別不同的功能。上述代碼的返回值類型AcceptOrderButton 、 AuditButton 、 LockVoucherButton 都是繼承自接口。注意項(xiàng)1) 新增功能開發(fā)說明在使用 UAP 進(jìn)行表單開發(fā)時,UAP 已經(jīng)提供的功能都是一些公共功能,而一些表單可能需要很多特別

50、的功能,此時就需要進(jìn)行新增功能的開發(fā)。新增功能開發(fā)需要開發(fā)者要完全理解當(dāng)前功能的實(shí)際業(yè)務(wù),并在實(shí)現(xiàn)業(yè)務(wù)的基礎(chǔ)上將對表單相關(guān)數(shù)據(jù)的修改持久化到數(shù)據(jù)庫中,持久化的操作及可能的事務(wù)控制等完全由開發(fā)人員自己來做。示例注意項(xiàng)2) UAP 已有功能的修改開發(fā)說明UAP 已經(jīng)實(shí)現(xiàn)了新增表單的保存方法,但是我們可能在使用UAP 保存邏輯的基礎(chǔ)之上,在保存之前或保存之后對表單的某些數(shù)據(jù)做一定的修改。具體就是對表單模型中的某些實(shí)體屬性的值根據(jù)業(yè)務(wù)邏輯的需要做必要的修改再執(zhí)行已有的表單保存。示例using System;using System.Collections.Generic;using System.Te

51、xt;using UFIDA.U8.UAP.UI.Runtime.Model;using UFIDA.U8.UAP.UI.Runtime.Common;using System.Xml;namespace ufida.u8.uap.plugin.SalesVoucher / <summary>/ 接受訂單按鈕處理/ </summary>public class AcceptOrderButton : IButtonEventHandler #region IButtonEventHandler成員public string Excute( VoucherProxy Re

52、ceiptObject,string PreExcuteResult) return null ;public string Excuted( VoucherProxy ReceiptObject, string PreExcuteResult)if (!ReadExcuteState(PreExcuteResult)if (ReceiptObject.VoucherState =VoucherStateEnum .New)if(ReceiptObject.Businesses.ContainsKey("SaleVouche_0001_E001" )Business b =

53、 ReceiptObject.Businesses"SaleVouche_0001_E001" as Business ;if (b.Rows.Count > 0)if (b.Columns.ContainsKey("iStatus" )BusinessCell cell = b.Cells "iStatus" as BusinessCell ; cell.Value ="" ; return null ; return MakeExcuteState( true , " 保存成功" );

54、public string Excuting( VoucherProxy ReceiptObject) if (ReceiptObject.VoucherState =VoucherStateEnum .New)if (ReceiptObject.Businesses.ContainsKey("SaleVouche_0001_E001" )Business b = ReceiptObject.Businesses"SaleVouche_0001_E001" asBusiness ;if (b.Rows.Count > 0)雙擊查看代碼注意項(xiàng)3) U

55、AP 已有功能的替代開發(fā)說明UAP 系統(tǒng)中已經(jīng)實(shí)現(xiàn)了一些公共功能,但這些功能并不一定適用于每種不同表單的具體情況,所以有些時候我們可能需要對UAP 的已經(jīng)實(shí)現(xiàn)的功能進(jìn)行替代開發(fā)。替代開發(fā)分為兩種:在實(shí)現(xiàn)業(yè)務(wù)基礎(chǔ)上直接操作數(shù)據(jù)庫、調(diào)用U8 已經(jīng)實(shí)現(xiàn)的該表單審核功能的API 方法。直接操作數(shù)據(jù)庫:直接操作數(shù)據(jù)庫的開發(fā)方法與下面的“新增功能開發(fā)”的開發(fā)方法大體一致,此處不再細(xì)述。調(diào)用業(yè)務(wù)API : 調(diào)用業(yè)務(wù)API 方法避免了開發(fā)人員必須去了解當(dāng)前功能的具體業(yè)務(wù),降低了開發(fā)的復(fù)雜程度,有利于快速而準(zhǔn)確的開發(fā)。但是在使用業(yè)務(wù)API 之前, 必須首先掌握在.Net 中調(diào)用 U8 中 API的方法,其次需要

56、知道有那些API 可以使用,各個API 方法的參數(shù)和返回值代表的意義,以及根據(jù)API的參數(shù)和返回值確定你的表單開發(fā)過程的業(yè)務(wù)流程等。Net中如何調(diào)用 U8中的API參照 U8API 資源管理器中為每個已有的API 生成的調(diào)用代碼示例示例Business b=ReceiptObject.Businesses"SaleVouche_0001_E001" as Business ;if (b.Cells "iswfcontrolled" .Value= "1" ) returnnull ; DataSet ds=MSXML2. DOMDoc

57、ument dom=BusinessInterfaceUtil.ConvertDataSetToDOM(ds,b.TableName);U8EnvContext envContext= new U8EnvContext ();envContext.U8Login=ReceiptObject.VBLoginObject;envContext.SetApiContext("VoucherType" ,12);U8ApiAddress myApiAddress= new U8ApiAddress ( "U8API/SaleOrder/Audit");U8Api

58、Broker broker= new U8ApiBroker (myApiAddress,envContext);broker.AssignNormalValue("domHead" ,dom);if ( this .auditType= AuditType .Audit) / 審核處理broker.AssignNormalValue("bVerify" , true );elseif ( this .auditType= AuditType .AbandonAudit) / 棄審處理 broker.AssignNormalValue("bVe

59、rify" , false );if (!broker.Invoke() / 錯誤處理 Exception apiEx=broker.GetException(); if (apiEx!= null ) if (apiEx is MomSysException ) MomSysException sysEx=apiEx as MomSysException ; Console .WriteLine( " 系統(tǒng)異常:" +sysEx.Message);MessageBox .Show(sysEx.Message); elseif (apiEx is MomBizEx

60、ception ) MomBizException bizEx=apiExas MomBizException;Console .WriteLine( "API 異常: " +bizEx.Message); MessageBox .Show(bizEx.Message); result= false ; / 結(jié)束本次調(diào)用,釋放API 資源broker.Release(); 注意項(xiàng)2、表單實(shí)體功能開發(fā)(表單實(shí)體工具欄按鈕功能開發(fā))說明表單實(shí)體的功能開發(fā)主要是針對表單中的某個實(shí)體的數(shù)據(jù)相應(yīng)的功能操作。 IRecepit 接口中的方法 /<summary> / 觀察者

61、視圖工具條按鈕單擊事件的接口 /<paramname="para"> 被單擊的按鈕參數(shù)</param>/<paramname="businessObject">所屬業(yè)務(wù)對象</param>/<paramname="voucherObject">所屬表單對象</param>/</summary> void ClickToolBarButton ( ToolBarActionEventArgspara, BusinessProxy businessObject, VoucherProxy voucherObject); 這個方法是表單實(shí)體功能按鈕執(zhí)行的入口,方法的參數(shù) para 代表觸發(fā)當(dāng)前方法的工具欄上的一個按鈕,businessObject 代表當(dāng)前表單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論