python API自动分配基础资料

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

python  API自动分配基础资料

​自从看到周老的python文章,就有了灵感,可以不断实现新的想法。本次代码是根据周老的[Python服务插件借助WebAPI实现基础资料审核后自动分配 (kingdee.com)](Python服务插件借助WebAPI实现基础资料审核后自动分配 (kingdee.com))改写的。 以下代码可以实现:在客户、供应商、银行自动分配到指定的组织。 方法: # 1.在BOS里添加基础资料字段F_PAEZ_BASEorg1、F_PAEZ_BASEorg2(关联组织架构) ![image.webp](/download/01005db7318816474b85a3267eeda829d3fa.webp) # 2. 在BOS->批量编辑字段->表单插件 ->注册python ![image.webp](/download/01005b938cf3daaa4b7fbe3a99721c477b80.webp) # 3.appId、appSecret信息。需要用administrator 在第三方授权登录 添加 # 4.obj="{'PkIds':'IDSTR','TOrgIds':'ORGID_STR','IsAutoSubmitAndAudit':'true'}" 如果不确定值IDSTR、TOrgIds的值,通过web在线测试 PkIds:sql的表的数据FMASTERID,TOrgIds 需要分配组织ID { 'PkIds': '127314', 'TOrgIds': '100005', 'IsAutoSubmitAndAudit': 'true' } # 5.python代码 #引入clr运行库 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('Kingdee.BOS.ServiceHelper') clr.AddReference('Kingdee.BOS.WebApi.Client') clr.AddReference('Newtonsoft.Json') #导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入) from Kingdee.BOS import * from Kingdee.BOS.Core import * from Kingdee.BOS.Core.Bill import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import * from System import * from System.Data import * from Kingdee.BOS.App.Data import * from System.Collections.Generic import List from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.WebApi.Client import * from Newtonsoft.Json.Linq import * # 全局变量需要修改的参数 appId="text"; #需要修改 appSecret="a7f4558baad542a6b3fa5bb77b7adf33";#需要修改 url='http://127.0.0.1/k3cloud/';#需要修改成域名 user="demo";#需要修改 DBId=this.Context.DBId; client=K3CloudApiClient(url); #公共参数必备 billObj=this.View.Model.DataObject;#单据头的数据包,即单据的数据包,DynamicObject类型,可进一步解析 #this.View.ShowMessage(iResult) #raise Exception(allocateR) # 初始加载的函数 def init(): if login()==1 and org()==0:#判定有是否可以登录,并且org有数据 org1 = billObj["F_PAEZ_BASEorg1"] #需要分配的组织1 if org1!=None: allfenpei(org1) org2 = billObj["F_PAEZ_BASEorg2"] #需要分配的组织2 if org2!=None: allfenpei(org2) #附件到进程函数,正式使用的时候,注释掉 def BarItemClick(e): init() # API登录 def login(): loginFlag=0; if(loginFlag==0): loginFlag=1; loginResult=client.LoginByAppSecret(DBId,user,appId,appSecret,2052); loginResultObj=JObject.Parse(loginResult); iResult=("{0}").format(loginResultObj["LoginResultType"]); if(iResult!="1" and iResult!="-5"): raise Exception("第三方登录失败!"); return loginFlag # 判定创建组织和使用组织是同一个 def org(): result=0 #初始加载值 billId=str(billObj["Id"]); #userOrgId=this.Context.CurrentOrganizationInfo.ID;#当前组织Id createOrgId=str(billObj["CreateOrgId_Id"]); userOrgId=str(billObj["UseOrgId_Id"]); if(createOrgId!=userOrgId): result=1 return result # 分配函数 def allfenpei(orgObj): formId=this.View.BillBusinessInfo.GetForm().Id;#单据FormId orgnum(orgObj) #orgIds=str("100004") orgIds=str(orgnum(orgObj)) #this.View.ShowMessage(billId) #raise Exception(data) billId=str(billObj["Id"]);#单据内码,新建未保存是0 if billId!="0":#如果是0分配会报错,还有0是str形式要添加引号 #this.View.ShowMessage(billId) obj="{'PkIds':'IDSTR','TOrgIds':'ORGID_STR','IsAutoSubmitAndAudit':'true'}"#需要分配的参数,不能变更,通过data替换变更个 data=obj.Replace("IDSTR",billId).Replace("ORGID_STR",orgIds); #替换操作 #raise Exception(data)#结果弹出 allocateR=client.Allocate(formId,data)#分配 #raise Exception(allocateR)#结果弹出 # 组织编码获取 def orgnum(orgObj): orgNum=("{0}").format(orgObj["id"]) return orgNum # 审核后触发 def AfterDoOperation(e): opCode=e.Operation.Operation.ToUpperInvariant();#触发操作代码大写,例如保存:SAVE if(opCode=="AUDIT"): init() e.Cancel=True;#可以取消触发操作

proapi20220912.zip


厉害


好东西 先点赞收藏 !


学以致用,发挥出Python插件开发优势,复制+简单修改,举一反三!

python API自动分配基础资料

​自从看到周老的python文章,就有了灵感,可以不断实现新的想法。本次代码是根据周老的[Python服务插件借助WebAPI实现基础资料审核后...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息