[K/3Cloud]K3Cloud平台开发之Python插件
生活随笔
收集整理的這篇文章主要介紹了
[K/3Cloud]K3Cloud平台开发之Python插件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時候我們的表單可能很簡單,只是一個簡單交互的表單,但有可能還是要勞師動眾的給它建個工程寫個插件,是不是很不爽?例如我有如下一個表單:
功能很簡單就是選個業務對象,收集綁定幾個字段名,然后確定返回一個對象而已。我不想寫插件,因為K3Cloud是基于.net 4.0的,它對動態語言有了支持,于是我選擇使用python來實現這個簡單邏輯,以下是我的py插件,有注釋,小伙伴們應該讀得懂:
#引入clr運行庫 import clr #添加對cloud插件開發的常用組件的引用 clr.AddReference('Kingdee.BOS') clr.AddReference('Kingdee.BOS.Core') clr.AddReference('Kingdee.K3.Core') clr.AddReference('LUTAI.K3.BOS.Core') clr.AddReference('Kingdee.BOS.ServiceHelper') #導入cloud基礎庫中的常用實體對象(分命名空間導入,不會遞歸導入) from Kingdee.BOS import * from Kingdee.BOS.Util import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.DynamicForm import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * from Kingdee.BOS.Core.Interaction import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Core.Metadata.EntityElement import * from Kingdee.BOS.Core.Metadata.FieldElement import * from Kingdee.BOS.ServiceHelper import * from Kingdee.K3.Core import * from LUTAI.K3.BOS.Core import * from LUTAI.K3.BOS.Core.Metadata.Operation import * from System import * from System.Collections.Generic import * #這里是重載cloud插件模型的按鈕點擊事件,其它事件的重寫也一樣 def ButtonClick(e): if e.Key=="FOK":#這里是實例化C#中的實體對象selParams = BatchEditBomOpParams();#這里就是取表單模型里某字段的模型對象了selFormIdField = this.View.BillBusinessInfo.GetField("FSelFormId");mtrlFieldKeyField = this.View.BillBusinessInfo.GetField("FMtrlIdFieldKey");auxPropIdFieldKeyField = this.View.BillBusinessInfo.GetField("FAuxPropIdFieldKey");bomIdFieldKeyField = this.View.BillBusinessInfo.GetField("FBomIdFieldKey");#從模型取值賦值給C#實體對象selParams.FormId=selFormIdField.RefIDDynamicProperty.GetValue(this.Model.DataObject);selParams.MaterialIdFieldKey=mtrlFieldKeyField.DynamicProperty.GetValue(this.Model.DataObject);selParams.AuxPropIdFieldKey=auxPropIdFieldKeyField.DynamicProperty.GetValue(this.Model.DataObject);selParams.BomIdFieldKey=bomIdFieldKeyField.DynamicProperty.GetValue(this.Model.DataObject);if len(selParams.FormId)<=0:this.View.ShowMessage("表單對象字段必錄!");return;if len(selParams.MaterialIdFieldKey)<=0:this.View.ShowMessage("成品編碼字段必錄!");return;if len(selParams.BomIdFieldKey)<=0:this.View.ShowMessage("BOM版本字段必錄!");return;this.View.ReturnToParentWindow(selParams);this.View.Close(); def DataChanged(e):if e.Key=="FSelFormId":if len(e.NewValue)>0:#這里要注意的是,使用this.Context獲取上下文,不要使用this.View.get_Context(),這是智能感知的,被害死了metadata = MetaDataServiceHelper.Load(this.Context, e.NewValue);lstMtrlFieldItems = List[EnumItem]();lstAuxPropIdFieldItems = List[EnumItem]();lstBomIdFieldItems = List[EnumItem]();lstAuxPropIdFieldItems.Add(EnumItem());if e.NewValue == "ENG_BOM":enumItem=EnumItem();enumItem.Caption=LocaleValue("物料清單內碼", this.Context.UserLocale.LCID);enumItem.Value=metadata.BusinessInfo.GetForm().PkFieldName;enumItem.Seq=0;enumItem.EnumId=Guid.NewGuid().ToString();lstBomIdFieldItems.Add(enumItem);iFlag = 0;for field in metadata.BusinessInfo.GetFieldList():enumItem2 = EnumItem();enumItem2.Seq = iFlag;enumItem2.Caption = field.Name;enumItem2.Value = field.Key;enumItem2.EnumId = Guid.NewGuid().ToString();iFlag=iFlag+1;if isinstance(field,BaseDataField): lookupObjId = field.LookUpObject.FormId;if lookupObjId=="ENG_BOM":lstBomIdFieldItems.Add(enumItem2);if lookupObjId=="BD_MATERIAL":lstMtrlFieldItems.Add(enumItem2);if isinstance(field,RelatedFlexGroupField):lstAuxPropIdFieldItems.Add(enumItem2);if lstMtrlFieldItems.Count>0:fieldEditor = this.View.GetControl("FMtrlIdFieldKey");fieldEditor.SetComboItems(lstMtrlFieldItems);this.Model.SetValue("FMtrlIdFieldKey",lstMtrlFieldItems[0].Value);if lstAuxPropIdFieldItems.Count>0:fieldEditor = this.View.GetControl("FAuxPropIdFieldKey");fieldEditor.SetComboItems(lstAuxPropIdFieldItems);this.Model.SetValue("FAuxPropIdFieldKey",lstAuxPropIdFieldItems[0].Value);if lstBomIdFieldItems.Count>0:fieldEditor = this.View.GetControl("FBomIdFieldKey");fieldEditor.SetComboItems(lstBomIdFieldItems);this.Model.SetValue("FBomIdFieldKey",lstBomIdFieldItems[0].Value);
如果沒有LUTAI.K3.BOS.Core.DLL文件的話,可能會報錯:Could not add reference to assembly LUTAI.K3.BOS.Core,可以先刪掉。
我順便發個py編譯的小工具,小工具依賴cloud產品類庫,所以請放到ide臨時目錄里執行或者website\bin目錄下執行,本來讓sp2在這個編輯窗口上加個編譯按鈕,常見的語法錯誤都能查出來,不知sp2出來后為啥沒有,可能是在3.0里做了。
LUTAI.Tools.IronPythonCheckTool.exe
轉載于:https://www.cnblogs.com/fyq891014/p/4188853.html
總結
以上是生活随笔為你收集整理的[K/3Cloud]K3Cloud平台开发之Python插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个权限管理模块的设计(转载)
- 下一篇: 百度网盘推荐部分优秀的分享达人