日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

[K/3Cloud]K3Cloud平台开发之Python插件

發布時間:2025/5/22 python 136 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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插件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。