泛微OA单表单多明细接口开发之对Function接口使用的思考与实践

需求:

制作一个表单,根据主表的下拉框显示对应的 明细内容,根据明细的勾选选择是否下推到erp中去。

在这里插入图片描述
**

思考1:设计表单时候,怎么根据下拉框选择出现不同的明细行?

设计思路:
设计好所有的明细表,通过下拉绑定事件确定明细表的展示,展示的时候显示对应的数据,下拉框更改的情况,要清空之前的数据。对应 明细不存在任何数据的情况下,需要抛出错误,流程无法保存。

前端设计如下,说干就干,直接到下一步后端代码的设计。
在这里插入图片描述

思考2:数据封装的问题

	众所周知,泛微oa接口数据流转集成,是需要在某个流程执行保存后再执行的,此时,我需要的是一个接口,对应执行9个明细方法,
我需要设计一个通用的方法解决这些数据封装的问题!

解决方案:策略工厂模式

1、策略工厂方法设计 : 
(1) 设计一个工厂 StrategyFactory;
(2) 设计一个执行策略接口Strategy;
(3) 9个对应的明细表实现Strategy中的execute 方法,处理自己的数据;
(4)在StrategyFactory 中定义方法,将9个策略注册到map中去,定义 getStrategyById(String id)方法;
(5) 设计9个明细对应的实体类;
(6)工厂中执行 Strategy execute(RequestInfo requestinfo)方法;

2、执行:
// 获取到对应的策略(需要注意,此时id为null或者strategy未找到的情况)
(1)Strategy strategy = StrategyFactory.getStrategyById(id);
// 根据策略执行对应的方法
(2)String result= strategy.execute(requestinfo);
// 打印结果是否一致
(3)System.out.println("result="+result);

问题:

策略中(4)步骤这个存在大量的if else情况,一点也不优雅,写java追求的就是优雅!!!

解决方案:枚举

将工厂类设计成枚举的方式,在设计枚举的时候写入对应的class(实现了strategy接口),同样可以调用execute方法
(1)设计一个枚举类,存储9个明细流程对应的信息SkipEnum(2)属性:id,desc(描述)paramClass(对应的策略类 ? extends Strategy)
(3)创建一个方法SkipEnum getByIndex(int id)// 方法可以用流的方式写
    public static SkipEnum getById(int index){
       return Arrays.stream(values())
               .filter(item-> item.getId()==index)
               .findAny()
               .orElse(null);
    }
(4) 改造上述执行方案:
SkipEnum skipEnum = SkipEnum.getById(id);
String result = skipEnum.getParamClass().execute(requestinfo);

枚举真是个好东西啊!

思考3:通用简化和优雅

上述做法看上去没什么问题,但是在详细编写的时候,会存在策略类中只有一两行代码,但是这个类必须存在;
例如: 物料明细和客户新增这两个数据处理策略都是一样,只是实体类不一样,那这样就会出现一个类中有只有类的替换操作,看起来实在是不美观,而且多了很多冗余的类
为了追求优雅,怎么再次简化!!

解决方案:Function函数式接口处理返回对应的类

方法选用: 有四种方式
1、Function:适合接收参数并且有返回(1到2个参数),apply()
2、Consumer:适合接收参数无返回值(1到2个参数),accept()
3、Predicate: 适合接收参数,调用执行链,返回一个boolean类型的值(需要注意链路 and or) test()
4、Supplier:无参数,直接返回结果值(无偿提供的店家哈哈哈哈哈),get()
派生的 Operator,基本不咋用,了解就好

这里采用的BiFunction<T,U, T> 第一个T为参数类T,第二个为参数U,第三个为返回T;
实例代码:

	// 通用实体类封装
   public static <T extends IErpModel> List<T> buildCommonModelList(
   DetailTable detailTable,Class<T> clazz,BiFunction<T, Row, T> modelFunction
   ) {
	List<T> resultList = Arrays.stream(detailTable.getRow()).map(row -> {
	   // 不做操作的时候,传入为空
                    if (modelFunction == null) {
                        return isNeedPush ? t : null;
                    }
                    return modelFunction.apply(t, row);
	})
  	return resultList;
	}
	// 具体到某个类 处理对应的类 row为明细行数据,model为传入实体
    private BiFunction<MaterialModel, Row, MaterialModel> buildMaterialModel() {
        return (model, row) -> {
            String rowId = row.getId();
            model.setDetail_id(rowId);
            log.info("实体类t:" + model);
            return model;
        };
    }

