事件订阅

一、应用场景

根据客户订阅的事件动作,YonSuite\YonBIP对用单据数据改变后,会将数据改变的单据信息根据注册的回调地址推送给三方。 目的:1、保证双方系统数据的实时一致性;2、通过事件订阅可以减少接口轮询获取单据变更的数据的情况。

二、基础入门

请点击【入门】含示例

三、配置回调地址

  • 点击测试时还会校验appkey,appsecrect等解密 ,如果错误测试也会提示,参考二、回调解密

  • 测试成功结果提示

四、回调解密

  • 参考文档

https://yonbip.diwork.com/iuap-api-management/ucf-wh/console-fe/open-home/index.html?name=1669254105414#/doc-center/docDes/doc?code=xxzx&name=1669254105414&section=aa00a64c6a354d1298f372237ab9e5d4

五、添加事件订阅

  • 只有添加了对应事件才能获取到相关回调。请注意!

六、JAVA代码示例使用说明

  • 我们提供了JAVA代码示例,简单配置即可使用。(示例地址查看 四、基础入门)

6.1、回调地址配置参考

com.yonyou.isv.demo.openapi.base.module.isv.event.ISVEventListenerController#onEventNew

6.2、添加事件编码

  • 添加事件编码: com.yonyou.isv.demo.openapi.event.IsvEventExtendType

  • 编码对应参考下图事件编码

6.3、编写接收事件代码


package com.yonyou.isv.demo.openapi.event.todo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Sets;
import com.yonyou.isv.demo.openapi.base.module.isv.event.ISVEventListener;
import com.yonyou.isv.demo.openapi.base.network.cryptor.EncryptionHolder;
import com.yonyou.isv.demo.openapi.event.ISVEventExtendDto;
import com.yonyou.isv.demo.openapi.event.IsvEventExtendType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.Set;

/**
 * @description: 待办新增事件
 * @author: nishch
 * @create: 2021-07-05
 **/
@Slf4j
@Component
@RequiredArgsConstructor
public class TodoAddEvent implements ISVEventListener<ISVEventExtendDto> {

    /**
     * TODO:在这里写待办的处理逻辑,如果返回true则继续执行下一个相同编码的事件,返回false不继续执行。
     * @param type 事项类型
     * @param event 解析后对象
     * @param holder 响应消息体
     * @return boolean
     */
    @Override
    public boolean onEvent(String type, ISVEventExtendDto event, EncryptionHolder holder){
        String jsonString = JSON.toJSONString(event);
        if (StringUtils.isNotBlank(jsonString)){
            Map<String,String> info = JSONObject.parseObject(event.getContent(), Map.class);
            Map<String,Object> result = JSONObject.parseObject(info.get("value"), Map.class);
            log.info("todo id: {}", JSON.toJSONString(result));
            log.info("todo webUrl: {}", JSON.toJSONString(result.get("webUrl")));
            return true;
        }
        return false;
    }

    /**
     * 如果存在相同事件编码的处理逻辑,此处用于执行排序
     * @return int
     */
    @Override
    public int priority() {
        return ISVEventListener.super.priority()-100;
    }

    /**
     * 返回事件编码
     * @return Set<String>
     */
    @Override
    public Set<String> supportTypes() {
        return Sets.newHashSet(IsvEventExtendType.TODO_CENTER_ADD_TODO);
    }

    /**
     * 返回接收实体对象
     * @return Class<ISVEvent>
     */
    @Override
    public Class<ISVEventExtendDto> getEventClass() {
        return ISVEventExtendDto.class;
    }

}

6.4、测试

七、问题说明

1、请注意:待办事件订阅需要提交工单,研发老师给对应租户添加白名单后才能收到 2、其他事件用户自己添加后即可接收

Copyright © 用友 -【生态技术部】 2022-2023 all right reserved,powered by Gitbook修订时间: 2023-03-14 11:13:47

results matching ""

    No results matching ""