金蝶的事件python脚本触发主动写入到轻易云数据如何操作?
本文将介绍通过Python脚本,实现在金蝶点击按钮,对应的轻易云方案自动生成一条请求队列的方法。
1.启动金蝶的BOS设计器
2.通过云之家账号登录BOS设计器
3.创建应用
- 若此前本地无该账套应用,则先创建应用,此处的应用是创建在计算机本地的文件实体,此前所有对该账套的修改都会同步到云服务器的数据中心中,引用表单和签出的动作会同步数据中心的信息到本地,无需担心覆盖掉其他操作者对金蝶进行的开发
4.选择应用
- 完成应用创建或本地已有该账套的应用时,点击该应用的开发
5.选择单据模块
- 打开单据所属的模块,此处以销售退货单演示
6.引入该目标单据
- 在项目树中引入需要操作的表单,若其他开发者开发过该表单,需要把扩展的下级表单也引入到应用中,如未进行过扩展,把[KD]开发的表单进行扩展
7.扩展并迁出表单
- 右键签出扩展后的单据,若未扩展则扩展后直接操作
8.注册python脚本
点击编辑-批量设置字段属性
依次打开:表单属性-操作列表-选择需要实现该功能的按钮(或新建一个列表按钮)-编辑
依次打开:其他控制-服务插件-注册python脚本
填入以下内容并确认,确认语法报错提示,退回主界面保存;以下为python脚本,对于不同的方案,我们修改脚本中的轻易云HOST和方案ID即可,即QEASY_HOST
和QEASY_STRATEGY_ID
两个值。
# -*- coding: utf-8 -*-
# from Newtonsoft.Json import JsonConvert # SerializeObject
# from Newtonsoft.Json.Linq import *
# from Kingdee.BOS.ServiceHelper import *
# from System.Collections.Generic import List
# from Kingdee.BOS.App.Data import *
from System.IO import *
from System.Text import *
from System.Net import *
from System.Data import *
# from System import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core import *
from Kingdee.BOS import *
import clr
# 添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
# clr.AddReference('Kingdee.BOS.App')
# clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Newtonsoft.Json')
# 导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
# from System.String import *
# 开启debug调试消息
SHOW_DEBUG = True
# 轻易云集成平台服务器主机
QEASY_HOST = 'https://pro-service.qliang.cloud'
# 集成方案的ID
QEASY_STRATEGY_ID = ['97ac4289-616d-3d7-86a2-760', '97ac4289-66d-39d7-862-70','97a289-616d-3d7-86a2-7e0']
# 操作完成后需要弹出的提示
QEASY_MESSAGE = False
def OnPrepareOperationServiceOption(e):
e.SupportTransaction = True # 是否启动事务,默认true
e.SurportBatchTransaction = True # 是否支持批量处理,默认true
#字段预加载事件,这是一个非常必要使用的事件
#出于性能考虑,服务插件并不会加载单据完整的数据包,只有默认加载单据编号、单据ID等一些关键字段
#在插件中需要读取的其他字段信息,需要在此事件中先加载,方法也很简单。
#如果在后续事件中取单据字段时,报错提示字段标识不存在时,可以看是否在这里进行预加载
def OnPreparePropertys(e):
# e.FieldKeys.Add("字段标识");#这里使用的是字段标识,后面从数据包取值用的是绑定实体属性
# e.FieldKeys.Add("F_ZOHO_ID")
pass
def AfterExecuteOperationTransaction(e):
for STRATEGY_ID in QEASY_STRATEGY_ID:
url = QEASY_HOST + "/v2/open/"+STRATEGY_ID+'/dispatch-source'
HttpPost(url,'')
def HttpPost(Url, Content):
httpRequest = HttpWebRequest.Create(Url)
httpRequest.Method = "POST"
httpRequest.ContentType = "application/json"
httpRequest.Timeout = 1000 * 60 * 10
reqStream = httpRequest.GetRequestStream()
sContent = Content
bytes = Encoding.UTF8.GetBytes(sContent)
reqStream.Write(bytes, 0, bytes.Length)
reqStream.Flush()
repStream = httpRequest.GetResponse().GetResponseStream()
reader = StreamReader(repStream)
return ValidateResult(reader.ReadToEnd())
def ValidateResult(responseText):
s = ('{0}').format(responseText)
# if (s.find("response_error:")>=0):
# failText = s.TrimStart("response_error:".ToCharArray());
return s
可在方案的链接中获取到 QEASY_HOST
和 QEASY_STRATEGY_ID
,以测试方案的链接为例 https://pro.qliang.cloud/strategy/detail/260ccb96-46cc-39d4-b54d-fe67ce6f3fb1#BasicSummary
,其中 https://pro.qliang.cloud
为轻易云的HOST,路径的后半段为方案ID 260ccb96-46cc-39d4-b54d-fe67ce6f3fb1
(注意方案ID不包含网页的定位锚点 #BasicSummary
)
9.功能测试
- 返回金蝶单据,点击保存按钮,对应方案即生成一条请求队列