K3CloudBOS插件開發(fā)百問百答_第1頁(yè)
K3CloudBOS插件開發(fā)百問百答_第2頁(yè)
K3CloudBOS插件開發(fā)百問百答_第3頁(yè)
K3CloudBOS插件開發(fā)百問百答_第4頁(yè)
K3CloudBOS插件開發(fā)百問百答_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——K3CloudBOS插件開發(fā)百問百答K/3CloudBOS插件開發(fā)百問百答

修訂記錄Ver.NoV1.0日期20230428編制\\修訂張晉博校對(duì)丁振華批準(zhǔn)賴碧云修改的章節(jié)號(hào)初始版本,共39個(gè)問題問題和看法假使你對(duì)文檔有任何看法、問題或想法,或者你的問題未在此文檔中找到答案,請(qǐng)通過電子郵件聯(lián)系我們

jinbo_zhang@

目錄

K/3CloudBOS插件開發(fā)百問百答11.入門篇4

1.1.如何創(chuàng)立并啟用各類插件4

1.1.1.如何創(chuàng)立并啟用動(dòng)態(tài)表單插件41.1.2.如何創(chuàng)立并啟用單據(jù)編輯插件81.1.3.如何創(chuàng)立并啟用基礎(chǔ)資料編輯插件91.1.4.如何創(chuàng)立并啟用列表插件101.1.5.如何創(chuàng)立并啟用操作插件111.1.6.如何創(chuàng)立并啟用賬表取數(shù)插件151.1.7.如何創(chuàng)立并啟用單據(jù)轉(zhuǎn)換插件181.1.8.如何創(chuàng)立并啟用反寫插件181.2.為何插件不起作用,如何排查202.進(jìn)階篇21

2.1.插件代碼,如何自行調(diào)用單據(jù)操作服務(wù)21

2.1.1.如何加載(Load)單據(jù)212.1.2.如何調(diào)用保存(Save)操作252.1.3.如何調(diào)用提交(Submit)操作282.1.4.如何調(diào)用審核/反審核(Audit/UnAudit)操作312.1.5.如何調(diào)用禁用(Disabled)操作342.1.6.如何刪除(Delete)單據(jù)372.2.調(diào)用單據(jù)操作后,如何判斷結(jié)果,并處理交互提醒402.3.插件給字段賦值后,為什么不執(zhí)行字段〞值更新屬性〞上配置的表單服務(wù)442.4.在動(dòng)態(tài)表單插件中,如何修改界面數(shù)據(jù)46

2.4.1.如何新增單據(jù)體行462.4.2.如何刪除單據(jù)體行482.4.3.如何給普通字段賦值492.4.4.如何給基礎(chǔ)資料字段賦值502.4.5.如何動(dòng)態(tài)設(shè)置下拉列表字段的可選項(xiàng)522.5.字段標(biāo)識(shí)(Key)、字段名(FieldName)、屬性名(PropertyName)的區(qū)別532.6.在動(dòng)態(tài)表單中,如何實(shí)現(xiàn)文件下載532.7.如何支持用戶把本地文件上傳到服務(wù)器572.8.以實(shí)例說(shuō)明如何為動(dòng)態(tài)表單取數(shù)、填充582.9.如何為預(yù)置賬表,添加字段602.10.如何獲取基礎(chǔ)資料的屬性值602.11.保存前,如何為新建的單據(jù)數(shù)據(jù)包、單據(jù)體行,填寫主鍵612.12.在動(dòng)態(tài)表單插件中,如何顯示指定界面622.13.如何為收款單,往來(lái)單位類型,添加新的基礎(chǔ)資料642.14.如何創(chuàng)立、調(diào)試自定義執(zhí)行計(jì)劃662.15.如何通過按鈕實(shí)現(xiàn)F8選擇返回效果672.16.如何在操作插件中,自定義操作校驗(yàn)器并啟用692.17.如何實(shí)現(xiàn)超鏈接,開啟外部URL地址732.18.如何獲取基礎(chǔ)資料字段的類別(FormId)74

3.

高級(jí)篇753.1.如何給單據(jù)體表格,增加自定義過濾行75

1.入門篇

1.1.如何創(chuàng)立并啟用各類插件1.1.1.如何創(chuàng)立并啟用動(dòng)態(tài)表單插件

創(chuàng)立插件工程

