华为云用户手册

  • 创建生产退料 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/InventoryGenEntries 接口API功能描述 创建生产退料 调用方式 POST 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 请求体参数(参考servicelayer接口字段) 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • API流开启后端自定义认证 条码四条API流均需要开启后端自定义认证 “API生命周期”-“API管理”,查看条码相关API流并点击编辑 点击两次“下一步”到“定义后端服务”,为API流绑定后端自定义认证函数 新建自定义认证,并选择3.4.1创建的后端认证函数BackendAuthentication 缓存设置为3600s,完成创建 为后端服务绑定“系统参数” 点击“下一步”并完成 点击“发布API”并选择RELEASE环境 重复步骤1-7,依次完成其他三条流的后端自定义函数绑定 父主题: API流认证相关设置
  • 查询审批流接口 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/ApprovalRequests 接口API功能描述 查询B1审批流 调用方式 GET 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” Prefer 可用于设置查询条数,如:odata.maxpagesize=20,表示一次查20条 查询参数 参数名称 参数说明 $filter 筛选条件,可用于筛选B1记录 $select 筛选返回字段 请求体参数:无 响应体参数:(参考servicelayer接口响应字段) 父主题: B1(servicelayer)接口
  • 创建diapi连接器 新建自定义认证函数,函数配置如下: 函数代码如下: # -*- 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 extractRequestParam(rawValue, encoded, defaultValue): if encoded and rawValue: rawValue = str(base64.b64decode(rawValue), "utf-8") return json.loads(rawValue) if rawValue else defaultValue def login(body,mssiAuthData): url = mssiAuthData.get("host") + "/b1dis/v1/login" headers = {'Content-Type': 'application/json'} session = requests.Session() session.post(url, json=body, headers=headers, verify=False) _cookies = [] for k, v in session.cookies.get_dict().items(): _cookies.append(k + "=" + v) return {'Cookie': ';'.join(_cookies)} ## 请勿对下面的函数做修改 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) 登录集成工作台-连接器-我的连接器-创建我的连接器; 连接器参数配置如下,认证函数选择新建的DIAPILogin函数: 父主题: 集成实施最佳实践
  • 执行sql接口 接口地址 https://api-service.sperp.myhuaweicloud.com/diapi/XXXX/b1dis/v1/exec-sql 接口功能描述 执行sql,查询B1数据 请求方式 POST 请求体参数: 参数名称 参数描述 参数类型 Sql 需要执行的sql 字符串 响应体参数: 参数名称 参数描述 参数类型 code 响应编码 字符串 message 响应信息 字符串 data 响应数据 对象 请求样例: { "Sql": "Select \"ItemCode\",\"ItemName\",\"CstGrpCode\",\"FrgnName\",\"BuyUnitMsr\",\"CardCode\",TO_VARCHAR (TO_DATE(\"UpdateDate\"), 'YYYY-MM-DD') UpdateDate,TO_VARCHAR (TO_DATE(\"CreateDate\"), 'YYYY-MM-DD') CreateDate,\"InvntryUom\",\"U_SFJY\",\"U_CX\",\"U_CC\" from OITM WHERE ifnull(\"U_SYN\",'N')='N' " } 响应体样例: { "code": "RIS.10000000", "message": "OK", "data": { "value": [ { "ItemCode": "XN0004", "ItemName": "XN0004", "CstGrpCode": -1, "FrgnName": "", "BuyUnitMsr": "", "CardCode": "", "UPDATEDATE": "2023-10-20", "CREATEDATE": "2023-10-20", "InvntryUom": "", "U_SFJY": "", "U_CX": "", "U_CC": "" }, { "ItemCode": "XN0001", "ItemName": "XN0001", "CstGrpCode": -1, "FrgnName": "", "BuyUnitMsr": "", "CardCode": "", "UPDATEDATE": "2023-10-20", "CREATEDATE": "2023-10-20", "InvntryUom": "", "U_SFJY": "", "U_CX": "", "U_CC": "" }]}} 父主题: diapi接口
  • 前期准备 环境准备:OA系统、B1系统、集成工作台,以及对应账号信息 接口文档:对应的接口使用文档,这里接口请参考2.4 同步字段:拿采购申请审批为例,以下是B1内的字段清单 集成工作台绑定域名参考5.3.2 企业微信绑定域名参考5.3.3 图1 B1单据字段信息 图2 企业微信表单设计信息(简单起见,只同步部分字段) B1审批流配置 登录B1系统,点击进入管理-审批流程-审批阶段,维护审批阶段信息并添加保存。 点击进入管理-审批流程-审批模板,进行审批模板设置,关联单据和审批阶段。 B1单据自定义字段维护 登录B1系统,选择进入工具-定制工具-用户自定义字段-管理—营销单据-标题,点击添加 企业微信系统审批流程和表单开发 登陆企业微信管理后台,创建OA表单并设计审批流程。为支撑在OA创建表单,需在OA获取对应表单ID见下图中红色方框内。 简单起见,流程设计如下 企业微信应用准备 登陆企业微信开发者后台,选择企业应用管理-审批,再选择API-接收事件服务器。如下图所示: 父主题: 开发指南
  • 共享流模板复制到我的流模板 登录客户的华为云账号,进入集成工作台,选择流编排-我的流模板-共享流模板,选择"ERP基础数据同步到E-cologyOA_23-9-0"模板,点击复制,复制到我的流模板 复制成功 进入我的流模板,查看刚才复制的流模板 重复步骤1-2,将其它5个共享流模板复制到我的流模板。 如果当前复制的流模板和之前的流模板使用了相同的函数和连接器,会提示是否覆盖,一律选择全部覆盖(如下): 完成后,在我的流模板页面查看如下: 父主题: 实施流程
  • 创建企业微信审批回调总流 集成工作台-我的流-创建流(本章节不再详细叙述原理,详细原理可参考审批申请状态变化回调通知 - 文档 - 企业微信开发者中心 (qq.com)) 连接器选择“API流”,触发事件选择“当收到HTTP请求时”(当企业微信审批状态变化时接收企业微信审批信息); 填写要处理的请求方式以及租户用户信息,API请求方式get,API认证方式为无认证,API请求体架构如下图所示: 添加执行动作,选择连接器为“控制”,执行动作为“条件判断”,参数如图所示: 在右边条件下添加执行动作‘条件判断’,条件参数如图所示(判断信息是否来自企业微信): 在添加执行‘响应’,参数如图所示(给企业微信响应解密后的字符串): 添加执行动作‘将XML格式转换成JSON格式’,参数如图所示 添加执行动作‘JSON解析’,参数如图所示: 添加执行动作‘条件判断’,参数如图所示: 添加执行动作‘将XML格式转换成JSON格式’,参数如图所示 添加执行动作‘JSON解析’,参数如图所示: 添加执行动作‘条件判断’,参数如图所示(判断审批单状态是否为同意或不同意): 新增执行动作,执行动作选择为“多分支条件(switch)”,参数如图所示(根据表单ID去调子流程): 点击‘新增分支’,分支条件填写对应表单模板ID(可以给不同单据调用不同的子流程) 新增执行动作,连接器选择为“同步调用子流程”,参数如图所示(需要先根据4.5.1.3创建子流再执行此步骤): 整体API流如图所示 具体实施步骤参考5.4.3.1.4 父主题: 标准单据场景流
  • 创建采购收货 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/PurchaseDeliveryNotes 接口API功能描述 创建采购收货 调用方式 POST 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 请求体参数(参考servicelayer接口字段) 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 创建生产收货 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/InventoryGenEntries 接口API功能描述 创建生产收货 调用方式 POST 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 请求体参数(参考servicelayer接口字段) 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 应用场景分析 根据条码应用中webapi的功能,集成开发需要完成查询数据和保存数据的功能: (1) 查询数据,数据查询sql从条码应用提交到集成工作台,集成工作台调用diapi服务,执行sql查询ERP的数据返回给条码应用; (2) 保存数据,数据按某种数据结构从条码应用提交到集成工作台,集成工作台调用service layer服务接口,将数据保存到ERP; 父主题: SparkPack(B1)和条码集成
  • 创建自定义单据审批同步流 集成工作台-我的流-创建流 连接器中选择“计划”,触发事件为“重复执行”(设置定时任务同步SparkPackERP待审批单据同步至企业微信) 设置重复周期与重复方式为全局配置方便顾问配置。 添加执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询单据列表” 填写过滤参数,参考字段为U_SyncStatus eq 'N'(筛选没有同步到企业微信过的单据,配置成全局配置方便实施人员修改),objType为SparkPackERP单据类型如PurchaseRequests或者自定义单据唯一标识配置成全局参数方便实施人员修改 再给‘查询单据列表’添加并选择一个配置,在参数名称下配置需要的SparkPackERP字段(DocNum与UserSign为必填字段且DocNum在企业微信模板字段名为单据编号,DocNum为同步企业微信审批结果至SparkPackERP时使用,UserSign为查询发起人在企业微信对应的ID时使用) 添加执行动作,选择连接器为“控制”,执行动作为“遍历集合元素”; 遍历的集合内容为,查询单据列表结果中的“value”字段; 添加执行动作,执行动作为“SparkPackERP-微信数据转换”,将SparkPackERP字段格式转换成企业微信数据格式(此执行动作本质是一个函数,根据配置将SparkPackERP字段格式转换成企业微信数据格式) 再点击‘SparkPackERP-微信数据转换’,添加配置,根据对应字段进行配置如下图所示(左侧为SparkPackERP字段,右侧为企业微信对应字段的ID): 添加完成后再选择该配置 新建执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询user”(先在SparkPackERP配置用户传真名为企业微信账号ID,该步骤用来查询草稿审批发起人的传真名用来对应企业微信审批发起人); 输入参数如图所示 新建执行动作,连接器选择之前创建的OA连接器,执行动作选择“发起审批”; 再根据截图填写对应参数,apply_data为审批申请数据选择转换后的数据,creator_userid则是会以此员工身份提交审批,template_id则是表单ID以全局配置形式方便配置 添加执行动作,选择连接器为“控制”,执行动作为“条件判断”;该步骤为判断是否成功提交审批,对应参数如图所示: 在满足条件分支下添加执行动作,执行动作为“更新单据”;同时创建并且选择一个新的配置如图: 该步骤为将已经同步到企业微信的草稿的U_SyncStatus字段改为Y以免后续重复同步,对应参数如图所示: 确认无误后保存,集成工作台-我的流-找到刚创建的流-开启流 最终API如下图所示: 父主题: 自定义单据场景流
  • 创建采购退货 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/PurchaseReturns 接口API功能描述 创建采购退货 调用方式 POST 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 请求体参数(参考servicelayer接口字段) 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 基于首条流创建其它流 上述相当于配置了第一个OA单据同步到ERP的流,默认的配置是销售订单的配置,利用该模板配置不同的单据,方法如下: 复制"E-cologyOA的单据同步到ERP_23-9-0"同步到OA的流 根据需要配置的单据名称,修改流名称,做到见名知意,比如现在同步供应商 修改全局配置 点击"下一步" 根据当前同步的具体单据,修改全局配置 全局配置参数说明 objType: B1单据对象名,供应商是BusinessPartners,销售订单是Orders LineName:B1单据子表名,供应商同步没有子表,不填,销售订单需要同步单据行,填DocumentLines 点击"下一步" 点击"更新" 开启流 父主题: OA数据同步到ERP流创建并复用
  • 基于首条流创建其它流 上述相当于配置了第一个ERP单据同步到OA的流,默认的配置是采购申请的配置,利用该模板配置不同的单据,方法如下: 复制流创建一条新流 修改流名称做到见名知意 修改全局配置 全局配置各个配置说明如下: filter: B1草稿单据的筛选条件,根据DocObjectCode的值类型进行筛选,DocObjectCode eq '1470000113'表示采购申请,DocObjectCode eq '67'表示库存转储 Cyc:同步周期,单位是分钟,最小1分钟 reqName: OA流程名称,填写见名知意就好,比如"采购申请"、"库存转储"等 spk: 注册OA得到的密钥,重新注册后需要更新,否则不变 appid: OA许可证号码,OA重新配置后需要修改,否则不变 OaTbName: OA流程对应的子表名,单子表可不填 $select: B1接口所需字段,默认不填,返回全部 流程id:OA流程的流程ID,每个单据有一个流程ID,OA提供 pagesize: 一次同步的单据条数,格式odata.maxpagesize=数值 点击"下一步" 点击"更新" 配置"查询草稿单"节点的输出参数 创建一个新的配置,并根据单据名称命名 配置输出参数,添加需要同步的B1字段,保存配置 点击新添加的配置名,应用配置 重新选择遍历集合元素的引用 点"×"删掉原来的引用 再选择下面的引用 "数据转换new"节点配置 创建一个新配置,名称见名知意,保存配置,应用配置 点击"智能映射" 保存流,并启动 OA审批结果外发流不用配置,只需要使用首次创建的审批流即可。 父主题: ERP审批流程同步到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 } 父主题: servicelayer接口
  • 更新B1对象接口 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/{objType}{key} 接口API功能描述 更新B1对象 调用方式 PATCH 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” 路径参数 参数名称 参数说明 objType 所更新的B1具体对象名 key 所更新单据的主键值 请求体参数:(参考实际servicelayer接口请求字段) 响应体参数:无 父主题: B1(servicelayer)接口
  • 创建库存收货 接口地址↵ https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/InventoryGenEntries↵ 接口API功能描述↵ 创建库存收货 调用方式↵ POST↵ ↵ 请求头参数↵ 参数名称↵ 参数说明↵ Cookie↵ 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid”↵ ↵ 请求体参数(参考servicelayer接口字段)↵ ↵ 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 创建库存转储 接口地址↵ https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/StockTransfers↵ 接口API功能描述↵ 创建库存转储 调用方式↵ POST↵ ↵ 请求头参数↵ 参数名称↵ 参数说明↵ Cookie↵ 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid”↵ ↵ 请求体参数(参考servicelayer接口字段)↵ ↵ 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 集成工作台绑定域名 登录集成工作台账号,进入云解析 - 控制台 (huaweicloud.com),点击公网域名-创建公网域名 输入域名,点击确定 如果DNS服务器地址不是华为云DNS服务器地址,参考怎样查看并修改域名的DNS服务器地址?_云解析服务 DNS_常见问题_公网域名解析_华为云 (huaweicloud.com) 点击管理解析 点击添加记录集 新开一个页面进入集成工作台,点击API分组-api_flow,复制子域名 类型选择CNAME,在值里填写上一步复制的域名,点击确定 再回到集成工作台,点击域名管理,点击绑定独立域名 输入域名,点击确定 父主题: 前期准备
  • 自定义单据审批集成方案 整体设计流程: 具体设计图: 审批单据从B1同步到企业微信 2.企业微信内审批后审批结果同步到B1 业务员在B1客户端提交待审批的单据如超领料单 集成工作台API每分钟执行一次,获取未同步过的单据,同步后修改单据同步状态 根据所获取单据的内容,调用企业微信接口在企业微信内创建相应的单据,实现单据信息的同步 审批人完成单据审批,触发企业微信审批事件订阅调用集成工作台API 根据请求体数据判断,当为审批流程结束时调用B1接口把审批结果同步到B1,更新单据审批状态字段 父主题: 集成方案设计
  • servicelayer接口 应用场景 接口名称 接口URL 保存数据 登录接口 b1s/v1/Login 创建采购收货 b1s/v1/PurchaseDeliveryNotes 创建采购退货 b1s/v1/PurchaseReturns 创建生产发料 b1s/v1/InventoryGenExits 创建生产退料 b1s/v1/InventoryGenEntries 创建生产收货 b1s/v1/InventoryGenEntries 创建销售交货 b1s/v1/DeliveryNotes 创建销售退货 b1s/v1/Returns 创建库存转储 b1s/v1/StockTransfers 创建库存发货 b1s/v1/InventoryGenExits 创建库存收货 b1s/v1/InventoryGenEntries 创建自定义单据 b1s/v1/{OBJ} 登录接口 创建采购收货 创建采购退货 创建生产发料 创建生产退料 创建生产收货 创建销售交货 创建销售退货 创建库存转储 创建库存发货 创建库存收货 创建自定义单据 父主题: 依赖接口清单描述
  • 创建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函数: 父主题: 集成实施最佳实践
  • API流后端绑定自定义认证 在华为云-服务列表,弹出框搜索函数工作流,点击进入函数工作流(等部署5.3.5时再执行) 选择创建函数 选择函数语言,创建函数 将代码粘贴到编辑框,点击部署 代码: # -*- coding:utf-8 -*- import requests import json def handler (event, context): # 获取token的url url = "https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens" payload = json.dumps({ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": context.getUserData('name'), "password": context.getUserData('password'), "domain": { "name": context.getUserData('domain') } } } }, "scope": { "project": { "name": "cn-north-4" } } } }) headers = { 'Content-Type': 'application/json' } res = json.dumps({ "status":"allow", "context":{ "token":requests.request("POST", url, headers=headers, data=payload).headers.get("X-Subject-Token") } }) return { "statusCode": 200, "body": res , "headers": { "Content-Type": "application/json" } } 函数部署完成 添加环境变量 测试 API流绑定后端自定义认证函数 新建自定义认证 父主题: 部署流程
  • 创建企业微信连接器 集成工作台-连接器-我的连接器-创建我的连接 采用自定义认证,使用函数,创建函数,编辑源码,输入Python代码。 # -*- coding:utf-8 -*- import json import base64 import requests def main(inputData): result=login(inputData) return result def login(data): corpid = data["corpid"] corpsecret = data["corpsecret"] url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" payload={} params = { 'corpid': corpid, 'corpsecret': corpsecret } rsp = requests.request("GET", url, data=payload, params=params) rsp_body: dict = rsp.json() print(rsp_body) token = rsp_body.get("access_token") print(token) print('request success...') return { 'access_token': token } 父主题: 创建到SparkPackERP和OA集成链路
  • 创建保存子流 第一个节点选择"手动触发事件"; 用变量接受子流入参并进行转换; 入参的结构时固定的,通过json解析解析出结构中的各个字段 定义变量封装B1响应 定义变量判断请求中的操作类型 判断请求中是否有operationtype,有则赋值给变量,没有赋默认值为"A" 根据单据类型method字段和操作方式operationtype走不同的分支 判断条件为method-operationtype,表示什么单据的什么操作 以匹配创建采购申请单为例 通过代码将请求体结构转换为service layer请求体结构 通过B1连接器执行动作调用创建采购收货单接口 用流程块捕获执行报错,避免中断无响应 用之前新建的变量接受接口返回信息 按照创建采购收货的接口方式,添加多个分支,完成采购退货、销售交货等所有条码单据的创建 按照条码应用需要的接口格式封装响应体返回。 保存 父主题: 创建保存数据业务流
  • 基于模板创建首条流 在集成工作台-流编排-我的流模板中,选择刚才复制过来的"ERP基础数据同步到E-cologyOA_23-9-0"流模板,点击创建流 新建ERP连接器连接 在弹出的连接框里,配置账套连接地址信息,配置好账套的连接名称、访问地址、数据库名、用户名、密码、语言。 连接名称:定义连接名称(默认即可) 访问地址:输入项目Service Layer云服务地址:https://api-service.sperp.myhuaweicloud.com/XXXX(项目前缀,视具体项目而定) 数据库:输入数据库名 用户名:输入用户名,注意用户名格式为 s-erp\XXX 密码:输入密码 语言:固定值15 创建Ecology-OA连接器连接 填写OA系统相关注册信息,包括: 连接名称:默认不修改即可 appid: OA提供,用于注册OA secret: 注册OA后得到的secret spk: 注册OA后得到的spk url: OA获取token的url地址 time: token失效时间,单位秒,不填默认1800 保存,点击"下一步" 配置全局参数 根据各个全局参数的说明配置适当的值,点击"下一步" 配置查询B1单据的输出参数,参数名按照接口字段名配置 配置完后需要点击右上角"保存" 配置数据转换的输入参数,左侧是B1接口字段名,右侧是OA单据字段名 配置完后需要点击右上角"保存" 点击创建 点击"返回流列表"可以查看刚创建的流 父主题: ERP基础数据同步到OA流创建并复用
  • 创建销售退货 接口地址↵ https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/Returns↵ 接口API功能描述↵ 创建销售退货 调用方式↵ POST↵ ↵ 请求头参数↵ 参数名称↵ 参数说明↵ Cookie↵ 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid”↵ ↵ 请求体参数(参考servicelayer接口字段)↵ ↵ 响应体参数:(参考servicelayer接口响应字段) 父主题: servicelayer接口
  • 查询草稿单接口 接口地址 https://api-service.sperp.myhuaweicloud.com/xxx/b1s/v1/Drafts 接口API功能描述 查询B1草稿单 调用方式 GET 请求头参数 参数名称 参数说明 Cookie 登录时获取的sessionid,值格式为 “B1SESSION=获取的sessionid” Prefer 可用于设置查询条数,如:odata.maxpagesize=20,表示一次查20条 查询参数 参数名称 参数说明 $filter 筛选条件,可用于筛选B1记录 $select 筛选返回字段 请求体参数:无 响应体参数:(参考servicelayer接口响应字段) 父主题: B1(servicelayer)接口
  • 创建SparkPackERP连接器 登录集成工作台-连接器-我的连接器-创建我的连接器 采用自定义认证,使用函数,创建函数。 编辑源码,输入Python代码。 # -*- coding:utf-8 -*- import json import base64 import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 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) 连接器配置如下。 父主题: 创建到SparkPackERP和OA集成链路
共100000条