用python写的k3cloud的webapi接口类

# coding = utf-8
# By TangRuCheng 2020-12-02
import json
import logging, time, os
import requests
from configparser import ConfigParser
# 格式化日志
log_format = '%(levelname)s %(asctime)s %(message)s'
date_format = '%Y-%m-%d %H:%M:%S'
date = time.strftime('%Y-%m-%d', time.localtime())
file_name = rf'log\{date}.log'
if 'log' not in os.listdir():
os.mkdir('log')
else:
logging.basicConfig(level=logging.INFO,
format=log_format,
datefmt=date_format,
filename=file_name)
class K3CloudWebAPI(object):
def __init__(self):
#读取数据中心的配置参数
config = ConfigParser()
config.read('config.ini')
self.server_ip = config['k3cloud_server']['server_ip']
self. acctid = config['k3cloud_server']['acctid']
self.username = config['k3cloud_server']['username']
self.password = config['k3cloud_server']['password']
self.lcid = config['k3cloud_server']['lcid']
# 构建登录请求参数
login_url = f'http://{self.server_ip}/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc'
login_data = {
'acctId': self.acctid,
'username': self.username,
'password': self.password,
'lcid': self.lcid
}
# 登录k3cloud,并返回cookies;登录超时设置为1分钟
login_response = requests.post(url=login_url, data=login_data, timeout=1000*60*1)
login_text = json.loads(login_response.text)
self.cookies = login_response.cookies
# 判断登录状态
if login_text['IsSuccessByAPI'] is True:
self.login_result = '登录成功'
logging.info('登录成功') # 记录登录日志
else:
self.login_result = '登录失败'
logging.warning(login_text) # 记录登录日志
def query(self, form_id, field_keys='', filter_strings='', order_string='', start_row=0, limit=0):
"""
查询单据
:param form_id:业务对象表单Id(必录)
:param field_keys:需查询的字段key集合,字符串类型,格式:"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如:FEntryKey_FEntryId)
:param filter_strings:过滤条件,字符串类型(非必录),内容格式参照sql语法的where子句
:param order_string:排序字段,字符串类型(非必录),内容格式参照sql语法的order子句
:param start_row:开始行索引,整型(非必录)
:param limit:最大行数,整型,不能超过2000(非必录)
:return:返回结果单据数据
"""
# 构建查询请求的参数
query_url = f'http://{self.server_ip}/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc'
data = json.dumps({
'FormId': form_id,
'FieldKeys': field_keys,
'FilterString': filter_strings,
'OrderString': order_string,
'StartRow': start_row,
'Limit': limit
}) # 编码json对象
post_data = {'data': data}
# 查询数据,并返回查询结果
query_response = json.loads(requests.post(url=query_url, data=post_data, cookies=self.cookies).text)
return query_response
def save(self, form_id, bill_head, body_name='', body_data=[{}], need_return_fields=[],
is_delete_entry=False, interation_flags='', is_auto_adjust_field=True, is_auto_submit_and_audit=True, is_draft=False):
"""
1、开发接口过程中先构建表头;然后指定表体名称,构建表体数据;然后调用该方法,就可以保存数据
2、如果是修改数据,那么body_data明细行数据里的字段指定下行内码
:param form_id:业务对象表单Id
:param bill_head:表头名称
:param body_name:表体名称
:param body_data:表体明细行数据
:param need_return_fields:需返回结果的字段集合,数组类型,格式:[key,entitykey.key,...](非必录) 注(返回单据体字段格式:entitykey.key)
:param is_delete_entry:是否删除已存在的分录,布尔类型,默认True(非必录
:param interation_flags:交互标志集合,字符串类型,分号分隔,格式:"flag1;flag2;..."(非必录) 例如(允许负库存标识:STK_InvCheckResult)
:param is_auto_adjust_field: 是否自动调整JSON字段顺序,设置成True
:param is_auto_submit_and_audit:是否自动提交、审核,这里传值默认是True
:param is_draft:是否暂存,用于判断接口地址
:return:
"""
# 默认是保存接口地址,如果is_Draft为True则为暂存接口地址
operate = 'Save'
if is_draft:
operate = 'Draft'
save_url = f'http://{self.server_ip}/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.{operate}.common.kdsvc' # 默认是保存接口地址,Draft是暂存
# 构建表单数据
model = bill_head # 先赋值给Model
model.update({body_name: body_data})
data = json.dumps({
'NeedReturnFields': need_return_fields,
'IsDeleteEntry': is_delete_entry,
'InterationFlags': interation_flags,
'IsAutoAdjustField': is_auto_adjust_field,
'IsAutoSubmitAndAudit': is_auto_submit_and_audit,
用python写的k3cloud的webapi接口类
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



