华为云用户手册

  • 数据从OA同步到ERP 整体设计流程: 详细设计图: 图1 如上图,数据从OA同步到ERP具体方案如下: 使用之前已经建好的B1(servicelayer)连接器,在连接器中创建一个执行动作,封装创建单据的统一接口; 创建一条api流,用于接受OA审批完成后外发的数据; 将OA外发的数据结构转换成B1创建单据接口所需的数据结构; 使用B1连接器中创建单据的执行动作在B1创建单据; 将创建成功与失败的信息返回给OA 父主题: 集成方案设计
  • SparkPackERP查询审批流接口 集成工作台-连接器,选择刚创建的SparkPackERP连接器,进入连接器详情页面 选择执行动作-创建执行动作,填写“基本信息”,“请求信息”,“响应信息”: 基本信息填入“执行动作ID”、“执行动作名称”、“描述”信息,如下执行动作名称为“查询审批流”; 请求中,请求方式为GET,请求URL为“/SparkPackERPs/v1/ApprovalRequests”,新增两个查询参数:filter、select,类型为string; 响应中,添加响应码200,以及添加所需响应体中的字段; 保存。 父主题: SparkPackERP和OA的接口封装到集成工作台
  • 登录接口 接口地址 https:/api-service.sperp.myhuaweicloud.com/XXX/b1s/v1/Login 接口API功能描述 登录service layer 调用方式 Post 接口备注 返回参数中的SessionId会使用在后续流程接口的请求头中 请求体参数 参数名称 参数描述 参数类型 参数说明 CompanyDB 账套数据库 String 登录的SAP账套库名 UserName 用户名 String 登录使用的账号 Password 用户密码 String 登录使用的账号密码 请求样例: { "CompanyDB": "SBODEMOCN ", "UserName": "xxxxx", "Password": "XXXX", "language": 15 } 返回参数 参数名称 上级参数 参数描述 参数类型 参数说明 SessionId 会话标识 String 在后续流程接口的请求头中的cookie里使用,成功时返回 Version SAP版本号 String 成功时返回 SessionTimeout SessionId时间限制 Int 默认30分钟,成功时返回 error 失败信息 List 失败时返回 code error 错误代码 Int SAP错误代码,失败时返回 message error 错误信息 List 失败时返回 value message 错误详情 String SAP错误消息,失败时返回 返回样例: { "odata.metadata": "https://api-service.sperp.myhuaweicloud.com/6160/b1s/v1/$metadata#B1Sessions/@Element", "SessionId": "ac79876e-1e72-11ed-8000-000c299130e0", "Version": "1000190", "SessionTimeout": 30 } 父主题: B1(servicelayer)接口
  • 创建销售交货 接口地址↵ https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/DeliveryNotes↵ 接口API功能描述↵ 创建销售交货 调用方式↵ POST↵ ↵ 请求头参数↵ 参数名称↵ 参数说明↵ Cookie↵ 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid”↵ ↵ 请求体参数(参考servicelayer接口字段)↵ ↵ 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 创建企业微信标准单据审批回调 集成工作台-我的流-创建流 连接器中选择“手动触发流”,触发事件为“手动触发器触发事件”,添加参数如图所示(参数为总流程传过来的参数): 添加执行动作‘json解析’,参数如图所示(参数为总流程传递): 添加执行动作,选择连接器为创建的OA连接器,执行动作为“获取审批详情”,参数如图所示: 添加执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“微信-SparkPackERP数据转换”,参数如图所示(此步骤使用函数将企业微信数据结构转换成SparkPackERP数据结构,也可以封装一些有关审批信息的需要的字段): 添加执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询审批流列表”,参数如图所示(根据之前的同步到企业微信的草稿单号查到在审批流中的编号): 添加执行动作,执行动作为“条件判断”,参数如图所示(sp_status字段2是同意审批,3是不同意审批): 添加执行动作,执行动作为“更新审批流”,参数如图所示(根据企业微信的审批结果修改SparkPackERP里的审批结果): 添加执行动作,执行动作为“更新草稿单”,参数如图所示: 选择更新草稿单节点可以配置自定义字段,同步相关信息 复制‘更新审批流’与‘更新草稿单’至右侧分支,如图所示: 修改参数Status参数为N 最终API如下图所示: 父主题: 标准单据场景流
  • 应用场景分析 SparkPack ERP(SAP Business One)和泛微OA系统需要互通的场景分为以下3类: (1) 数据从ERP同步到泛微OA,比如物料主数据/客户; (2) 数据从泛微OA同步到ERP,比如销售订单/供应商; (3) 单据从ERP同步到泛微OA进行审批,审批完成后,审批结果从OA发送到ERR,更新单据审批状态,比如采购申请。 父主题: SparkPack(B1)和EcologyOA集成
  • SparkPackERP接口 SparkPackERP认证(Login) 接口地址 /id/SparkPackERPs/v1/Login 接口API功能描述 登录SparkPackERP 调用方式 Post 接口备注 返回参数中的SessionId会使用在后续流程接口的请求头中 请求体参数 参数名称 参数描述 参数类型 参数说明 CompanyDB 账套数据库 String 登录的SparkPackERP账套库名 UserName 用户名 String 登录使用的账号 Password 用户密码 String 登录使用的账号密码 请求样例: { "CompanyDB": "SBODEMOCN ", "UserName": "xxxxx", "Password": "password" } 返回参数 参数名称 上级参数 参数描述 参数类型 参数说明 SessionId 会话标识 String 在后续流程接口的请求头中的cookie里使用,成功时返回 Version SparkPackERP版本号 String 成功时返回 SessionTimeout SessionId时间限制 Int 默认30分钟,成功时返回 error 失败信息 List 失败时返回 code error 错误代码 Int SparkPackERP错误代码,失败时返回 message error 错误信息 List 失败时返回 value message 错误详情 String SparkPackERP错误消息,失败时返回 返回样例: (1)成功样例 { "odata.metadata":"https://api-service.sperp.myhuaweicloud.com/6160/SparkPackERPs/v1/$metadata#SparkPackERPSessions/@Element", "SessionId": "ac79876e-1e72-11ed-8000-000c299130e0", "Version": "1000190", "SessionTimeout": 30 } (2)失败样例 { "error": { "code": 100000027, "message": { "lang": "en-us", "value": "Login failed" } } } 草稿单查询(Drafts) 接口地址 /id/SparkPackERPs/v1/Drafts 接口API功能描述 查询草稿单信息 调用方式 Get 可涵盖范围 采购申请(ID: 1470000113)、库存转储-报废单(ID:67)、库存发货-盘亏单(ID:59)、库存收货-盘盈单(ID:60)等 请求地址参数 参数名称 参数说明 地址示例 () 在地址中加入(单据内部标识)返回指定单据 /id/SparkPackERPs/v1/Drafts(1) filter 筛选条件:“$filter=DocObjectCode eq '各单据ID'” /id/SparkPackERPs/v1/Drafts?$filter=DocObjectCode eq '1470000113' select 返回参数筛选,不包括在值中的单据头参数将不会返回,无法限制行明细参数 /id/SparkPackERPs/v1/ Drafts?$select=DocEntry,DocDate, DocumentLines 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 返回参数(详细字段见Excel字段清单) 参数名称 上级参数 参数描述 参数类型 参数说明 value 返回值 List 指定单张时无此层级 DocEntry value 单据内部标识 Int 单据内部唯一标识 RequriedDate value 必需日期 String 格式为"2022-08-23T00:00:00Z" Requester value 申请人代码 String 申请用户编码 RequesterName value 申请人名称 String 申请用户名称 RequesterDepartment value 部门代码 Int DocumentLines value 行明细 List LineNum DocumentLines 行号 Int ItemCode DocumentLines 物料代码 String ItemDescription DocumentLines 物料描述 String Quantity DocumentLines 数量 Double Price DocumentLines 价格 Double 返回样例 { "value": [ { "DocEntry": 16, "RequriedDate": "2022-08-23T00:00:00Z", "Requester": "A001", "RequesterName": "销售经理:张涛", "DocumentLines": [ { "LineNum": 0, "ItemCode": "11028", "ItemDescription": "聚氯乙烯", "Quantity": 55.0, "Price": 300.0, }, { "LineNum": 1, "ItemCode": "14003", "ItemDescription": "聚丙烯", "Quantity": 11.0, "ShipDate": null, "Price": 33.0 } ] }, { "DocEntry": 17, "RequriedDate": "2022-08-23T00:00:00Z", "Requester": "A002", "RequesterName": "销售经理:王五", "DocumentLines": [ { "LineNum": 0, "ItemCode": "11028", "ItemDescription": "聚氯乙烯", "Quantity": 55.0, "Price": 300.0, }, { "LineNum": 1, "ItemCode": "14003", "ItemDescription": "聚丙烯", "Quantity": 11.0, "ShipDate": null, "Price": 33.0 } ] } ] } 草稿单修改(Drafts) 接口地址 /id/SparkPackERPs/v1/Drafts 接口API功能描述 修改草稿单信息 调用方式 Patch 可涵盖范围 采购申请(ID: 1470000113)、库存转储-报废单(ID:67)、库存发货-盘亏单(ID:59)、库存收货-盘盈单(ID:60)等 请求地址参数 参数名称 参数说明 地址示例 () 在地址中加入(单据内部标识)返回指定单据 /id/SparkPackERPs/v1/Drafts(1) 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 审批流查询(ApprovalRequests) 接口地址 /id/SparkPackERPs/v1/ ApprovalRequests 接口API功能描述 查询审批流信息 调用方式 Get 请求地址参数 参数名称 参数说明 地址示例 () 在地址中加入(审批流唯一标识-Code)返回指定单据 /id/SparkPackERPs/v1/ApprovalRequests (1) filter 筛选条件,采购申请的条件值为“$filter=ObjectType eq '1470000113'” /id/SparkPackERPs/v1/ ApprovalRequests?$filter=ObjectType eq '1470000113' select 返回参数筛选,不包括在值中的单据头参数将不会返回,无法限制行明细参数 /id/SparkPackERPs/v1/ ApprovalRequests?$select=Code,Status 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 返回参数 参数名称 上级参数 参数描述 参数类型 参数说明 value 返回值 List 指定单张时无此层级 Code value 审批流唯一标识 Int 唯一标识 DraftEntry value 关联的草稿标识 Int 关联草稿唯一标识 Status value 审批状态 String arsPending-未决 arSparkPackERPproved-通过 arsNotApproved-驳回 Remarks value 备注 String 返回样例: { "value": [ { "Code": 17, "ObjectType": "1470000113", "Status": "arSparkPackERPproved", "Remarks": null, "DraftEntry": 16 },{ "Code": 18, "ObjectType": "1470000113", "Status": "arSparkPackERPproved", "Remarks": null, "DraftEntry": 17 } ] } 草稿单审批(ApprovalRequests) 接口地址 /id/SparkPackERPs/v1/ApprovalRequests(x) 接口API功能描述 发送审批流审批结果 调用方式 patch 请求地址参数 参数名称 参数说明 地址示例 () 在地址中加入(审批流唯一标识-Code)审批指定单据 /id/SparkPackERPs/v1/ApprovalRequests (1) 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 请求体参数 参数名称 上级参数 参数描述 参数类型 参数说明 ApprovalRequestDecisions 审批决定 List Status ApprovalRequestDecisions 审批状态 String arsPending-未决 arSparkPackERPproved-通过 arsNotApproved-驳回 Remarks ApprovalRequestDecisions 备注 String 请求样例: { "ApprovalRequestDecisions": [ { "Remarks":"Approved", "Status":"ardApproved" } ] } 返回参数 参数名称 上级参数 参数描述 参数类型 参数说明 error 失败信息 List 失败时返回,成功返回空值 code error 错误代码 Int SparkPackERP错误代码,失败时返回 message error 错误信息 List 失败时返回 value message 错误详情 String SparkPackERP错误消息,失败时返回 返回样例: { "error": { "code": 206, "message": { "lang": "en-us", "value": "Bad patch content." } } } 单据查询({objType}) 接口地址 /id/SparkPackERPs/v1/{objType} 接口API功能描述 查询单据信息,可以由实施人员配置选择哪种单据 调用方式 Get 可涵盖范围 采购申请(ID: 1470000113)、库存转储-报废单(ID:67)、库存发货-盘亏单(ID:59)、库存收货-盘盈单(ID:60)等 请求地址参数 参数名称 参数说明 地址示例 {objType} () 在地址中加入单据类型(单据内部标识)返回指定单据 /id/SparkPackERPs/v1/PurchaseRequests (1) filter 筛选条件:“$filter= U_SyncStatus eq 'N'” /id/SparkPackERPs/v1/PurchaseRequests?$filter=U_SyncStatus eq 'N' select 返回参数筛选,不包括在值中的单据头参数将不会返回,无法限制行明细参数 /id/SparkPackERPs/v1/PurchaseRequests?$select=DocEntry,DocDate, DocumentLines 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 返回参数(详细字段见Excel字段清单) 参数名称 上级参数 参数描述 参数类型 参数说明 value 返回值 List 指定单张时无此层级 DocEntry value 单据内部标识 Int 单据内部唯一标识 RequriedDate value 必需日期 String 格式为"2022-08-23T00:00:00Z" Requester value 申请人代码 String 申请用户编码 RequesterName value 申请人名称 String 申请用户名称 RequesterDepartment value 部门代码 Int DocumentLines value 行明细 List LineNum DocumentLines 行号 Int ItemCode DocumentLines 物料代码 String ItemDescription DocumentLines 物料描述 String Quantity DocumentLines 数量 Double Price DocumentLines 价格 Double 返回样例 { "value": [ { "DocEntry": 16, "RequriedDate": "2022-08-23T00:00:00Z", "Requester": "A001", "RequesterName": "销售经理:张涛", "DocumentLines": [ { "LineNum": 0, "ItemCode": "11028", "ItemDescription": "聚氯乙烯", "Quantity": 55.0, "Price": 300.0, }, { "LineNum": 1, "ItemCode": "14003", "ItemDescription": "聚丙烯", "Quantity": 11.0, "ShipDate": null, "Price": 33.0 } ] }, { "DocEntry": 17, "RequriedDate": "2022-08-23T00:00:00Z", "Requester": "A002", "RequesterName": "销售经理:王五", "DocumentLines": [ { "LineNum": 0, "ItemCode": "11028", "ItemDescription": "聚氯乙烯", "Quantity": 55.0, "Price": 300.0, }, { "LineNum": 1, "ItemCode": "14003", "ItemDescription": "聚丙烯", "Quantity": 11.0, "ShipDate": null, "Price": 33.0 } ] } ] } 单据修改({objType}) 接口地址 /id/SparkPackERPs/v1/{objType} 接口API功能描述 修改单据信息 调用方式 Patch 可涵盖范围 采购申请(ID: 1470000113)、库存转储-报废单(ID:67)、库存发货-盘亏单(ID:59)、库存收货-盘盈单(ID:60)等 请求地址参数 参数名称 参数说明 地址示例 {objType} () 在地址中加入(单据内部标识)返回指定单据 /id/SparkPackERPs/v1/PurchaseRequests (1) 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 查询用户信息(Users) 接口地址 /id/SparkPackERPs/v1/ Users 接口API功能描述 查询用户的详细信息 调用方式 Get 请求地址参数 参数名称 参数说明 地址示例 () 在地址中加入(用户标识)返回指定用户 /id/SparkPackERPs/v1/ Users (1) 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为“SparkPackERPSESSION=获取的sessionid” 父主题: 依赖接口清单描述
  • 登录接口 表1 接口地址 https://api-service.sperp.myhuaweicloud.com/diapi/XXXX/b1dis/v1/login 接口功能描述 登录diapi,获取认证信息 请求方式 POST 请求体参数: 参数名称 参数描述 参数类型 CompanyDB 账套名称 字符串 UserName 用户名 字符串 Password 用户密码 字符串 请求样例: { "CompanyDB": "CSFZ", "Password": "CSFZ12", "UserName": "S-ERP\\CSFZ0431021" } 响应体样例: { "code": "RIS.10000000", "message": "OK", "data": { "SessionTimeout": "30m" }, "timestamp": "2023-10-23T06:37:35.773+00:00" } 认证信息在在响应的Cookie中 父主题: diapi接口
  • 企业微信获取审批模板详情接口 集成工作台-连接器,选择刚创建的OA连接器,进入连接器详情页面 选择执行动作-创建执行动作,填写“基本信息”,“请求信息”,“响应信息”: 基本信息中执行动作名称为“获取审批模板详情”; 请求信息中,请求方式为POST,请求URL为/cgi-bin/oa/gettemplatedetail,请求体中添加创建流程所需结构: 响应体Json结构配置如下: 保存。 父主题: SparkPackERP和OA的接口封装到集成工作台
  • 泛微OA接口 接口清单: 应用场景 接口名称 请求方式 接口URL 数据从ERP同步到OA流程 创建/修改基础数据 POST /api/cube/restful/interface/saveOrUpdateModeData/{method} 注: method是一个参数,表示不同的数据 单据审批流程 创建流程 POST /api/workflow/paService/doCreateRequest 数据从OA同步到ERP 数据外发 POST 由集成工作台确定 单据审批回调 审批结果外发 POST 由集成工作台确定 具体参考泛微OA接口说明: 泛微在线文档 (e-cloudstore.com) 父主题: 依赖接口清单描述
  • 企业微信OA接口 获取access_token 获取access_token - 文档 - 企业微信开发者中心 (qq.com) 获取审批模板详情 获取审批模板详情 - 文档 - 企业微信开发者中心 (qq.com) 提交审批申请 提交审批申请 - 文档 - 企业微信开发者中心 (qq.com) 获取审批申请详情 获取审批申请详情 - 文档 - 企业微信开发者中心 (qq.com) 审批申请状态变化回调通知 审批申请状态变化回调通知 - 文档 - 企业微信开发者中心 (qq.com) 父主题: 依赖接口清单描述
  • 创建servicelayer连接器 新建SAPLogin函数用于自定义认证,函数配置如下: 函数代码如下: # -*- coding:utf-8 -*- import json import base64 import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) """" mssiAuthData参数样例 { "header":{}, // 连接器认证header参数 "path": {}, // 连接器认证path参数 "query":{}, // 连接器认证query参数 "body":{}, // 连接器认证body参数 "host":"https://demo.com // API主机地址 } """ def login(body, mssiAuthData): url = mssiAuthData.get("host") + "/b1s/v1/Login" headers = {'Content-Type': 'application/json'} if body.get("Language"): data = { "CompanyDB": body["CompanyDB"], "UserName": body["UserName"], "Password": body["Password"], "Language": int(body["Language"]) } else: data = { "CompanyDB": body["CompanyDB"], "UserName": body["UserName"], "Password": body["Password"], } session = requests.Session() session.post(url, json=data, headers=headers, verify=False) _cookies = [] for k, v in session.cookies.get_dict().items(): _cookies.append(k + "=" + v) return {'Cookie': ';'.join(_cookies)} def extractRequestParam(rawValue, encoded, defaultValue): if encoded and rawValue: rawValue = str(base64.b64decode(rawValue), "utf-8") return json.loads(rawValue) if rawValue else defaultValue ## 请勿对下面的函数做修改 def handler(event, context): """ 函数是方法的入口 :param event: 执行事件(event), 包含用户定义的函数参数以及所选择的的连接器认证相关参数 :param context: Runtime提供的函数执行上下文 :return: """ isBase64Encoded = event.get('isBase64Encoded', False) inputData = extractRequestParam(event.get('body'), isBase64Encoded, {}) # 用户定义的函数参数数据 mssiAuthData = extractRequestParam(event.get('mssiAuthData'), isBase64Encoded, {}) # 连接器认证数据 mssiAuthData["securityToken"] = context.getToken() dataExtendConfig = extractRequestParam(event.get('dataExtendConfig'), isBase64Encoded, {}) # 流步骤扩展参数 result = login(inputData, mssiAuthData) return json.dumps(result) 新建servicelayer连接器,连接器配置如下,认证函数选择新建的SAPLogin函数: 父主题: 集成实施最佳实践
  • 查询数据方案 整体设计流程: 图1 具体设计方案: 图2 如上图,数据查询具体方案如下: 在集成工作台创建diapi连接器,连接器通过登录接口进行自定义认证; 在diapi连接器中创建执行动作,封装执行sql的接口; 通过diapi登录接口创建连接,连接diapi系统; 在集成工作台创建api流,接受来自条码应用携带sql的请求; 在流中使用diapi连接器中执行sql的执行动作,执行sql查询数据; 将查询的数据按照条码应用所需结构进行封装,返回给条码应用 父主题: 集成方案设计
  • 基于首条流创建其它流 上述相当于配置了第一个ERP基础数据同步到OA的流,默认的配置是物料主数据的配置,利用该模板配置不同的单据,方法如下: 复制该流创建一条新流 流名称根据同步单据名称进行修改,便于识别当前流同步的单据 配置全局配置,选择配置管理,点击"下一步" 修改全局配置: 全局配置各个字段说明如下: 必填配置: objType: B1单据接口对象名,比如物料是Items,客户是BusinessPartners Key: B1单据接口主键字段,比如物料是/ItemCode, 客户是/CardCode(注意"/"不能少) 根据情况可能需要调整的配置: Cyc: 同步周期,表示多长时间同步一次,单位为min,默认值1min operator: OA系统分配的操作人,除开切换OA环境,不需要修改 password:OA系统分配的系统密码,除开切换OA环境,不需要修改 systemid:OA系统分配的系统ID,除开切换OA环境,不需要修改 pagesize:单次同步的数据条数,格式odata.maxpagesize=数值, 默认值20 select:B1接口所需返回字段,默认为空,表示全选 U_ISSYN:B1接口中表示单据是否同步成功的字段名,默认值U_ISSYN,建议都使用默认值 修改完成后,点击下一步,更新 配置查询B1单据的字段 编辑流 选择"查询单据列表"节点,设置 在扩展配置里面如果已经有就选择,如果没有,就创建一个新的,不要使用其它流使用的配置 创建新的配置,先修改配置名称,名称做到见名知意 在"输出参数"中,添加需要同步的B1字段,添加在"Items"下面 添加配置完成后,需要点击配置名称并应用此配置 点击选择"遍历集合元素",重新选择引用 点"×"去掉原来的引用 重新选择该引用 创建"数据转换"节点配置 新建一个"客户数据转换"配置 配置"输入参数", 配置B1字段和OA字段的对应关系 保存配置并应用 重新智能映射 保存流,并开启 父主题: ERP基础数据同步到OA流创建并复用
  • 创建APP应用 API生命周期”-“应用管理”,创建APP应用,如“ecologyOAApp” 为该应用添加AppCode,选择“自动生成”即可 查看并复制AppCode(需要提供给OA, OA外发的接口需要携带: X-Apig-AppCode请求头,并携带该值) 回到应用管理,点击“绑定API”进入应用绑定API页面 绑定API,选择OA对应的API并点击“绑定” 绑定成功后,显示如下: 父主题: API流认证相关设置
  • 企业微信获取审批详情接口 集成工作台-连接器,选择刚创建的OA连接器,进入连接器详情页面 选择执行动作-创建执行动作,填写“基本信息”,“请求信息”,“响应信息”: 基本信息中执行动作名称为“获取审批详情”; 请求信息中,请求方式为POST,请求URL为/cgi-bin/oa/getapprovaldetail,请求体(Body)中添加参数名sp_no: 响应信息中,添加200响应,响应体Json结构配置如下: 保存。 父主题: SparkPackERP和OA的接口封装到集成工作台
  • 创建库存发货 接口地址↵ https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/InventoryGenExits↵ 接口API功能描述↵ 创建库存发货 调用方式↵ POST↵ ↵ 请求头参数↵ 参数名称↵ 参数说明↵ Cookie↵ 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid”↵ ↵ 请求体参数(参考servicelayer接口字段)↵ ↵ 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 创建APP应用 “API生命周期”-“应用管理”,创建APP应用如“条码App” 为该应用添加AppCode,选择“自动生成”即可 查看并复制AppCode(3.6 配置条码系统会用到) 点击“绑定API”进入应用绑定API页面 绑定API,选择条码对应的API并点击“绑定” 绑定成功后,显示如下 AppCode简易认证方式直接使用API网关颁发的AppCode进行身份认证,调用者将AppCode放到请求头中进行身份认证,实现快速调用API能力。 父主题: API流认证相关设置
  • 查询B1对象接口 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/{objType} 接口API功能描述 查询B1对象 调用方式 GET 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” Prefer 可用于设置查询条数,如:odata.maxpagesize=20,表示一次查20条 查询参数 参数名称 参数说明 $filter 筛选条件,可用于筛选B1记录 $select 筛选返回字段 路径参数 参数名称 参数说明 objType 所查询的B1具体对象名 请求体参数:无 响应体参数:(参考servicelayer接口响应字段) 父主题: B1(servicelayer)接口
  • 创建企业微信自定义单据审批回调 集成工作台-我的流-创建流 连接器中选择“手动触发流”,触发事件为“手动触发器触发事件”,添加参数如图所示(参数为总流程传过来的参数): 添加执行动作‘json解析’,参数如图所示(参数为总流程传递): 添加执行动作,选择连接器为创建的OA连接器,执行动作为“获取审批详情”,参数如图所示: 添加执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“微信-SparkPackERP数据转换”,参数如图所示(此步骤使用函数将企业微信数据结构转换成SparkPackERP数据结构,也可以封装一些有关审批信息的需要的字段): 添加执行动作,执行动作为“条件判断”,参数如图所示(sp_status字段2是同意审批,3是不同意审批): 添加执行动作,执行动作为“更新单据”,参数如图所示(单据类型使用全局配置方便顾问配置): 选择更新节点可以配置自定义字段,同步相关审批信息 复制‘更新单据’如图所示: 修改参数U_Status参数为N 最终API如下图所示: 父主题: 自定义单据场景流
  • 创建保存数据业务流 保存数据时,条码应用会向集成工作台发送一个POST请求,请求样例为: { "method": "InventoryGenEntry", "table": "OIGN", "data": [ { "U_SCRKLX": "合格入库", "BaseEntry": "478", "BaseType": "202", "Quantity": "1", "ManBtchNum": "Y", "WarehouseCode": "W05001", "U_FJDSJ": "", "U_FJDRQ": "20230920", "U_FJDNR": "", "U_BGR1": "SF0006", "U_SBXH": "1", "linetable": [ { "Quantity": "1", "BatchNumber": "11007510-01-50|20230920", "BinAbsEntry": "14", "AddmisionDate": "20230920" } ] } ], "MainTable": { "U_CZR": "CS01", "U_CZSJ": "2023-09-20 21:04:44", "DocDate": "20230920", "DocDueDate": "20230920", "U_BFYY1": "", "U_BFYY2": "", "U_BFYY3": "", "U_BFYY4": "", "U_BFYY5": "", "U_BFYY6": "", "U_FGYY1": "", "U_FGYY2": "", "U_FGYY3": "", "U_FGYY4": "", "U_FGYY5": "", "Inverted": "Y", "InvertedSql": "\nSelect T0.\"DocEntry\",T1.\"LineNum\",T1.\"ItemCode\",T2.\"ItemName\",T1.\"BaseQty\",T1.\"wareHouse\" \nFrom OWOR T0 Left Join WOR1 T1 On T0.\"DocEntry\" =T1.\"DocEntry\" \nLeft Join OITM T2 On T1.\"ItemCode\"=T2.\"ItemCode\" \nWhere T2.\"ManBtchNum\"='Y' \n", "InvertedBathSql": "call TMDK('{0}','{1}','{2}')" } } 创建保存子流 创建保存流 父主题: 创建业务流
  • 创建B1对象接口 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/{objType} 接口API功能描述 创建B1对象 调用方式 POST 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 路径参数 参数名称 参数说明 objType 所创建的B1具体对象名 请求体参数:(参考实际servicelayer接口请求字段) 响应体参数:(参考servicelayer接口响应字段) 父主题: B1(servicelayer)接口
  • 创建OA数据同步到ERP业务流 OA数据同步到ERP,是通过OA数据主动外发,集成工作台接受OA发送的请求,所以第一个节点选择"当收到Http请求时",选择请求方式,认证方式。 添加后,API请求url就是OA需要外发的接口地址 可以根据接口格式定义请求的请求参数,该请求体就是OA外发过来的请求体结构 编写一个js代码,对请求参数进行处理,将请求转换成B1接口请求体格式 定义一个变量用于后续判断执行动作是否执行成功 选择B1连接器的"创建单据"执行动作,调用B1创建单据的接口,在B1中创建单据 用一个流程块,来捕获创建单据执行动作调用失败的情况,避免执行失败流程终止 用前面定义的变量标识流程块执行失败 用条件判断执行动作判断单据是否创建成功,并用json构造器构造响应体结构 用"响应"执行动作将json结构封装在响应体内返回 保存 父主题: 创建业务流
  • 创建OA审批结果外发流 在OA系统提交审批时,OA系统将审批结果以接口形式发送到集成工作台,因此第一个节点选择"当收到HTTP请求"时 根据OA外发的接口格式,定义请求体参数,在后续节点可以直接引用 根据发送的requestid查询对应的草稿单,用自定义B1连接器中的查询草稿单列表执行动作,通过requestid进行筛选 根据查询出的草稿单的DocEntry,用自定义B1连接器中的查询审批流执行动作,查出对应的审批流 定义一个变量,用于标识后续更新审批流是否成功,默认值是Y,表示成功 根据发送过来的审批状态字段,使用自定义B1连接器中的更新审批流执行动作,更新B1中审批流的状态 为防止更新审批流执行失败,用流程块执行动作捕获更新接口的异常 如果执行失败,将标识更新成功与否字段置为N 根据更新审批状态的结果,封装一个响应体,通过响应执行动作,作为当前接口的返回 保存 父主题: 创建ERP单据审批同步回写流
  • API流开启开启APP认证 “流编排”-“我的流”,查看条码相关的API流,选择其中一条并点击编辑 注意:条码单据保存子流程 不需要操作 点击第一个节点“当收到HTTP请求时”,在右侧编辑框修改该API对应的流的认证方式为“APP认证” 修改后点击“保存” 保存成功并开启流 重复步骤1-4,依次完成其他三条流的APP认证设置 在API管理列表,查看流对应的API的安全认证方式已修改为“APP认证” 父主题: API流认证相关设置
  • 基于模板创建首条流 首先完成创建审批流程流的创建: 在我的流模板里选择"ERP审批流程同步到Ecology-OA_23-9-0"流模板,点击创建流 点击"下一步" 根据描述信息,配置单据各种信息,配置完成,点击"下一步" 配置查询草稿单的输出字段名,即要从B1查询的单据的字段 配置数据转换节点的输入参数,左边是B1字段,右边是OA字段,主表字段全部在对象名称配置"mainData",子表字段"DocumentLines"对应"detailData" 点击"创建" 2.再完成OA审批结果外发流的创建 在我的流模板里选择"E-cologyOA审批结果接收流_23-9-0"流模板,点击创建流 点击"下一步" 根据描述配置全局配置,点击"下一步" 点击"创建" 父主题: ERP审批流程同步到OA创建并复用
  • API流开启后端自定义认证 OA三条API流均需要开启后端自定义认证 “API生命周期”-“API管理”,查看OA相关API流并点击编辑 点击两次“下一步”到“定义后端服务”,为API流绑定后端自定义认证函数 注:如果之前已经添加过自定义认证,这里下拉框可以直接选择,无需再新建,直接跳到步骤5 新建自定义认证,并选择3.4.1创建的后端认证函数BackendAuthentication 缓存设置为3600s,完成创建 为后端服务绑定“系统参数” 点击“下一步”并完成 点击“发布API”并选择RELEASE环境 重复步骤1-7,依次完成其他三条流的后端自定义函数绑定 父主题: API流认证相关设置
  • 创建保存流 集成工作台需要接受条码应用发送的请求,首个节点需要选择"当收到HTTP"请求时,认证方式选择"APP认证"。 可以根据接口格式定义请求的请求参数 添加条件判断节点,判断是否"反冲发料" 拼接反冲发料的sql 选择diapi连接器中的执行sql执行动作,传入拼接的sql,执行sql,查询发料行 定义一个数组变量接受发料行数据 遍历查出来的发料行数据 计算收货数量 执行存储过程查询发料行 数据追加到数组变量 如果有data变量有数据,则调用子流程,创建生产发料 无论是否倒扣料,调用子流程创建出入库单据 将子流程的响应结果直接封装到响应体返回 保存 父主题: 创建保存数据业务流
  • 标准单据创建审批集成方案 整体设计流程: 具体设计图: 1.审批单据从SparkPackERP同步到企业微信 2.企业微信内审批后审批结果同步到SparkPackERP 业务员在SparkPackERP客户端提交待审批的单据如采购申请单 集成工作台API每分钟执行一次,获取处于需要同步到企业微信且未同步过的草稿单,同步后修改草稿单同步状态 根据所获取单据的内容,调用企业微信接口在企业微信内创建相应的单据,实现单据信息的同步 审批人完成单据审批,触发企业微信审批事件订阅调用集成工作台API 根据请求体数据判断,当为审批流程结束时调用SparkPackERP接口把审批结果同步到SparkPackERP,更新单据状态 父主题: 集成方案设计
  • 创建ERP数据同步到OA业务流 进入我的流页面,创建一条新流 流名称为"基础数据从ERP同步到OA",初始节点选择计划-重复执行,重复周期为通过全局配置传入 点击流里面的输入框,可以管理全局配置 首先从ERP查询数据,因此第一个节点选择B1连接器的查询单据列表执行动作 执行动作中的参数用全局配置来管理 定义一个数组变量来接受处理的数据 前面查询单据列表会一次查询出多条数据,因此需要遍历来处理,新增一个遍历集合元素节点,遍历内容引用查询单据列表响应体的value 添加一个数据转换执行动作,这个执行动作是在连接器里自定义的一个函数执行动作,函数的作用是将B1的字段名映射成OA的字段名 添加一个json构造器执行动作,按照OA接口需要的格式创建一条json 将每次循环处理的json,放入到之前的数组变量中 用变量定义OA接口需要的currentDateTime的值 用MD5编码工具定义OA接口需要的MD5值 用一个json构造器,构造完整的OA接口请求体,数值引用前面定义的各个值 选择OA连接器的创建修改基础数据执行动作,传入接口需要的参数 获取调用创建修改基础数据接口后的响应体,对数据进行处理,获取同步成功的数据 选择B1连接器中更新单据的执行动作,将单据更新为已同步 保存 父主题: 创建业务流
共100000条