




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、插件開發(fā)應(yīng)用案例介紹收貨單提供以下功能:1. 增加下拉列表,顯示單據(jù)頭的所有字段;2. 在分錄菜單上增加庫存查詢(FQueryInventory)菜單項(xiàng);3. 點(diǎn)擊庫存查詢時(shí),查詢分錄上當(dāng)前焦點(diǎn)所在物料的庫存(STK_InvSumQuery);STK_Inventory4. 查詢庫存時(shí)按組織隔離,只查詢當(dāng)前組織的庫存;5. 當(dāng)前分錄物料F8時(shí),顯示所有組織的物料;6. 暫存時(shí)清空單據(jù)類型的值;7. 物料基礎(chǔ)資料增加字段有效期至(F_MCY_ExpiryDate);8. F8時(shí)只顯示有效期今天的物料;9. 保存判斷物料的庫存,如果100則提示“庫存100,是否入庫?”;10. 保存后鎖定“收料部
2、門”、“收料員”;11. 保存后自動(dòng)記錄收料日志(MCY_stk_ReceiptLog);操作步驟: 1. 增加下拉列表,顯示單據(jù)頭的所有字段;a) 新建(打開)收貨單插件工程(MyDev.K3.SCM.Stock.Business.PlugIn);b) 重載OnInitialize方法,定義List用于存儲(chǔ)下拉列表枚舉值;c) 通過this.View.BusinessInfo.GetFieldList()方法獲取所有字段;d) 通過this.View.GetControl方法獲取界面上的下拉列表控件;e) SetComboItems綁定值;f) 代碼如下:C#public override
3、void OnInitialize(InitializeEventArgs e) base.OnInitialize(e); List list = new List(); foreach (Field field in this.View.BusinessInfo.GetFieldList() EnumItem item = new EnumItem(); item.Caption = field.Name; item.EnumId = field.Key; item.Value = field.Key; list.Add(item); this.View.GetControl(FCombo
4、).SetComboItems(list);推薦精選2. 在分錄菜單上增加庫存查詢(tbQueryInventory)菜單項(xiàng);a) 運(yùn)行IDE,選擇單據(jù)體-菜單集合,新增菜單:b) 保存;3. 點(diǎn)擊庫存查詢時(shí),查詢分錄上當(dāng)前焦點(diǎn)所在物料的庫存;a) 打開插件工程,重載方法EntryBarItemClickb) 判斷BarItemKey=庫存查詢(tbQueryInventory)c) 取當(dāng)前分錄行d) 設(shè)置ListShowParameter參數(shù),打開表單這里介紹2種獲取當(dāng)前分錄字段數(shù)據(jù)的方法:TryGetEntryCurrentRow:獲取單據(jù)體當(dāng)前行,返回是否取到值以及行數(shù)據(jù)和行號(hào);另外一種
5、方法:先獲取單據(jù)體當(dāng)前行號(hào),再取指定行數(shù)據(jù);2種方法沒什么區(qū)別。示例代碼如下:C#public override void EntryBarItemClick(BarItemClickEventArgs e) base.EntryBarItemClick(e); if (e.BarItemKey = tbQueryInventory) ShowQueryInventory(); 推薦精選private void ShowQueryInventory() DynamicObject row;int rowIndex;/ 直接獲取當(dāng)前分錄行返回的是分錄行對(duì)象。 if (this.Model.Try
6、GetEntryCurrentRow(FEntity, out row, out rowIndex) ListShowParameter parameter = new ListShowParameter(); parameter.FormId = STK_Inventory; / 即時(shí)庫存的FormId parameter.MultiSelect = false; parameter.ListFilterParameter.Filter = string.Format( FMaterialId = 0 , Convert.ToString(rowFBase_Id); this.View.Sh
7、owForm(parameter); 取單據(jù)體當(dāng)前行號(hào),再取指定行的字段數(shù)據(jù)的方法如下:C#private void ShowQueryInventory()/ 獲取當(dāng)前行 int rowIndex = this.Model.GetEntryCurrentRowIndex(FEntity); if (rowIndex -1) / 判斷當(dāng)前行有數(shù)據(jù) / 取指定行的物料(ide中設(shè)置key為FBase)字段數(shù)據(jù) DynamicObject materialObj = (DynamicObject)this.Model.GetValue(FBase, rowIndex); ListShowParam
8、eter parameter = new ListShowParameter(); parameter.FormId = STK_Inventory; parameter.MultiSelect = false; parameter.ListFilterParameter.Filter = string.Format( FMaterialId = 0 , materialObjId.ToString(); this.View.ShowForm(parameter); 調(diào)試狀態(tài)下,可以屏蔽代碼parameter.ListFilterParameter.Filter看看過濾條件的效果。注意:Lis
9、tFilterParameter 的Filter屬性設(shè)置的字段是用IDE中的字段標(biāo)識(shí)。推薦精選4. 查詢庫存時(shí)按組織隔離,只查詢當(dāng)前組織的庫存:a) 增加過濾條件,組織=當(dāng)前組織b) parameter.ListFilterParameter.Filter = string.Format( FORGID =0 , this.Model.Context.CurrentOrganizationInfo.ID) );5. 當(dāng)前分錄物料F8時(shí),顯示所有組織的物料;a) 重載AuthPermissionBeforeF7Select方法,設(shè)置參數(shù)IsIsolationOrg = false;b) 同樣,如
10、果需要F8時(shí)控制只顯示當(dāng)前組織的物料,該參數(shù)設(shè)置為true。注意:在BOS系統(tǒng)中,默認(rèn)是按組織隔離的,即非共享基礎(chǔ)資料,在F8時(shí)都是只顯示當(dāng)前組織的物料。代碼示例如下:C#public override void AuthPermissionBeforeF7Select(AuthPermissionBeforeF7SelectEventArgs e) base.AuthPermissionBeforeF7Select(e); if (e.FieldKey = FBase) e.IsIsolationOrg = false; 6. 暫存時(shí)清空單據(jù)類型的值;C#public override vo
11、id BeforeDoOperation(BeforeDoOperationEventArgs e) base.BeforeDoOperation(e); if (e.Operation.FormOperation.Operation.Equals(DRAFT, StringComparison.OrdinalIgnoreCase) this.Model.SetValue(FBillTypeID, null); 7. F8時(shí)只顯示審核日期2014-03-22的供應(yīng)商;a) 重載BeforeF7Select事件;b) 設(shè)置列表過濾參數(shù)ListFilterParameter的屬性Filter;推薦
12、精選C#public override void BeforeF7Select(BeforeF7SelectEventArgs e) base.BeforeF7Select(e); if (e.FieldKey = FSupplierId1) string filter = FCreateDate 2014-03-20 ; if (string.IsNullOrEmpty(e.ListFilterParameter.Filter) e.ListFilterParameter.Filter = filter; else e.ListFilterParameter.Filter += AND +
13、filter; 8. 保存判斷物料的庫存,如果100則提示“庫存100,是否入庫?”;a) 新建收貨單服務(wù)插件工程MyDev.K3.SCM.App.Stock.ServicePlugIn;b) 定義保存服務(wù)類SaveServicePlugIn,繼承自AbstractOperationServicePlugIn;c) 重載OnAddValidators方法;代碼示例如下:C#public override void OnAddValidators(AddValidatorsEventArgs e) base.OnAddValidators(e); SaveValidator saveValida
14、tor = new SaveValidator(); saveValidator.EntityKey = FBillHead; e.Validators.Add(saveValidator);d) 定義保存校驗(yàn)類SaveValidator,繼承自AbstractValidator;e) 重載方法:Validate: i. 獲取單據(jù)體分錄數(shù)據(jù),取到物料Id; ii. 查詢物料庫存; iii. 檢查庫存是否100; iv. 構(gòu)造校驗(yàn)結(jié)果信息;代碼示例:推薦精選C#public override void Validate(ExtendedDataEntity dataEntities, Valid
15、ateContext validateContext, Kingdee.BOS.Context ctx) if (dataEntities = null | dataEntities.Length = 0) return; Dictionary dictErrMaterialId = new Dictionary(); /取所有物料 List listMaterialId = new List(); foreach (ExtendedDataEntity entityObj in dataEntities) DynamicObjectCollection collection = (Dynam
16、icObjectCollection)entityObjFEntity; foreach (DynamicObject rowObj in collection) listMaterialId.Add(long)rowObjFBase_Id); string sql = select a.FMATERIALID, sum(a.FBASEQTY) FQTY from T_STK_INVENTORY a where exists (select 1 from TABLE(fn_StrSplit(FMATERIALID, ,1) t where t.FID = a. FMATERIALID) gro
17、up by FMATERIALID ; SqlParam param = new SqlParam(FMATERIALID, KDDbType.udt_inttable, listMaterialId.Distinct().ToArray(); using (IDataReader dr = DBUtils.ExecuteReader(this.Context, sql, param) while (dr.Read() decimal qty = Convert.ToDecimal(drFQTY); if (qty 100) dictErrMaterialId.Add(Convert.ToIn
18、t64(drFMATERIALID), qty); foreach (ExtendedDataEntity entityObj in dataEntities) DynamicObjectCollection collection = (DynamicObjectCollection)entityObjFEntity; foreach (DynamicObject rowObj in collection)推薦精選 if (dictErrMaterialId.ContainsKey(long)rowObjFBase_Id) ValidationErrorInfo errinfo = new V
19、alidationErrorInfo(FMATERIALID, Convert.ToString(entityObj.DataEntityId), entityObj.DataEntityIndex, Convert.ToInt32(rowObjId), SaveValidator, 庫存數(shù)量大于100, 校驗(yàn)失敗, ErrorLevel.Error); validateContext.AddError(entityObj, errinfo); f) 重載方法:Validate:9. 保存后鎖定“收料部門”、“收料員”;a) 鎖定字段的方法:this.View.LockField;b) 該鎖定
20、與事務(wù)無關(guān),只要在客戶端保存后事件(AfterBarItemClick)處理即可;c) “收料部門”、“收料員”的key可以在IDE設(shè)計(jì)器中拷貝;代碼如下:C#public override void AfterBarItemClick(AfterBarItemClickEventArgs e) base.AfterBarItemClick(e); if (e.BarItemKey = tbSave) this.View.LockField(FBase1, true); this.View.LockField(FBase2, true); 10. 保存后自動(dòng)記錄收料日志(KDV_stk_Rec
21、eiptLog);根據(jù)需求設(shè)計(jì)收料日志表:字段名稱類型說明KDV_ID日志IDint自增長(zhǎng)KDV_UserID操作用戶Int關(guān)聯(lián)用戶表IDKDV_Date操作時(shí)間Datetime缺省getdateKDV_Content日志內(nèi)容Nvarchar(2000)推薦精選保存有2種方法:方法1:a) 在IDE中定義收料日志基礎(chǔ)資料;b) 打開收貨單服務(wù)插件保存服務(wù)類SaveServicePlugIn;c) 根據(jù)收料日志基礎(chǔ)資料的元數(shù)據(jù)定義,創(chuàng)建動(dòng)態(tài)實(shí)體對(duì)象;d) 設(shè)置對(duì)象屬性值;e) 調(diào)用BusinessDataService服務(wù)的保存方法保存動(dòng)態(tài)實(shí)體對(duì)象;代碼如下:C#public override
22、void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) base.AfterExecuteOperationTransaction(e); MetaDataService metaService = new MetaDataService(); FormMetadata formMetaData = (FormMetadata)metaService.Load(this.Context, 1823871d-b9cf-4d8b-93af-39c0c37011a5); DynamicObjectType dt = formMetaData.BusinessInfo.GetDynamicObjectType(); DynamicObject obj = new DynamicObject(dt); dt.PropertiesKDV_UserID_Id.SetValueFast(obj, this.Context.UserId); dt.PropertiesKDV_Content.SetValueFast(obj, 保存); ISaveService saveService = ServiceHelper.GetService(); saveService.Save(this.Conte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)合同范本定制模板
- 2025甘肅省安全員考試題庫附答案
- 分租公司分租合同范本
- 關(guān)于場(chǎng)地出租合同范本
- 二年級(jí)口算題目匯編100道
- 二年級(jí)口算題目匯編100道
- 供油協(xié)議合同范本
- 醫(yī)保藥店藥師聘用合同范本
- 2025年浙江省建筑安全員B證考試題庫附答案
- 2025年安徽省安全員《C證》考試題庫
- 《汽車文化》全套教案
- 會(huì)計(jì)英語專業(yè)詞匯全
- 拆除工程檢驗(yàn)批質(zhì)量檢驗(yàn)記錄
- 甲狀腺腫瘤PPT課件
- 怎樣把握文章線索
- 城市燃?xì)夤こ瘫O(jiān)理實(shí)施細(xì)則
- LED與金鹵燈對(duì)比(共4頁)
- 鋁合金和工藝課件:硬質(zhì)陽極氧化處理
- (完整版)部編四年級(jí)語文下詞語表
- 高頻電子線路完整章節(jié)課件(胡宴如)
- 酒店熱水設(shè)計(jì)方案
評(píng)論
0/150
提交評(píng)論