有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单:

功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个对象而已。我不想写插件,因为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插件相关推荐

  1. 游戏开发之U3D插件EasyTouch5.x使用

               游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...

  2. CDR插件开发之CPG插件001 - 什么是CPG插件

    CPG,英文缩写 Corel Plugin,中文含义是 Corel 插件,简称CPG插件,典型代表有魔镜.CDR是鼎鼎大名的创意图形设计软件,几乎是广告.印刷行业的标准,而正是由于CDR在日常的排版. ...

  3. 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分

    电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分,是电影天堂APP项目开发课程的第一篇章,讲解使用requests和bs4库,爬取和解析电影天堂网站数据,并讲数据保存到SQLite数 ...

  4. 微信公众平台开发之DIY宣传页

    微信公众平台开发之DIY宣传页功能是商家推广自己的官方微信的途径之一.做任何产品的推广,活动的宣传都离不开用户关注我们的官方微信,所有我们有必要把自己的宣传页做的非常的漂亮,大气和美观,从而吸引用户去 ...

  5. 微信jsapi支付获取code_微信开发之微信公众平台开发之JSAPI公众号支付

    本文将带你了解微信开发微信公众平台开发之JSAPI公众号支付,希望本文对大家学微信有所帮助. 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.co ...

  6. 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程

    跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍         本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...

  7. 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python

    跟着王进老师学开发之Python篇第一季:基础入门篇 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  8. 微信公众平台开发之360全景

     微信公众平台开发之360全景功能是商家推广自己的产品的非常有效的方法之一.现在大多数的人买东西都不喜欢去看繁杂的文字描述,而更喜欢看实物图.所有之前我们做过微信相册用于展示我们的产品,但是光靠相册的 ...

  9. android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程

    本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...

最新文章

  1. vim删除文件所有内容
  2. datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
  3. NIPS 2016 Highlighted Papers
  4. 情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】
  5. 分布式之数据库和缓存双写一致性方案解析!
  6. IntelliJ IDEA: 无法创建Java Class文件
  7. python 删除重复字符_Google面试问题指南:使用Python删除重复出现的字符
  8. 二十八条改善ASP性能和外观的技巧(三)
  9. 决策引擎中的Hunter类策略又是什么?
  10. 如何判断一个创业公司是否有发展潜力
  11. C++基础 ----- 文件操作
  12. lintcode:子数组之和为0
  13. 下载sqlserver2012 试用_有哪些可以免费试用的电商ERP?
  14. [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(上)
  15. tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
  16. 电芯容量在前期循环中容量增加_关于锂离子电池使用性能的那些事---容量“跳水”...
  17. webwell安全工具-BeEF
  18. “单词不用背,看完自然会”,4天背过2万单词,原来学英语真的有捷径!
  19. 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树
  20. 周鸿祎给360员工的一份信:不做打工者

热门文章

  1. HTTP协议常用标准状态码含义
  2. charles: 使用小结
  3. echo -e 参数
  4. PHP实现定时任务的几种方法
  5. python_day9线程、进程和协程
  6. #pragma execution_character_set的意义
  7. java面向对象(1)
  8. Android异步消息处理机制完全解析,带你从源码的角度彻底理解
  9. smarty模板引擎_7-自定义函数
  10. spring管理hibernate的SessionFactory-多种配置方法