函数设置入参统一为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账户换取对应的纷享账号,从而实现免登的功能
免登函数调用的前提
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;