dingtalk.client.api.bpms 源代码

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import datetime
import time

import six
from dingtalk.client.api.base import DingTalkBaseAPI
from dingtalk.core.utils import to_text
from optionaldict import optionaldict


[文档]class Bpms(DingTalkBaseAPI):
[文档] def process_copy(self, agent_id, process_code, biz_category_id=None, process_name=None, description=None): """ 复制审批流 :param agent_id: 企业微应用标识 :param process_code: 审批流的唯一码 :param biz_category_id: 业务分类标识 :param process_name: 审批流名称 :param description: 审批流描述 :return: """ return self._top_request( 'dingtalk.smartwork.bpms.process.copy', optionaldict({ 'agent_id': agent_id, 'process_code': process_code, 'biz_category_id': biz_category_id, 'process_name': process_name, 'description': description }) )
[文档] def process_sync(self, agent_id, src_process_code, target_process_code, biz_category_id=None, process_name=None): """ 更新审批流 :param agent_id: 企业微应用标识 :param src_process_code: 源审批流的唯一码 :param target_process_code: 目标审批流的唯一码 :param biz_category_id: 业务分类标识 :param process_name: 审批流名称 :return: """ return self._top_request( 'dingtalk.smartwork.bpms.process.sync', optionaldict({ 'agent_id': agent_id, 'src_process_code': src_process_code, 'target_process_code': target_process_code, 'biz_category_id': biz_category_id, 'process_name': process_name }) )
[文档] def processinstance_create( self, process_code, originator_user_id, dept_id, approvers=None, form_component_values=None, agent_id=None, cc_list=(), cc_start=False, cc_finish=False, approvers_v2=None ): """ 发起审批实例 :param process_code: 审批流的唯一码 :param originator_user_id: 审批实例发起人的userid :param dept_id: 发起人所在的部门 :param approvers: 审批人userid列表 :param form_component_values: 审批流表单参数 name: 表单每一栏的名称 value: 表单每一栏的值, ext_value: 扩展值 例:OrderedDict({name1: value1, name2: (value2, ext_value2), name3: (value3, )}) :param agent_id: :param cc_list: 抄送人userid列表 :param cc_start: 开始时抄送 :param cc_finish: 结束时抄送 :param approvers_v2: 审批人列表,支持会签/或签,优先级高于approvers变量 :return: """ cc_position = 'START' if cc_start else '' if cc_finish: if cc_position: cc_position += '_' cc_position += 'FINISH' if isinstance(approvers, (list, tuple, set)): approvers = ','.join(map(to_text, approvers)) form_component_value_list = [] if form_component_values: for name, value in form_component_values.items(): data = {'name': name} if isinstance(value, (list, tuple)): if len(value) > 1: data['ext_value'] = value[1] value = value[0] data['value'] = value form_component_value_list.append(data) return self._top_request( "dingtalk.oapi.processinstance.create", optionaldict({ "process_code": process_code, "originator_user_id": originator_user_id, "dept_id": dept_id, "form_component_values": form_component_value_list, "agent_id": agent_id, "approvers": approvers, "cc_list": cc_list, "cc_position": cc_position, "approvers_v2": approvers_v2 }), result_processor=lambda x: x['process_instance_id'] )
[文档] def processinstance_listids(self, process_code, start_time, end_time, size='10', cursor='0', userid_list=()): """ 分页获取审批实例id列表 企业可以根据审批流的唯一标识,分页获取该审批流对应的审批实例id。只能取到权限范围内的相关部门的审批实例 :param process_code: 流程模板唯一标识,可在oa后台编辑审批表单部分查询 :param start_time: 审批实例开始时间,毫秒级 :param end_time: 审批实例结束时间,毫秒级,默认取当前值 :param size: 分页参数,每页大小,最多传10 :param cursor: 分页查询的游标,最开始传0,后续传返回参数中的next_cursor值 :param userid_list: 发起人用户id列表 """ if isinstance(start_time, (datetime.date, datetime.datetime)): start_time = int(time.mktime(start_time.timetuple()) * 1000) if isinstance(end_time, (datetime.date, datetime.datetime)): end_time = int(time.mktime(end_time.timetuple()) * 1000) if isinstance(userid_list, (list, tuple)): userid_list = ','.join(map(to_text, userid_list)) return self._top_request( "dingtalk.oapi.processinstance.listids", optionaldict({ "process_code": process_code, "start_time": start_time, "end_time": end_time, "size": size, "cursor": cursor, "userid_list": userid_list }) )
[文档] def processinstance_list(self, process_code, start_time, end_time=None, cursor=0, size=10, userid_list=()): """ 获取审批实例列表 :param process_code: 流程模板唯一标识,可在oa后台编辑审批表单部分查询 :param start_time: 审批实例开始时间 :param end_time: 审批实例结束时间,默认取当前值 :param cursor: 每页大小,最多传10 :param size: 分页查询的游标,最开始传0,后续传返回参数中的next_cursor值 :param userid_list: 发起人用户id列表 :return: """ userid_list = ','.join(map(to_text, userid_list)) if isinstance(start_time, (datetime.date, datetime.datetime)): start_time = int(time.mktime(start_time.timetuple()) * 1000) if isinstance(end_time, (datetime.date, datetime.datetime)): end_time = int(time.mktime(end_time.timetuple()) * 1000) assert isinstance(start_time, six.integer_types) assert end_time is None or isinstance(end_time, six.integer_types) return self._top_request( 'dingtalk.smartwork.bpms.processinstance.list', optionaldict({ 'process_code': process_code, 'start_time': start_time, 'end_time': end_time, 'cursor': cursor, 'size': size, 'userid_list': userid_list }) )
[文档] def processinstance_get(self, process_instance_id): """ 获取单个审批实例详情 :param process_instance_id: 审批实例id :return: """ return self._top_request( 'dingtalk.smartwork.bpms.processinstance.get', {'process_instance_id': process_instance_id}, result_processor=lambda x: x['process_instance'] )
[文档] def dingtalk_oapi_process_gettodonum(self, userid): """ 获取待我审批数量 获取用户待审批数量 :param userid: 用户id """ return self._top_request( "dingtalk.oapi.process.gettodonum", {"userid": userid} )
[文档] def process_listbyuserid(self, userid, offset=0, size=100): """ 根据用户id获取可见审批模板列表 :param userid: 用户id :param offset: 分页游标,从0开始。根据返回结果中next_cursor是否为空判断是否有下一页,且再次调用offset设置成next_cursor的值 :param size: 分页大小,最大可设置成100 :return: """ return self._top_request( 'dingtalk.oapi.process.listbyuserid', { 'userid': userid, 'offset': offset, 'size': size } )
[文档] def process_instance_terminate(self, process_instance_id, remark="", is_system=True, operating_userid=""): """ 调用本接口通过实例id终止当前企业下发起的审批实例。 终止审批实例后,审批状态为“已撤销”。 :param process_instance_id: 审批实例ID :param remark: 终止说明 :param is_system: 是否通过系统操作:true:由系统直接终止false:由指定的操作者终止 :param operating_userid: 操作人的userid, 当is_system为false时,该参数必传 :return: """ return self._top_request( "dingtalk.oapi.process.instance.terminate", { "request": { "process_instance_id": process_instance_id, "remark": remark, "is_system": is_system, "operating_userid": operating_userid } } )