?動(dòng)態(tài)表單插件,運(yùn)行在K/3Cloud的Web服務(wù)層,需要建立一個(gè)獨(dú)立的工程管理動(dòng)態(tài)表

單插件類;

?動(dòng)態(tài)表單插件工程,建議命名格式為[開發(fā)商][.K3][.業(yè)務(wù)領(lǐng)域][.子系統(tǒng)].Business.PlugIn;

如JD.K3.SCM.PUR.Business.PlugIn;

?創(chuàng)立工程過程:VisualStudio→New→Project

?VisualC#→ClassLibrary→選擇工程文件存放位置→OK

?工程References右鍵,添加工程引用,所添加組件都來(lái)自Cloud網(wǎng)站的website\\bin路

?修改插件工程輸出路徑為Cloud網(wǎng)站路徑website\\bin:選中插件工程→右鍵→Property

(屬性)→Build頁(yè)簽→OutputPath(輸出路徑)

?修改當(dāng)前類(Class1)的繼承對(duì)象為AbstractDynamicFormPlugIn?類文件引用基類(AbstractDynamicFormPlugIn)所在命名空間C#

usingKingdee.BOS.Core.DynamicForm.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\區(qū)分當(dāng)前類應(yīng)用在哪個(gè)模型上\)]publicclassClass1:AbstractDynamicFormPlugIn

{}

}

注冊(cè)并啟用插件

?插件編寫完畢,編譯工程,輸出類庫(kù)*.dll文件到WebSite\\Bin目錄;?開啟BOSIDE,定位到動(dòng)態(tài)表單模型整體屬性,配置表單插件屬性

?點(diǎn)開表單插件屬性,注冊(cè)編譯生成的插件工程組件,從website\\bin路徑下找到插件工

程組件,選擇插件工程組件下的插件類,一般在插件類上使用微軟元數(shù)據(jù)描述,在注冊(cè)插件時(shí)區(qū)分不同的類,選擇注冊(cè)插件后,注意勾選“啟用〞復(fù)選框

1.1.2.如何創(chuàng)立并啟用單據(jù)編輯插件

創(chuàng)立單據(jù)編輯插件

?單據(jù)編輯插件,運(yùn)行在K/3Cloud的Web服務(wù)層,重用動(dòng)態(tài)表單插件工程;?創(chuàng)立插件類的過程,與創(chuàng)立動(dòng)態(tài)表單插件幾乎一樣,唯一區(qū)別是單據(jù)編輯插件繼承的基

類是AbstractBillPlugIn

?插件類引用基類所在命名空間

C#

usingKingdee.BOS.Core.Bill.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\區(qū)分當(dāng)前類應(yīng)用在哪個(gè)模型上\)]publicclassClass2:AbstractBillPlugIn{//TODO}}

啟用單據(jù)編輯插件

?與啟用動(dòng)態(tài)表單插件一樣

1.1.3.如何創(chuàng)立并啟用基礎(chǔ)資料編輯插件

如何創(chuàng)立基礎(chǔ)資料編輯插件

?基礎(chǔ)資料編輯插件,運(yùn)行在K/3Cloud的Web服務(wù)層,重用動(dòng)態(tài)表單插件工程;

?與創(chuàng)立單據(jù)編輯插件一樣,唯一區(qū)別是基礎(chǔ)資料編輯插件繼承的基類是

AbstractBasePlugIn,目前AbstractBasePlugIn與AbstractBillPlugIn完全一樣,但不管從模型分類角度或從未來(lái)發(fā)展趨勢(shì)看,還是請(qǐng)大家嚴(yán)格遵守插件體系,即:從AbstractBasePlugIn繼承C#

usingKingdee.BOS.Core.Base.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\區(qū)分當(dāng)前類應(yīng)用在哪個(gè)模型上\)]publicclassClass3:AbstractBasePlugIn{//TODO

}}

如何啟用基礎(chǔ)資料編輯插件?與啟用動(dòng)態(tài)表單插件一樣

1.1.4.如何創(chuàng)立并啟用列表插件

如何創(chuàng)立列表插件

?列表插件,運(yùn)行在K/3Cloud的Web服務(wù)層,重用動(dòng)態(tài)表單插件工程;?與創(chuàng)立表單插件一樣,唯一區(qū)別是列表插件從AbstractListPlugIn繼承出來(lái)C#