需注意:

在泛微e8中,switch判断类型为枚举的时候,代码将不会继续被执行!!! 老老实实使用if else判断!!!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 泛微oa是一种非常常用的办公自动化系统,可以帮助公司和组织实现业务流程的规范化、自动化和电子化。其中流程表单创建是非常重要的一环,可以通过以下步骤完成: 1. 登录泛微oa系统并打开流程设置界面 2. 选择表单设计器并创建新的表单 3. 设置表单名称、表单视图和相关字段等信息 4. 根据业务需要,使用表单设计器进行表单的设计和布局 5. 保存表单并发布,使得其他用户可以访问和使用表单 在完成表单设计后,我们可以使用相关的接口对该表单进行进一步的操作和调用,例如: 1. 使用流程相关接口获取已提交的表单数据,并进行处理和存储 2. 通过接口进行审批操作,例如同意、驳回等 3. 使用表单查看接口查询、导出或打印已提交的表单数据 4. 在其他系统中调用表单接口以实现数据传递和共享 以上是泛微oa流程表单创建及相关接口调用的一些基本步骤和操作方法,需要根据实际业务需求进行具体的调整和实现。同时,我们也需要注意系统的安全性和可靠性,确保数据的准确性和保密性。 ### 回答2: 泛微OA是世界领先的企业级应用软件提供商,其提供全面的办公自动化解决方案。在泛微OA中,流程表单是企业信息化建设中的重要组成部分,用于承载各种业务流程和数据,能够帮助企业实现信息化的全面提升。 泛微OA流程表单的创建是指企业管理员根据业务需求,使用表单设计器等工具创建公司所需的流程表单,包括设计表单布局、字段属性、审批流程、数据导入等,以满足企业日常的审批、审批、报销等业务需求。表单设计器可以直接在浏览器中进行设计和修改,具有简易用,功能全面的特点,使得企业管理员能够快速地创建所需的表单泛微OA同时还提供了一系列的API接口,帮助企业对流程表单进行管理和调用。这些API接口包括表单存储接口、缓存接口、发布接口、查询接口、导出接口、导入接口等,能够满足企业各类数据管理和业务流程的操作需求。企业开发人员可以通过调用这些API接口,实现对流程表单的管控和使用,使得系统与企业其他应用系统的集成更加方便。同时,泛微OA还提供了详尽的API文档和开发手册,使得开发人员在进行API接口调用时,能够快速地进行开发和调试,提高了开发效率和质量。 综上所述,泛微OA流程表单的创建和相关接口调用,是企业信息化建设中的重要环节,能够帮助企业提高工作效率,加快业务流程的处理速度和准确度,实现企业数字化转型。 ### 回答3: 泛微OA是一款企业级的办公自动化系统,可以帮助企业将日常的业务流程进行数字化管理。在泛微OA中,可以通过表单创建流程,而流程则可以通过相关接口调用实现自动化处理。 泛微OA表单创建功能相对比较简,用户可以通过系统提供的表单设计器进行创建。在表单设计界面中,用户可以根据业务需求添加各种控件和字段。同时,泛微OA也提供了一些常用的表单模板,用户可以直接选择相应的模板进行创建。表单创建完成后,用户需要进行流程设计。 在流程设计中,用户可以根据业务需求设计各个节点,并设置节点的处理人和流转规则。设计完成后,系统会自动生成相应的流程模板。在流程流转中,可以通过相关接口调用实现自动处理。 泛微OA提供了一系列的接口,包括Web Service、RESTful API、OA协议等。用户可以根据实际需求选择相应的接口进行调用。例如,用户可以通过接口实现对流程的发起、终止、暂停、恢复等操作。同时,用户还可以通过接口获取流程的当前状态、处理记录、评审意见等数据。 需要注意的是,使用接口进行流程处理需要具备一定的开发能力和相关技术背景。如果企业没有专门的开发团队,建议寻求泛微OA的合作伙伴进行定制化开发和技术支持。同时,企业也可以参考泛微OA提供的开发文档和示例代码,自行开发所需的业务应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值