一、业务场景
1、本公司物料编码来源于PDM系统(神州数码),并调用金蝶云星空API接口导入物料和调用审核接口。
2、本公司PDM导入的物料会在,云星空新增字段上写入标识,代表本物料将导入到那个组织。
3、由于公司体量比较大显然人工分配已经已经不现实并且耗时得不偿失。
二、方案选择
根据公司的需求现衍生出两个可行性发难分别是:
1、云星空的自动分配方案
2、开发插件实现自动分配方案
三、实施方法选择
根据上面的发难我选择后者,因为插件分配是实时而云星空自带的是定时执行,定时执行容易影响业务。容易发生不必要的错误。
四、实施方法
1、登录BOS平台
2、进入BOS打开基础资料——》选择物料并双击打开
3、点开操作列表——》选择审核操作
4、选择服务控制——》服务插件——》注册python脚本
5、编写二开审核自动分配脚本
6、如保存提示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 *
#重载cloud插件模型的主菜单按钮点击事件
def OnPreparePropertys(e):
e.FieldKeys.Add("FCreateOrgId");
e.FieldKeys.Add("FUseOrgId");
def EndOperationTransaction(e):
appId="206689_XZ9I1ZCL0kl+xfxL473NSa";
appSecret="5411be2fc75c476f99cb098b0";
url='http://127.0.0.1/k3cloud/';
DBId="61cc6e7c5f48d3";
user="Administrator";
loginFlag=0;
for billObj in e.DataEntitys:
billNo = str(billObj["Number"]);
billId=str(billObj["Id"]);
createOrgId=str(billObj["CreateOrgId_Id"]);
userOrgId=str(billObj["UseOrgId_Id"]);
zzdr=str(billObj["F_ora_Text"]); #获取导入组织
if (zzdr<>0):
if(createOrgId<>userOrgId):
continue;
if(loginFlag==0):
loginFlag=1;
client=K3CloudApiClient(url);
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("第三方登录失败!");
if(zzdr=='1B-SH'):
formId=this.BusinessInfo.GetForm().Id;
obj="{'PkIds':'IDSTR','TOrgIds':'ORGID_STR','IsAutoSubmitAndAudit':'true'}";
sql = ("""select org.FORGID
from T_ORG_ORGANIZATIONS org
left join T_BD_CUSTOMER m on org.FORGID=m.FUSEORGID and m.FNUMBER='{0}'
where m.FNUMBER is null and org.FNUMBER in ('1B01')""").format(billNo);
ds = DBServiceHelper.ExecuteDataSet(this.Context,sql);
AllRows=ds.Tables[0].Rows;
if(AllRows.Count<=0):
continue;
orgList=List[str]();
for r in AllRows:
orgId=str(r["FORGID"]);
orgList.Add(orgId);
orgIds=",".join(orgList.ToArray());
data=obj.Replace("IDSTR",billId).Replace("ORGID_STR",orgIds);
#raise Exception(data);
allocateR=client.Allocate(formId,data);
if (zzdr=='1B-SZ'):
formId = this.BusinessInfo.GetForm().Id;
obj = "{'PkIds':'IDSTR','TOrgIds':'ORGID_STR','IsAutoSubmitAndAudit':'true'}";
sql = ("""select org.FORGID
from T_ORG_ORGANIZATIONS org
left join T_BD_CUSTOMER m on org.FORGID=m.FUSEORGID and m.FNUMBER='{0}'
where m.FNUMBER is null and org.FNUMBER in ('1B02')""").format(billNo);
dY = DBServiceHelper.ExecuteDataSet(this.Context, sql);
AllRows = dY.Tables[0].Rows;
if (AllRows.Count <= 0):
continue;
orgList = List[str]();
for r in AllRows:
orgId = str(r["FORGID"]);
orgList.Add(orgId);
orgIds = ",".join(orgList.ToArray());
data = obj.Replace("IDSTR", billId).Replace("ORGID_STR", orgIds);
# raise Exception(data);
allocateR = client.Allocate(formId, data);
else:
this.View.ShowMessage("没事设置指定的导入组织"+zzdr)