[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插件相关推荐
- 游戏开发之U3D插件EasyTouch5.x使用
游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...
- CDR插件开发之CPG插件001 - 什么是CPG插件
CPG,英文缩写 Corel Plugin,中文含义是 Corel 插件,简称CPG插件,典型代表有魔镜.CDR是鼎鼎大名的创意图形设计软件,几乎是广告.印刷行业的标准,而正是由于CDR在日常的排版. ...
- 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分
电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分,是电影天堂APP项目开发课程的第一篇章,讲解使用requests和bs4库,爬取和解析电影天堂网站数据,并讲数据保存到SQLite数 ...
- 微信公众平台开发之DIY宣传页
微信公众平台开发之DIY宣传页功能是商家推广自己的官方微信的途径之一.做任何产品的推广,活动的宣传都离不开用户关注我们的官方微信,所有我们有必要把自己的宣传页做的非常的漂亮,大气和美观,从而吸引用户去 ...
- 微信jsapi支付获取code_微信开发之微信公众平台开发之JSAPI公众号支付
本文将带你了解微信开发微信公众平台开发之JSAPI公众号支付,希望本文对大家学微信有所帮助. 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.co ...
- 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程
跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍 本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...
- 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python
跟着王进老师学开发之Python篇第一季:基础入门篇 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...
- 微信公众平台开发之360全景
微信公众平台开发之360全景功能是商家推广自己的产品的非常有效的方法之一.现在大多数的人买东西都不喜欢去看繁杂的文字描述,而更喜欢看实物图.所有之前我们做过微信相册用于展示我们的产品,但是光靠相册的 ...
- android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程
本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...
最新文章
- vim删除文件所有内容
- datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
- NIPS 2016 Highlighted Papers
- 情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】
- 分布式之数据库和缓存双写一致性方案解析!
- IntelliJ IDEA: 无法创建Java Class文件
- python 删除重复字符_Google面试问题指南:使用Python删除重复出现的字符
- 二十八条改善ASP性能和外观的技巧(三)
- 决策引擎中的Hunter类策略又是什么?
- 如何判断一个创业公司是否有发展潜力
- C++基础 ----- 文件操作
- lintcode:子数组之和为0
- 下载sqlserver2012 试用_有哪些可以免费试用的电商ERP?
- [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(上)
- tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
- 电芯容量在前期循环中容量增加_关于锂离子电池使用性能的那些事---容量“跳水”...
- webwell安全工具-BeEF
- “单词不用背,看完自然会”,4天背过2万单词,原来学英语真的有捷径!
- 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树
- 周鸿祎给360员工的一份信:不做打工者