usingKingdee.BOS.Core.List.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\區(qū)分當(dāng)前類應(yīng)用在哪個(gè)模型上\)]publicclassClass4:AbstractListPlugIn{//TODO}}

如何啟用列表插件

?與啟用動(dòng)態(tài)表單插件一樣,唯一區(qū)別是注冊(cè)列表插件的位置是模型的列表插件屬性

?與創(chuàng)立動(dòng)態(tài)表單插件類似,區(qū)別在于帳表服務(wù)器插件繼承自SysReportBaseService?插件類文件引用基類所在命名空間C#

usingKingdee.BOS.Contracts.Report;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceReportPlugInDemo{

publicclassClass1:SysReportBaseService{//TODO}}

如何啟用賬表服務(wù)器插件

?進(jìn)入BOSIDE,開啟賬表模型,設(shè)置服務(wù)器插件屬性

?注冊(cè)編譯好的賬表服務(wù)器插件,并點(diǎn)擊啟用復(fù)選框

1.1.7.如何創(chuàng)立并啟用單據(jù)轉(zhuǎn)換插件

如何創(chuàng)立單據(jù)轉(zhuǎn)換插件

?單據(jù)轉(zhuǎn)換插件,運(yùn)行在K/3Cloud的App服務(wù)層,重用操作插件工程;

?創(chuàng)立插件類,與創(chuàng)立動(dòng)態(tài)表單插件類類似,繼承基類是AbstractConvertPlugIn?插件類文件引用基類所在命名空間C#

usingKingdee.BOS.Core.Metadata.ConvertElement.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceBusinessFlowPlugIn{

publicclassClass1:AbstractConvertPlugIn{//TODO}}

如何啟用單據(jù)轉(zhuǎn)換插件

?開啟BOSIDE,開啟單據(jù)轉(zhuǎn)換設(shè)計(jì)界面,插件策略,注冊(cè)編譯生成的單據(jù)轉(zhuǎn)換插件,并

啟用

1.1.8.如何創(chuàng)立并啟用反寫插件

如何創(chuàng)立反寫插件

?反寫插件,運(yùn)行在K/3Cloud的App服務(wù)層,重用操作插件工程;

?創(chuàng)立插件類與創(chuàng)立動(dòng)態(tài)表單插件類似,繼承基類AbstractBusinessFlowServicePlugIn?插件文件引用基類所在命名空間C#usingKingdee.BOS.Core.BusinessFlow.PlugIn;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceBusinessFlowPlugIn{

publicclassClass2:AbstractBusinessFlowServicePlugIn{//TODO}}

如何啟用反寫規(guī)則插件

?開啟BOSIDE,開啟業(yè)務(wù)流程的下游單據(jù)模型(如購(gòu)買申請(qǐng)單下推購(gòu)買訂單,則反寫插

件掛在購(gòu)買訂單上),選擇單據(jù)關(guān)聯(lián)配置屬性

?反寫插件,注冊(cè)編譯生成的反寫插件工程組件對(duì)應(yīng)的反寫類,并啟用

1.2.為何插件不起作用,如何排查

插件不起作用,依照如下步驟檢查:

?插件工程編譯后,是否輸出到Cloud網(wǎng)站路徑website\\bin

?插件類是否注冊(cè)到了當(dāng)前表單上,并成功保存?注冊(cè)插件時(shí),要找website\\bin路徑下

的插件工程組件

?編譯生成dll到指定網(wǎng)站目錄后,是否重啟過站點(diǎn)的IIS?必需重啟站點(diǎn)IIS,新組件才會(huì)

被啟用;

?調(diào)試代碼,附加w3wp.exe程序后,插件代碼是否能夠命中?假使不能命中,說(shuō)明運(yùn)行

submitService.Submit(this.Context,materialMetadata.BusinessInfo,newobject[]{10001},\);}}}

2.1.4.如何調(diào)用審核/反審核(Audit/UnAudit)操作

.Web層插件,如何調(diào)用審核/反審核(Audit/UnAudit)操作

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.ServiceHelper.dll組件提供的BusinessDataServiceHelper類提供的

SetBillStatus方法

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.ServiceHelper.dll組件

?插件類文件引用BusinessDataServiceHelper所在的命名空間

?BusinessDataServiceHelper.SetBillStatus方法介紹

SetBillStatus方法與SetStatus方法看上去類似,其實(shí)完全不一樣,其參數(shù)列表也完全不一樣,調(diào)用單據(jù)審核操作的服務(wù)端要使用SetBillStatus方法,SetStatus方法后續(xù)介紹?SetBillStatus方法參數(shù)介紹名稱ctxbusinessInfopkEntryIdsparas類型ContextBusinessInfoList>List說(shuō)明系統(tǒng)上下文全局信息待審核\\反審核數(shù)據(jù)的元數(shù)據(jù)描述信息待審核\\反審核數(shù)據(jù)的id集合,此場(chǎng)景key和value都是id的值審核\\反審核時(shí)附加的參數(shù),包含兩個(gè)值,第一個(gè),同意與否,0:駁回;1:通過;2:反審核;其次個(gè),審核看法,此參數(shù)默認(rèn)可以為空審核\\反審核操作的操作碼額外業(yè)務(wù)選項(xiàng),審核\\反審核服務(wù)端服務(wù)和服務(wù)端插件都持有此對(duì)象operationNumberoptionstringOperateOption

?例如代碼C#

usingKingdee.BOS.Core.DynamicForm;

usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.Core.List.PlugIn;usingKingdee.BOS.ServiceHelper;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\區(qū)分當(dāng)前類應(yīng)用在哪個(gè)模型上\)]publicclassClass4:AbstractListPlugIn{

publicoverridevoidButtonClick(ButtonClickEventArgse){

List>lstKeyValuePairs=

newList>();

KeyValuePairkeyValuePair=newKeyValuePair(10001,\);lstKeyValuePairs.Add(keyValuePair);//審核id為10001的當(dāng)前單據(jù)

IOperationResultauditResult=BusinessDataServiceHelper.SetBillStatus(this.Context,

this.View.BusinessInfo,lstKeyValuePairs,null,\);

//反審核id為10001的當(dāng)前單據(jù)

IOperationResultunAuditResult=BusinessDataServiceHelper.SetBillStatus(this.Context,

this.View.BusinessInfo,lstKeyValuePairs,null,\);}}}

