python与云星空Web API原创
16人赞赏了该文章
4,504次浏览
编辑于2020年10月22日 18:45:56
摘要由AI智能服务提供
文本介绍了使用Python进行数据迁移,特别是从WISE迁移到云星空(可能是金蝶云星空系统)的过程中,通过Web API实现自动化操作,包括登录、查询、反审核、删除单据等。作者编写了一个Python类`CloudClient`,通过该类执行各种API操作,并利用requests库发送HTTP请求。文中还提供了一个函数`BaseUnAuditAndDelete`,用于查询特定条件的单据,反审核后删除它们,并通过示例展示了如何调用这个函数来处理不同类型的业务对象。整个过程涉及到了API的URL构造、登录认证、数据处理和发送请求等步骤。
有用
反馈
大家都知道,云星空是支持Web API的。在云社区搜查 Python 、API 两个关键词,就会出现相应的显示如下。
感谢Cand,给我们提供了这么好的内容。
我这段时间是做数据迁移的,把WISE数据迁移到云星空。迁完是已审核状态的,有时候想删除整个业务对象的单据,要进去业务对象,然后反审核,然后删除。我觉得有点慢,所以就用Python来执行这些动作了,用Python写代码,的确是人生苦短,我用python。
代码如下,可以与上面的帖子进行对比验证,Python版本是3.7.5
import requests import json acctid="" #数据中心 username="" #你的账号 password="" #账号密码 IP=r"" #登录网址 #构造一个类,可以在类中执行登录、保存、查看等操作,cookies就可以共享了,不用重复登录了。 class CloudClient(): cookies =requests.cookies #headers可以模拟任意浏览器的登录 #使用raw string,不用考虑转义 headers = { "referer": r"https://kdsrvc.opstest.ik3cloud.com/k3cloud/html5/content/themes/kdcss.standard.min.css?ver=7.5.1658.5", "user-agent": r"Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/74.0.3729.169 Safari / 537.36" } IP = r"" #绑定执行方法, dict_method = {"Login":r"Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc", "Save":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc", "View":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc", "Submit":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc", "Audit":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc", "UnAudit":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.UnAudit.common.kdsvc", "StatusConvert":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.StatusConvert.common.kdsvc", "ExecuteBillQuery":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc", "BatchSave":r"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc", "Delete":"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete.common.kdsvc" } #防止用户最后输入了/,如有,就去掉 def setIp(self,IP): if IP[-1]==r'/': IP=IP[:-1] self.IP= IP def login(self,acctid,username,password,lcid=2052): cookies = None #写入登录信息 login_data = {"acctid": acctid, "username": username, "password": password, "lcid": lcid} # 获得执行url login_url = self.IP +r'/'+ self.dict_method["Login"] login_response = requests.post(url=login_url,headers=self.headers , data=login_data) self.cookies = login_response.cookies #methodName说明是执行什么操作 def method(self,methodName,post_data): url = self.IP + r'/' + self.dict_method[methodName] response = requests.post(url=url, data=post_data,cookies=self.cookies,headers=self.headers) return response #该函数先查询单据内码,然后反审这些单据,然后删除。 #FormId是业务对象的FormId #FieldKey是内码标识,由不同的业务对象确定 #FilterString是过滤条件 #该函数把这个删除抽象成只需要输入3个字符串了 def BaseUnAuditAndDelete(FormId,FieldKey,FilterString): Cloudclient = CloudClient() Cloudclient.setIp(IP) Cloudclient.login(acctid, username, password) # 通过单据查询,获得FID列表 BillQuery_data = { "data": json.dumps({"FormId": FormId, "FieldKeys": FieldKey, "FilterString": FilterString}) } response = Cloudclient.method("ExecuteBillQuery", BillQuery_data) #操作成功的话,list_FId是列表类型,json.loads来解析 list_FId = json.loads(response.text) print("Query:"+str(list_FId)) #把列表转换为字符串,去掉最后的 ,号 str_Fid = "" for Fid in list_FId: str_Fid = str_Fid + "," + str(Fid[0]) str_Fid = str_Fid[1:] # 通过得FID列表,反审单据 UnAudit_data = {"FormId": FormId, "Data": json.dumps({"Ids": str_Fid})} response = Cloudclient.method("UnAudit", UnAudit_data) # 通过得FID列表,删除单据 Delete_data = { "FormId": FormId, "Data": json.dumps({"Ids": str_Fid}) } response = Cloudclient.method("Delete", Delete_data) print(Delete_data) #输出最后的信息 print(json.dumps(response.text).encode("utf-8").decode("unicode_escape")) if __name__=="__main__": dict_Form ={} dict_Form["BM"] = {"FormId":"BD_Department","FieldKey":"FDEPTID","FilterString":""} dict_Form["JLDW"] = {"FormId": "BD_UNIT", "FieldKey": "FUNITID", "FilterString": "FIsSystemSet=0"} dict_Form["JLDWZ"] = {"FormId": "BD_UNITGROUP", "FieldKey": "FUNITGROUPID", "FilterString": "FIsSystemSet=0"} dict_Form["YG"] = {"FormId": "BD_Empinfo", "FieldKey": "FMasterId", "FilterString": ""} dict_Form["BDFS"] = {"FormId": "FA_ALTERMODE", "FieldKey": "FID", "FilterString": "FIsSysPreset=0"} dict_Form["JSFS"] = {"FormId": "BD_SETTLETYPE", "FieldKey": "FID", "FilterString": "FIsSysPreset=0"} #如果在列表中添加其他Key,那就可以自动删除多个业务对的单据了。 for key in ["JLDW"]: Exe = dict_Form[key] BaseUnAuditAndDelete(Exe["FormId"],Exe["FieldKey"],Exe["FilterString"])
赞 16
16人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读