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

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

晕掉,复制过来都是带颜色的,可是一保存不高亮了,没颜色了,手动编辑了几种颜色,但太多了,麻烦。凑合看吧。希望这个编辑控件可以改进支持高亮代码显示才好。

【原】K3Cloud平台开发之Python插件的更多相关文章

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

    有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个 ...

  2. 企业级监控平台开发之nagios二次开发(七)

    背景: A公司里有很多服务器(>3000台),每台服务器都有不同的用途,如DB Server.WEB Server.ESXI等,每个组使用其中的一批,每个组可能有多个服务器管理员.现在问题出来了 ...

  3. Java微信公众平台开发之OAuth2.0网页授权

    根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...

  4. [原]Windows Azure开发之Linux虚拟机

      Windows Azure是微软的云服务集合,用来提供云在线服务所需要的操作系统与基础存储与管理的平台,是微软的云计算的核心组成组件之一.其中windows azure提供的最重要的一项服务就是虚 ...

  5. Python自动化开发之python的常用模块

    python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...

  6. 前端开发之Chrome插件

    Postman - REST Client Postman是Ajax开发的神器,对于Restful开发方式特别有帮助,可以用来模拟各种请求来测试API的正确性,比如用来模拟Ajax请求.它还支持认证, ...

  7. Vim下的Web开发之html,CSS,javascript插件

    Vim下的Web开发之html,CSS,javascript插件   HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...

  8. Android插件化开发之OpenAtlas生成插件信息列表

    上一篇文章.[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atla ...

  9. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

随机推荐

  1. PostgreSQL相关的软件,库,工具和资源集合

    PostgreSQL相关的软件,库,工具和资源集合. 备份 wal-e - Simple Continuous Archiving for Postgres to S3, Azure, or Swif ...

  2. PowerShell 导出SharePoint管理中心解决方式

    PowerShell 导出SharePoint管理中心解决方式         SharePoint QQ群有人问能不能下载(导出)管理中心里的解决方式.由于在管理中心中点击解决方式会进入还有一个页面 ...

  3. 【web开发学习笔记】ibatis学习总结

    ibatis学习总结 ibatis数据库配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCT ...

  4. 安装MySQL和HandlerSocket

    CentOS 6.5MySQL 5.6.33HandlerSocket 1.1.2 # Get packagesshell> wget http://dev.mysql.com/get/Down ...

  5. 仿QQ迷你首页(VC++,MFC)(迷你资讯)的开发与实现(源代码)

    由于需求,需要写个类似QQ迷你资讯首页的东西,就花了一点时间写了写,软件效果截图如下: 程序的主要核心代码如下: 程序的全部源代码下载地址:http://download.csdn.net/downl ...

  6. Windows Server 2008 R2中关闭“IE增强的安全配置”

    当在Windows Sever 2008 R2中运动IE8的时候会发现默认情况下IE启用了增强的安全配置,为了方便而且是在内网的情况下我们可以关闭IE8的增强安全配置,操作很简单如下步骤. 一,以本机 ...

  7. 后缀自动机(SAM)

    *在学习后缀自动机之前需要熟练掌握WA自动机.RE自动机与TLE自动机* 什么是后缀自动机 后缀自动机 Suffix Automaton (SAM) 是一个用 O(n) 的复杂度构造,能够接受一个字符 ...

  8. phpstrtotime()对于31日求上个月有问题

    PHP自带的strtotime()对于31日求上个月有问题,如下: <?php $date = "2012-07-31"; $date_unix = strtotime($d ...

  9. DLL Export 报错

    编译报错: error : syntax error at token xxxx 修改非Unicode 系统区域设计即可

  10. WebService学习笔记

    WebService有什么用? 入门之前先简单介绍下WCF.在用WebService做开发时,很多人都不知道WCF和WebService之间的关系.实际上WCF包含了WebService,这是一个很强 ...