.App層插件,如何調(diào)用審核/反審核(Audit/UnAudit)操作

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.App.dll組件提供的ServiceHelper類提供的GetService泛型方法,

獲取改變單據(jù)狀態(tài)服務(wù),調(diào)用此服務(wù)提供的SetBillStatus方法

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、

Kingdee.BOS.DataEntity.dll

?類文件引用相關(guān)命名空間,詳見例如代碼

?接口介紹

?同Web層插件介紹

?例如代碼C#

usingKingdee.BOS.Contracts;usingKingdee.BOS.Core.DynamicForm;usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.Core.Metadata;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyOperaionServicePlugIn{

publicclassClass3:AbstractOperationServicePlugIn{

publicoverridevoidBeforeExecuteOperationTransaction(

BeforeExecuteOperationTransactione)

{

//審核\\反審核id為10001的物料數(shù)據(jù)//獲取單據(jù)狀態(tài)轉(zhuǎn)換服務(wù)

ISetStatusServicesetStatusService=

Kingdee.BOS.App.ServiceHelper.GetService();

//獲取元數(shù)據(jù)服務(wù)

IMetaDataServicemetaDataService=

Kingdee.BOS.App.ServiceHelper.GetService();

//構(gòu)建id為10001的數(shù)據(jù)集合

List>lstKeyValuePairs=newList>();

KeyValuePairkeyValuePair=newKeyValuePair(10001,\);lstKeyValuePairs.Add(keyValuePair);//獲取物料元數(shù)據(jù)

FormMetadatamaterialMetaData=metaDataService.Load(this.Context,\)

asFormMetadata;

//審核

IOperationResultauditResult=setStatusService.SetBillStatus(this.Context,materialMetaData.BusinessInfo,lstKeyValuePairs,null,\);//反審核

IOperationResultunAuditResult=setStatusService.SetBillStatus(this.Context,materialMetaData.BusinessInfo,lstKeyValuePairs,null,\);}}}

2.1.5.如何調(diào)用禁用(Disabled)操作

.Web層插件,如何調(diào)用禁用(Disabled)操作

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.ServiceHelper.dll組件提供的BusinessDataServiceHelper類所提供

的SetState方法

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.ServiceHelper.dll組件

?插件類文件引用BusinessDataServiceHelper所在的命名空間

?BusinessDataServiceHelper.SetState方法介紹

