1. 需求描述:用户在CRM系统当中,能够查询该客户在企查查上的完整数据,并将查询后的结果保存到系统当中。2. 实施企业:旷视科技有限公司3. 实施方案:
- 创建 自定义APL ,调用天眼查接口查询客户信息。
- 创建 自定义组件 ,实现前端展示和业务交互。
- 详情页上配置 UI按钮 ,通过 UI按钮打开自定义组件。
结果如图所示:



4. 代码示例:4.1 自定义组件代码
源码.zip (15.6 KB, 下载次数: 17)您可以选择将组件放置您需要的且自定义组件所支持的任意位置,本示例以客户下自定义按钮的UIAction为例,配置方式并不唯一。在客户下创建一个名为【校验客户】的自定义按钮:
1、设置按钮类型为UI按钮。
2、基本信息中设置按钮名称为校验客户,API Name设置为button_47u9x__c(此处的button_47u9x__c并非固定值,您可以使用自己的API Name,如若您使用的是自己的API Name,请在自定义函数使用过程中留意API Name是否与您设置的API Name一致)。
3、选择按钮位置为详情页
4、添加用户点击按钮后触发的操作,配置如下:函数名称:Acc_ValidateButtonApi Name:func_0865b__c命名空间:按钮返回值类型:*UIAction绑定对象:客户描述:带出客户校验UI界面
函数名称:Acc_ValidateButton
Api Name:func_0865b__c
命名空间:按钮
返回值类型:*UIAction
绑定对象:客户
描述:带出客户校验UI界面
5、自定义函数为:
UIAction action = OpenDialogAction.build() {
title = "校验客户"
width = 800
component {
apiName = 'validateAccountTwo__c'//validateAccountTwo__c为您上传的自定义组件的Api Name
}
}
return action
4.2 自定义APL代码1、调用天眼查接口函数请注意,示例中调用天眼查的接口的Authorization为虚拟值,您可以到天眼查申请您需要的接口,使用您自己的Authorization。若果您只想体验也没有关系,我们准备了mock数据,您只需要在上传组件中上传mock版本的vue文件,我们设置了查询参数为纷享销客的数据,且您可以选择第一个数据进行回填,若您选择mock版本,可以忽略此步骤直接跳转到更新客户信息函数继续处理。根据关键字查询列表函数配置
配置自定义函数基本信息,配置如下:函数名称:Acc_TYCQueryApi Name:func_daWet__c命名空间:自定义控制器返回值类型:字典(Map)绑定对象:不绑定对象描述:天眼查列表查询函数
函数名称:Acc_TYCQuery
Api Name:func_daWet__c
命名空间:自定义控制器
返回值类型:字典(Map)
绑定对象:不绑定对象
描述:天眼查列表查询函数
自定义函数设置参数 (1)类型:String ,名称:word
设置参数 (1)类型:String ,名称:word
String aname=word as String;
String url="[https://open.api.tianyancha.com/services/open/search/2.0?word=](https://open.api.tianyancha.com/services/open/search/2.0?word=)"+aname;
def(Boolean Error, HttpResult OutData, String ErrorMessage) = Fx.http.get(url,["Authorization":"1111aaaa-1111-1111-1111-111111111111"],2000,true,2);
def rstData=OutData['content'] ;
def items=rstData['result']['items']
Map result=["items":items]
return result
查询详细信息函数配置
配置自定义函数基本信息,配置如下:函数名称:Acc_TYCDetailApi Name:func_k1ycD__c命名空间:自定义控制器返回值类型:字典(Map)绑定对象:不绑定对象描述:天眼查详情查询函数
函数名称:Acc_TYCDetail
Api Name:func_k1ycD__c
命名空间:自定义控制器
返回值类型:字典(Map)
绑定对象:不绑定对象
描述:天眼查详情查询函数
自定义函数设置参数 (1)类型:String ,名称:name (2)类型:String ,名称:id
设置参数 (1)类型:String ,名称:name (2)类型:String ,名称:id
String aname=name as String;
String tid = id as String;
String url="[https://open.api.tianyancha.com/services/open/ic/baseinfoV2/2.0?id="+tid+"&name=](https://open.api.tianyancha.com/services/open/ic/baseinfoV2/2.0?id="+tid+"&name=)"+aname;
def(Boolean Error, HttpResult OutData, String ErrorMessage) = Fx.http.get(url,["Authorization":"11111111-1111-1111-1111-111111111111"],2000,true,2);
if(OutData) {
def rstData=OutData['content'] ;
def items=rstData['result']
Map result=["result":items]
return result
}
2、调用天眼查接口函数函数配置
配置自定义函数基本信息,配置如下:函数名称:updateAccountInfoApi Name:updateAccount__c命名空间:自定义控制器返回值类型:字典(Map)绑定对象:不绑定对象描述:更新客户信息
函数名称:updateAccountInfo
Api Name:updateAccount__c
命名空间:自定义控制器
返回值类型:字典(Map)
绑定对象:不绑定对象
描述:更新客户信息
自定义函数设置参数(1)类型:Map ,名称:update_data(2)类型:String ,名称:account_id
设置参数(1)类型:Map ,名称:update_data(2)类型:String ,名称:account_id
请注意,示例中调用天眼查的接口的Authorization为虚拟值,您可以到天眼查申请您需要的接口,使用您自己的Authorization
Map updateData = update_data as Map
String CurrentID = account_id
String AccountName = updateData["name"]
def (Boolean receivableError,QueryResult receivableResult,String receivableErrorMessage) = Fx.object.find("AccountObj",[["name":AccountName]],2,0)
if(receivableError) {
[log.info](http://log.info)("查询失败,原因:" + receivableErrorMessage)
}else {
[log.info](http://log.info)('查询成功' + receivableResult)
List receivableList = receivableResult.dataList
Map receivable = receivableList[0] as Map
if(receivableList.size() > 1 || (receivable && receivable['_id'] != CurrentID)) {
return ["errorMessage":"已存在重名客户,无法更新。"]
}else{
//增加敏感词检查
if(AccountName)
{
def ret = Fx.proxy.callAPI("dirtywords.megvii", null,["text":AccountName])
[log.info](http://log.info)(ret)
if(!ret[0]){
def content = ret[1]['content'] as List
[log.info](http://log.info)(content)
if( content.size()>0 )
{
def keyword = content[0]['keyword']
[log.info](http://log.info)('is dirty word '+keyword)
String dirtyword="包含敏感词"+keyword;
updateData.remove("name")
[log.info](http://log.info)("更新参数"+updateData)
def(Boolean error,Map data,String errorMessage) = Fx.object.update("AccountObj",CurrentID,updateData)
return ["errorMessage":dirtyword]
}else
{
[log.info](http://log.info)("更新参数"+updateData)
def(Boolean error,Map data,String errorMessage) = Fx.object.update("AccountObj",CurrentID,updateData)
if(error) {
[log.info](http://log.info)("更新失败,原因:" + errorMessage)
}else {
[log.info](http://log.info)('更新成功' + data)
return ["success":true]
}
}
}
}
}
}