[K/3Cloud]K3Cloud平台开发之Python插件
2013-08-30 11:39
841 查看
有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单:
功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个对象而已。我不想写插件,因为K3Cloud是基于.net 4.0的,它对动态语言有了支持,于是我选择使用python来实现这个简单逻辑,以下是我的py插件,有注释,小伙伴们应该读得懂:
如果没有LUTAI.K3.BOS.Core.DLL文件的话,可能会报错:Could not add reference to assembly LUTAI.K3.BOS.Core,可以先删掉。
我顺便发个py编译的小工具,小工具依赖cloud产品类库,所以请放到ide临时目录里执行或者website\bin目录下执行,本来让sp2在这个编辑窗口上加个编译按钮,常见的语法错误都能查出来,不知sp2出来后为啥没有,可能是在3.0里做了。
功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个对象而已。我不想写插件,因为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
相关文章推荐
- [K/3Cloud]K3Cloud平台开发之Python插件
- [K/3Cloud]K3Cloud平台开发之Python插件
- 【原】K3Cloud平台开发之Python插件
- [K/3Cloud] 如何在k3Cloud主页实现自定义页面的开发
- 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
- 四、K3 Cloud 开发插件《K3 Cloud事件、方法、函数》
- 手把手搭建K3cloud插件开发环境
- 深度学习Caffe平台开发环境准备——2.使用Eclipse的插件PyDev配置Python开发环境
- [K/3Cloud] 如何在k3Cloud主页实现自定义页面的开发
- Windows平台下openCV-Python开发环境的搭建
- KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情
- Python-mode:在 Vim 编辑器中开发 Python 应用的 Vim 插件
- Python量化交易平台开发教程系列2-类CTP交易API的Python封装设计
- 用python和redis开发高性能监控平台及框架升级过程
- ionic开发之Android平台echo插件编写
- HTM层级实时记忆开发平台Nupic安装方法(pYTHON VERSION)
- SublimeText 2 python开发环境配置以及好用的插件安装
- AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
- 平台后端开发(Python)面试记录