?SetState方法直接操作數(shù)據(jù)庫(kù),執(zhí)行update語(yǔ)句,按方法參數(shù)構(gòu)建一條例如update

xxxsetxxx=’xxx’wherexxx=xxx的指令

?SetState參數(shù)介紹名稱ctxtableNamefieldNamefieldValuepkFieldNamepkFieldValues類型Contextstringstringstringstringobject[]說(shuō)明系統(tǒng)上下文全局信息待執(zhí)行update指令的表名待禁用的狀態(tài)字段的字段名待禁用的狀態(tài)字段的目標(biāo)值當(dāng)前表的唯一標(biāo)識(shí)字段名當(dāng)前表的唯一標(biāo)示字段值集合?例如代碼C#

usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.ServiceHelper;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

publicclassClass5:AbstractDynamicFormPlugIn{

publicoverridevoidButtonClick(ButtonClickEventArgse){

//禁用物料id為10001和10002的數(shù)據(jù)BusinessDataServiceHelper.SetState(this.Context,\,\,\,

\,

newobject[]{10001,10002});}}}

.App層插件,如何調(diào)用禁用(Disabled)操作

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.App.dll組件提供的ServiceHelper類提供的GetService泛型方法,

訪問BusinessDataService服務(wù)的SetState方法

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、

Kingdee.BOS.DataEntity.dll?類文件引用相關(guān)命名空間,詳見例如代碼

?接口介紹

?同Web層插件介紹?例如代碼C#

usingKingdee.BOS.Contracts;

usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyOperaionServicePlugIn{

publicclassClass4:AbstractOperationServicePlugIn{

publicoverridevoidBeforeExecuteOperationTransaction(

BeforeExecuteOperationTransactione)

{//獲取數(shù)據(jù)服務(wù)

IBusinessDataServicebusinessDataService=Kingdee.BOS.App.ServiceHelper.GetService();businessDataService.SetState(this.Context,\,\,\,

\,

newobject[]{10001,10002});}}}

2.1.6.如何刪除(Delete)單據(jù)

.Web層插件,如何刪除(Delete)單據(jù)

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.ServiceHelper.dll組件的BusinessDataServiceHelper類提供的Delete

方法

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.ServiceHelper.dll組件

?插件類文件引用BusinessDataServiceHelper所在的命名空間

?方法介紹

BusinessDataServiceHelper提供兩個(gè)Delete方法,其區(qū)別在于

?參數(shù)不帶元數(shù)據(jù)描述信息的,直接執(zhí)行數(shù)據(jù)庫(kù)刪除操作,把數(shù)據(jù)刪除

?publicstaticvoidDelete(Contextctx,object[]Ids,DynamicObjectType

dynamicObjectType)

?參數(shù)帶元數(shù)據(jù)描述信息的,執(zhí)行刪除操作的服務(wù)端完整服務(wù),如執(zhí)行刪除操作的校

驗(yàn)器、刪除操作的服務(wù)端服務(wù)、刪除操作的服務(wù)端插件

?publicstaticIOperationResultDelete(Contextctx,BusinessInfo

businessInfo,object[]Ids,OperateOptionoption=null,stringoperationNumber=\)

?參數(shù)介紹名稱ctxIdsdynamicObjectTypebusinessInfooption類型Contextobject[]DynamicObjectTypeBusinessInfoOperateOption說(shuō)明系統(tǒng)上下文全局信息待刪除數(shù)據(jù)的id集合待刪除數(shù)據(jù)的動(dòng)態(tài)實(shí)體類型待刪除數(shù)據(jù)的元數(shù)據(jù)描述信息業(yè)務(wù)控制額外選項(xiàng),刪除的服務(wù)端服務(wù)和插件都能持有此對(duì)象刪除操作的操作碼operationNumberstring?例如代碼C#

usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.Core.Metadata;usingKingdee.BOS.ServiceHelper;

usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

publicclassClass6:AbstractDynamicFormPlugIn{

publicoverridevoidButtonClick(ButtonClickEventArgse){

//刪除id為10001和10002的物料//獲取物料元數(shù)據(jù)

FormMetadatamaterialMetadata=

MetaDataServiceHelper.Load(this.Context,\)asFormMetadata;//模擬刪除服務(wù)端操作完整過程

BusinessDataServiceHelper.Delete(this.Context,materialMetadata.BusinessInfo,newobject[]{10001,10002});}}}

.App層插件,如何刪除單據(jù)

