前端

业务逻辑脚本(99%的时间精力都在这里)

  • 全部搞懂再开发,不现实。搞懂原理,具体的方法,参考资料(其他领域的代码脚本,mdf相关的说明文档,请教前端同学)
  • 整个前端的原理

MVVM(全部都是这个原理):http://tinper.org/mdf/%E6%8F%90%E5%8F%96%E5%B7%A5%E5%85%B7%E5%85%A5%E9%97%A8%E7%AF%87#/vs2ccq.html
https://www.showdoc.com.cn/89974793848004?page_id=511923336454970
https://www.yuque.com/books/share/15276c80-0e5f-4f34-8a62-583e70c80aa7/ywu0wo#sZsz

  • 业务开发 - 图1
  • vm的位置:1.f12可以在本地缓存中看到vmurl,这是viewmodel 2.本地调试情况下,C:\gitcode\hrcloud-staffing-web\static\viewmodel\hrsm 也有viewmodel,仅仅写代码时参考,不做修改。
  • 抽取公用前端代码:cb.define(process.env.DOMAINKEY,[‘common/hrsm_common_VM.Extend.js’], function (hrsm_common)

    mdf3.0的框架之下 调试daily的方式

  • 方式一

  • 全列表可编辑 editvoucherlist

  • 研发不做单据,1.不知道偷哪个领域的艺 2.做出来的功能测试很痛苦

    后端

    普通业务规则

  • List ruleList = this.doGetRules(billContext, bill, commonKey);

去拿所有的rule,billruleregister
ruleLevel
现在看完平台代码,过几天代码就变了,但是核心代码一直没有变过,只是在扩充功能 或者优化平台代码。
本地开发阶段,如果修改了rule的相关配置,一定记得清理缓存,要不会发现新的rule不生效。aa_enum

  1. if (result.isCancel()) {
  2. var36 = result;
  3. var24 = false;
  4. break label201;
  5. }
  6. if (result.getMsgCode() != 1) {
  7. log.error("rule {} 执行失败!返回结果是 {}", billRule.getId(), result);
  8. int errorcode = result.getCode();
  9. errorcode = errorcode > 0 ? errorcode : result.getMsgCode();
  10. throw new BusinessException(Long.parseLong(errorcode + ""), result.getMessage());
  11. }

mdd框架提供了基于Saga这种模式的分布式事务,只要在普通的rule里边继承ISagaRule接口,并且实现cancle方法,就可以实现分布式事务。
用友分布式事务框架YTS:http://git.yonyou.com/mwclient/yts-docs/blob/develop/cloud_yts/SUMMARY.md

  • 自己实现rule的时候可以参考平台的rule,也可以参考兄弟领域的rule(比如如何从billContext中拿到billnumber,fullname,condition等内容):

public class QueryBillRule extends AbstractCommonRule

  1. select * from hr_staffing.billruleregister where tenant_id='' and billnum='common' and `action`='query' order by iorder

OperationTypeEnum action类型

参照相关

参照前后(meta(gerefmeta)/data(getrefdata))干预rule

  1. rev.refEntity = this.getRefEntityByCode(refCode, domain);

refEntity其实就是pub_ref表中的数据
pub_ref表的eventbean字段中可以配置一个rule,然后可以在getRefMeta前后加自己的业务逻辑

  • 自己做出来的参照,自己用的时候直接refcode,如果是其他领域要用,直接domain.refcode。如果界面不满足要求,可以看是否是各领域的共性需求,如果不是共性需求,需要自己做excel(表单元数据);否则,让参照提供方提供满足要求的界面。

    参照数据的来源取决于表结构的配置

  • pub_ref表的几个字段(这个逻辑需要再看代码确定下,之前的逻辑是这样的,但是看现在的getRefData方法已经走公共rule的AOP这种方式了。需要看源码确认下这个逻辑)

image.png
treedomain:当要做的是“树表参照”,并且树的参照数据来源于其他领域,这个时候就需要配置treedomain字段
domain:当表的数据来源不是自己领域的时候,需要配置。

偷师学艺。。。。