1.1 【CRM待办OA】OA函数

集成平台OA函数能力描述与demo实现

函数设置入参统一为syncArg:

一.修改请求

(1)新版本函数:修改 header函数,修改url,修改body,直接执行OA请求

log.info("入参前:集成平台的函数入参" + Fx.json.toJson(syncArg)) log.info("入参前:" + syncArg) String requestDataStr = syncArg["requestData"] as String;//请求体 Map requestData = Fx.json.parse(requestDataStr); requestData.put("remark", "测试111") log.info("转换syncArg:" + requestData) String urldata = syncArg["url"] as String;//请求地址,可以返回动态的地址 Map headerMap = syncArg["header"] as Map; headerMap.put("external","test");//返回header // 调用OA接口,拿到OA接口的返回值 Map result = ["code":200,"message":"success"] //仅直接执行OA请求时,需要返回这个参数,其它场景,请不要返回这个参数。 return ["requestData":requestData,"header":headerMap,"url":urldata,"result":result];//固定返回的参数格式
添加入口:

(2)请求头(header)函数(该函数已废弃,请参考 新版本函数)

用处:当对方OA平台的请求头要求集成平台发送OA消息的时候,每次请求需要在请求头携带不一样的参数时,可以借助这个函数实现
函数示例 String token = "需要返回的header数据" return ["key":token] //返回一个map
添加入口:

(3)请求体函数(该函数已废弃,请参考 新版本函数)

用处:当对方OA平台的请求体需要做一些特殊逻辑的转换的时候,可以借助这个函数实现
添加入口:同上一。
函数示例 log.info("入参前:集成平台的函数入参" + Fx.json.toJson(syncArg)) log.info("入参前:" + syncArg) Map syncArgAfter = [:] String requestDataStr = syncArg["request_data"] as String; Map requestData = Fx.json.parse(requestDataStr); //requestData.put("taskId", (requestData["taskId"] as String)+(requestData["thirdReceiverId"]!=null?requestData["thirdReceiverId"] as String:""))//需要做的一些特殊参数转换的逻辑 log.info("转换syncArg:" + requestData) return ["request_data":requestData];//固定返回的参数格式------------该函数已作废,请参考后面的新版本函数

(4)url函数(该函数已废弃,请参考 新版本函数)

用处:当对方OA平台的请求地址每次接收请求时,要求集成平台需要在url上携带不一样的参数是,可以借助这个函数实现
函数示例 log.info(syncArg) String url=syncArg.url;//获取集成平台传递的原始url //todo 这里需要自己针对企业做一些获取token的操作,再拼接上面的url返回给集成平台 return ["url":url] //返回一个固定的key为url的map
添加入口:暂时没有页面配置url函数,联系开发同学帮忙内置

二.从代办消息免登录CRM

用处:当客户点击OA上面的代办消息的时候,为了安全性校验,一般都会与对方系统做一次安全校验,获取到对方的OA账号身份,让集成平台可以根据OA账户换取对应的纷享账号,从而实现免登的功能
免登函数调用的前提
免登函数需要要求在集成平台OA-场景参数设置-body参数设置的时候,填写对应url的时候,需要统一填写固定的地址,否则无法调用统一免登的函数
url示例 https://www.fxiaoke.com/erp/syncdata/open/oa/authorize/common/#F028/#F037/#F015/false url参数对应的解析:https://www.fxiaoke.com/erp/syncdata/open/oa/authorize/common/{ei}/{apiName}/{dataId}/{isApp} ({}是对上面占位符意义的解释)
函数示例 String url = syncArg["oaConnectParam"]["ssoAuthUrl"] as String; log.info("url:"+url) String ticket = syncArg["params"]["requestParams"]["v5ticket"] as String; log.info("ticket:"+ticket); def(Boolean error,HttpResult data,String errorMessage) = Fx.http.get(url+ticket, null, 2000, true, 2, false); log.info("data:"+data["content"] as String); String content = data["content"] as String; syncArg.put("oaUser",content.trim());//固定返回oaUser为key的第三方账号 log.info("syncArg:"+Fx.json.toJson(syncArg)); return syncArg;
添加入口:

三 从外部门户免登陆CRM

场景:客户想在OA门户上添加一个应用,点击该应用可以通过OAuth2.0协议进行免登到纷享的主页面
步骤一:应用配置的地址为:https://www.fxiaoke.com/erp/syncdata/open/oa/authorize/common/login?ei=对应的企业账号id(纯数字的)
该地址可以后面自己拼接对应的参数
代码示例:
/** * author:ajman * 通用免登 * */ log.info("syncArg:"+syncArg)//解析自己的参数。例如对应系统携带的认证参数为ticket String userAgent = syncArg["params"]["headers"]["user-agent"] as String; log.info("userAgent:"+userAgent) String ticket = syncArg["params"]["ticket"] as String; boolean isApp = syncArg["params"]["requestParams"]["isApp"] as Boolean; log.info("url的流程ticket:"+ticket); //ticket请求对方的认证身份接口,返回对应的erp人员账号。自行补充,返回的账号填充到oaUser //根据参数请求OA平台得到对应的OAuser账号 syncArg.put("oaUser","oaUser,记得替换"); String redirectUrl=""; if(isApp){ //简单判断是否是移动端 redirectUrl='https://www.fxiaoke.com/XV/UI/Home#crm/index'; }else{ redirectUrl='https://www.fxiaoke.com/hcrm/dingtalk'; } log.info("crm跳转地址:"+redirectUrl) syncArg.put("redirectUrl",redirectUrl);//需要返回指定的地址 log.info("syncArg:"+Fx.json.toJson(syncArg)); return syncArg;
2024-01-10
0 0