?實(shí)現(xiàn)思路

?調(diào)用Kingdee.BOS.App.dll組件的ServiceHelper類提供的GetService泛型方法獲取刪

除服務(wù)

?插件準(zhǔn)備

?插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、

Kingdee.BOS.DataEntity.dll?類文件引用相關(guān)命名空間,詳見例如代碼

?接口介紹

?同Web層插件介紹

?例如代碼C#usingKingdee.BOS.Contracts;usingKingdee.BOS.Core.DynamicForm.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.Core.Metadata;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyOperaionServicePlugIn{

publicclassClass5:AbstractOperationServicePlugIn{

publicoverridevoidBeforeExecuteOperationTransaction(

BeforeExecuteOperationTransactione)

{//獲取刪除服務(wù)

IDeleteServicedeleteService=Kingdee.BOS.App.ServiceHelper.GetService();//獲取元數(shù)據(jù)服務(wù)

IMetaDataServicemetaDataService=Kingdee.BOS.App.ServiceHelper.GetService();//獲取物料元數(shù)據(jù)

FormMetadatamaterialMetadata=metaDataService.Load(this.Context,\)asFormMetadata;//執(zhí)行刪除服務(wù)的完整過程(推薦方式)deleteService.Delete(this.Context,materialMetadata.BusinessInfo,newobject[]{10001,10002});

//直接執(zhí)行數(shù)據(jù)刪除(風(fēng)險(xiǎn)極高,僅適用于未定義單據(jù),只是利用ORM模型存取數(shù)據(jù)的狀況)

//調(diào)用此服務(wù)會(huì)跳過刪除校驗(yàn),僅刪除ORM模型內(nèi)含表格的數(shù)據(jù),其他相關(guān)數(shù)據(jù)不會(huì)處理,假使有

上下游單據(jù)及反寫,不會(huì)撤銷關(guān)聯(lián)及回滾反寫,從而造成數(shù)據(jù)錯(cuò)誤!deleteService.Delete(this.Context,

newobject[]{10001,10002},materialMetadata.BusinessInfo.GetDynamicObjectType());}}}

2.2.調(diào)用單據(jù)操作后,如何判斷結(jié)果,并處理交互提醒

?操作返回結(jié)果接口定義:C#publicinterfaceIOperationResult:IInteractionResult?IInteractionResult接口定義:C#

publicinterfaceIInteractionResult{

//交互表單顯示標(biāo)題

stringFormTitle{get;set;}//交互上下文信息

InteractionContextInteractionContext{get;set;}//本次交互的發(fā)起人stringSponsor{get;set;}}

?交互上下文信息定義:C#

publicclassInteractionContext{

publicInteractionContext();//當(dāng)前表單模型信息

publicBusinessInfoBusinessInfo{get;}//數(shù)據(jù)上下文

publicContextContext{get;set;}//交互服務(wù)操作的實(shí)體集合

publicExtendedDataEntity[]DataEntities{get;set;}

//自定義交互表單的初始化參數(shù):InteractionFormId屬性有值時(shí),本屬性才生效publicDynamicFormShowParameterFormShowParameter{get;set;}//交互表單標(biāo)識(shí):默認(rèn)為BOS_K3DisplayerpublicstringInteractionFormId{get;set;}

//是否交互(發(fā)現(xiàn)有領(lǐng)域把此當(dāng)成單純的自定義信息提醒用,所以加此標(biāo)識(shí)來(lái)加以區(qū)分)默認(rèn)是交互類型異常,如作它用,請(qǐng)?jiān)诖藰?biāo)識(shí)

publicboolIsInteractive{get;set;}//K3顯示器模型

publicK3DisplayerModelK3DisplayerModel{get;set;}//其它控制選項(xiàng)

publicOperateOptionOption{get;set;}

//簡(jiǎn)單交互信息(批量自定義消息時(shí),此屬性建議賦值,以便平臺(tái)在批量操作時(shí)作簡(jiǎn)單提醒)publicstringSimpleMessage{get;set;}

usingKingdee.BOS.Core.Bill.PlugIn;

usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingSystem;

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

[System.ComponentModel.Description(\)]publicclassClass8:AbstractBillPlugIn{

publicoverridevoidBarItemClick(BarItemClickEventArgse){

if(e.BarItemKey==\){

this.View.Model.SetValue(\,10);//調(diào)用乘數(shù)字段的值更新服務(wù)

//由于乘數(shù)字段在單據(jù)頭,這里的行號(hào)傳0

this.View.InvokeFieldUpdateService(\,0);}}}}

2.4.在動(dòng)態(tài)表單插件中,如何修改界面數(shù)據(jù)2.4.1.如何新增單據(jù)體行

?實(shí)現(xiàn)思路

?調(diào)用Model的CreateNewEntryRow方法?CreateNewEntryRow介紹

?Model提供了5個(gè)重載方法,分別介紹

?publicvoidCreateNewEntryRow(DynamicObjectparentRow,SubEntryEntity

entity,introw)

在父單據(jù)體對(duì)應(yīng)的子單據(jù)體上新增一行名稱parentRowentityrow類型DynamicObjectSubEntryEntityint說(shuō)明父單據(jù)體行實(shí)體數(shù)據(jù)包子單據(jù)體實(shí)體元數(shù)據(jù)描述信息新創(chuàng)立的子單據(jù)體行,在此父分錄對(duì)應(yīng)的子單據(jù)體中對(duì)應(yīng)的是哪一行,假使傳-1,默認(rèn)新增在子單據(jù)體的最終一行?publicvoidCreateNewEntryRow(Entityentity)

在指定單據(jù)體的最終一行,新增一行分錄名稱entity?publicvoidCreateNewEntryRow(Entityentity,introw)

在指定單據(jù)體的指定行,新增一行分錄名稱entity類型Entity說(shuō)明指定需要?jiǎng)?chuàng)立一行分錄的單據(jù)體的元數(shù)據(jù)描述信息類型Entityint說(shuō)明指定新增行的單據(jù)體的元數(shù)據(jù)描述信息指定新增的單據(jù)體行是當(dāng)前單據(jù)體的第幾行row?publicvirtualvoidCreateNewEntryRow(Entityentity,introw,DynamicObject

rowDataEntity)

