电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

用python写的k3cloud的webapi接口类

来源:金蝶云社区作者:金蝶2024-09-165

用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接口类

# coding = utf-8# By TangRuCheng 2020-12-02import jsonimport logging, time, osimport requestsfrom configparser import...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信