关于python,通过webapi生成工序转移单原创
62人赞赏了该文章
710次浏览
编辑于2023年07月18日 11:37:40
二开案例.WEBAPI.使用WEBAPI生成工序转移单 (kingdee.com)
二开案例.WEBAPI.使用WEBAPI工序计划下推生成工序汇报 (kingdee.com)
C#代码链接
Python代码,这是工序转移单的,工序汇报单的同理。
ret = client.Execute[str]("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser", my_array,None,10)
特殊点在这里,C# 中Execute 这个函数是有重载的但是 分别是前两个参数 和 四个参数,但是四个参数的里面后面两个参数是有默认值的。这样可能就导致了IronPython中如果不写后面两个参数就会导致不知道调用哪个重载的问题。所以这里直接指定4个参数的,并且填写上默认值。(备注:Python本身是不支持函数重载的。另类的重载方式为使用*args和**kwargs来实现)。
import clr
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.BOS.WebApi.Client')
clr.AddReference('Newtonsoft.Json')
from System import *
from System.Data import *
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.Metadata.EntityElement import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.WebApi.Client import *
from Newtonsoft.Json.Linq import *
def EndOperationTransaction(e):
url = 'http://127.0.0.1//k3cloud/' # 由于是通过插件调用,所以写的本机IP,如有自定义端口号,自行修改
DBId = this.Context.DBId
user = "xxxxxx" # 默认管理员登录,分配后的基础资料显示的创建人会是administrator
psw = "xxxxxxxx"
client = ApiClient(url)
my_array = Array[object]([DBId,user,psw,2052])
ret = client.Execute[str]("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser", my_array,None,10)
LoginResultType = JObject.Parse(ret)["LoginResultType"]
if LoginResultType == 1:
# 这里获取单据数据包方式和前面一样
for billObj in e.DataEntitys:
billId = billObj["Id"] # 单据ID
billNo = billObj["BillNo"] # 单据编号
sql = str.format(""" Select * from PNOU_t_Cust_Entry100002 where FID = {0} """, billId)
obj = DBUtils.ExecuteDynamicObject(this.Context, sql)
if obj is not None and len(obj) > 0:
for rowObj in obj:
insert_str = """{
"IsAutoAudit": "true",
"Datas": [
{
"TransOutDetailId": 101023,
"TransInDetailId": 101024,
"ConvertRules": 0,
"TransDetailInfo": [
{
"InEmpId": 0,
"OutEmpId": 0,
"InSupplierId": 0,
"PriceListId": 0,
"IsDefaultPriceValue": 0,
"SendQualifiedTaxPrice": 0,
"SendProFailTaxPrice": 0,
"SendMatFailTaxPrice": 0,
"SendTaxRate": 0,
"OperTransferQty": 1,
"OperQualifiedQty": 1,
"OperProFailQty": 0,
"OperMatFailQty": 0,
"OperPreReworkQty": 0
}
]
}
]
}"""
insertJson = JObject.Parse(insert_str)
insertJson["Datas"][0]["TransOutDetailId"] = rowObj["FPREVIOUSDETAILID"]
insertJson["Datas"][0]["TransInDetailId"] = rowObj["FDETAILID"]
if rowObj["FPREVIOUSDETAILID"] == 0:
insertJson["Datas"][0]["ConvertRules"] = 1
else:
insertJson["Datas"][0]["ConvertRules"] = 0
ret = client.Execute[str]("Kingdee.K3.MFG.WebApi.ServicesStub.OptPlanOptTransApiService.OptPlanningPushTrans,Kingdee.K3.MFG.WebApi.ServicesStub", Array[object]([insertJson]), None, 10)
retObj = JObject.Parse(ret)
if not str(retObj["IsSuccess"]) == "true":
result=OperateResult()
result.SuccessStatus=False
result.PKValue = str(billId)
result.Number = str(billNo)
result.RowIndex = rowObj["FSeq"]
result.Message = str(retObj["Message"])
this.OperationResult.OperateResult.Add(result);
else:
FBillNo = retObj["Message"][0]["FBillNo"].ToString()
updateSql = """ update PNOU_t_Cust_Entry100002 set F_B_BILLNO = '{0}' where FENTRYID = {1} """.format(FBillNo, rowObj["FENTRYID"])
DBUtils.Execute(this.Context, updateSql)
else:
raise Exception("登录失败")
推荐阅读