在指定單據(jù)體的指定行,新增一行分錄名稱entityrowrowDataEntity類型EntityintDynamicObject說(shuō)明指定新增行的單據(jù)體的元數(shù)據(jù)描述信息新增到哪一行待新增行的單據(jù)體實(shí)體數(shù)據(jù)包?publicvoidCreateNewEntryRow(stringkey)

在指定單據(jù)體唯一標(biāo)示的單據(jù)體上,新增一行分錄,默認(rèn)新增到最終一行名稱key

?例如代碼C#

usingKingdee.BOS.Core.Bill.PlugIn;

usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;usingKingdee.BOS.Core.Metadata.EntityElement;usingKingdee.BOS.Orm.DataEntity;usingSystem;

usingSystem.Collections.Generic;

類型string說(shuō)明待新增單據(jù)體行的單據(jù)體唯一標(biāo)示

usingSystem.Linq;usingSystem.Text;

usingSystem.Threading.Tasks;

namespaceMyDynamicFormPlugIn{

publicclassClass9:AbstractBillPlugIn{

publicoverridevoidButtonClick(ButtonClickEventArgse){

//entity:?jiǎn)螕?jù)體唯一標(biāo)識(shí)//subentity:子單據(jù)體唯一標(biāo)識(shí)//獲取單據(jù)體元數(shù)據(jù)描述

Entityentity=this.View.BusinessInfo.GetEntity(\);//獲取子單據(jù)體元數(shù)據(jù)描述

SubEntryEntitysubentity=this.View.BusinessInfo.GetEntity(\)asSubEntryEntity;//為單據(jù)體新增一行分錄

this.View.Model.CreateNewEntryRow(\);this.View.Model.CreateNewEntryRow(entity,-1);this.View.Model.CreateNewEntryRow(entity,-1,

this.View.Model.DataObject[\]asDynamicObject);//為子單據(jù)體新增一行

this.View.Model.CreateNewEntryRow(

this.View.Model.DataObject[\]asDynamicObject,subentity,-1);}}}

2.4.2.如何刪除單據(jù)體行

?實(shí)現(xiàn)思路

?調(diào)用model的DeleteEntryRow方法?DeleteEntryRow介紹

?傳遞待刪除行的單據(jù)體唯一標(biāo)示和要?jiǎng)h除行的行號(hào)?例如代碼C#usingKingdee.BOS.Core.Bill.PlugIn;usingKingdee.BOS.Core.Dyna

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論