开发扩展程序示例代码如下:
重要
-
此扩展程序示例基于步骤一中事件消息体中的
dataRowSize
字段实现下载行数风险判断。 -
在配置响应时,如需实现“审批”,则需保证扩展程序在识别到用户风险行为时
callbackExtensionRequest.setCheckResult()
返回WARN
;如需实现“阻断”,则callbackExtensionRequest.setCheckResult()
应返回FAIL
。 -
本文扩展程序代码以下载1000条数据进行判断举例说明,如果希望不同的下载条数触发不同的审批流,您可以配置多个扩展程序,详情请参见步骤三:配置风险识别规则。例如:
-
第一个扩展程序仅在下载条数为0~2000时命中,对应审批流程1。
-
第二个扩展程序仅在下载条数为2001及以上时命中,对应审批流程2。
-
package com.aliyun.dataworks.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dataworks.config.Constants;
import com.aliyun.dataworks.config.EventCheckEnum;
import com.aliyun.dataworks.config.ExtensionParamProperties;
import com.aliyun.dataworks.services.DataWorksOpenApiClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dataworks_public.model.v20200518.*;
import com.aliyuncs.exceptions.ClientException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author dataworks demo
*/
@RestController
@RequestMapping("/extensions")
public class ExtensionsController {
@Autowired(required = false)
private DataWorksOpenApiClient dataWorksOpenApiClient;
@Autowired
private ExtensionParamProperties extensionParamProperties;
/**
* 接收eventBridge推送过来的消息
* @param jsonParam
*/
@PostMapping("/consumer")
public void consumerEventBridge(@RequestBody String jsonParam){
JSONObject jsonObj = JSON.parseObject(jsonParam);
String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
if(Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode) || Constants.DEPLOY_FILE_EVENT_CODE.equals(eventCode)){
//初始化client
IAcsClient client = dataWorksOpenApiClient.createClient();
try {
//当前事件参数信息
String messageId = jsonObj.getString("id");
JSONObject data = jsonObj.getObject("data", JSONObject.class);
// Long projectId = data.getLong("appId");
//初始化事件回调
CallbackExtensionRequest callbackExtensionRequest = new CallbackExtensionRequest();
callbackExtensionRequest.setMessageId(messageId);
callbackExtensionRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
JSONObject eventBody = data.getJSONObject("eventBody");
Long dataRowSize = eventBody.getLong("dataRowSize");
//获取扩展程序选项配置在项目空间下的配置
GetOptionValueForProjectRequest getOptionValueForProjectRequest = new GetOptionValueForProjectRequest();
//全局扩展点事件的配置信息所属projectId默认为-1
getOptionValueForProjectRequest.setProjectId("-1");
getOptionValueForProjectRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
GetOptionValueForProjectResponse getOptionValueForProjectResponse = client.getAcsResponse(getOptionValueForProjectRequest);
JSONObject jsonObject = JSON.parseObject(getOptionValueForProjectResponse.getOptionValue());
//注意:这里需根据在DataWorks上实际设置格式来填写
Long maxDataRowSize = jsonObject.getLong("dataRowSize");
//判断代码是否包含限制函数
if(dataRowSize > 1000){
callbackExtensionRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
callbackExtensionRequest.setCheckMessage("下载的行数超过限制数");
}else{//成功回调
callbackExtensionRequest.setCheckResult(EventCheckEnum.OK.getCode());
}
//回调DataWorks
CallbackExtensionResponse acsResponse = client.getAcsResponse(callbackExtensionRequest);
//请求的唯一标识,用于后续错误排查使用
System.out.println("acsResponse:" + acsResponse.getRequestId());
} catch (ClientException e) {
//请求的唯一标识,用于后续错误排查使用
System.out.println("RequestId:" + e.getRequestId());
//错误状态码
System.out.println("ErrCode:" + e.getErrCode());
//错误描述信息
System.out.println("ErrMsg:" + e.getErrMsg());
}
}else{
System.out.println("未能过滤其他事件,请检查配置步骤");
}
}
}