前端
业务逻辑脚本(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
- 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的方式
方式一
- 登录dailly 环境
- package.json文件中移除”debug:extend” 后的 NODE_ENV=development
- 本地通过 npm run debug:extend 启动项目,编译扩展脚本
- 浏览器访问 http://mdf-server-daily.yyuap.com/meta/voucherlist/hrht_contract_sign_main?domainKey=hrcloud-contract&scriptUrl=http://localhost:3004/static
自定义组件
全列表可编辑 editvoucherlist
研发不做单据,1.不知道偷哪个领域的艺 2.做出来的功能测试很痛苦
后端
普通业务规则
List
ruleList = this.doGetRules(billContext, bill, commonKey);
去拿所有的rule,billruleregister
ruleLevel
现在看完平台代码,过几天代码就变了,但是核心代码一直没有变过,只是在扩充功能 或者优化平台代码。
本地开发阶段,如果修改了rule的相关配置,一定记得清理缓存,要不会发现新的rule不生效。aa_enum
if (result.isCancel()) {
var36 = result;
var24 = false;
break label201;
}
if (result.getMsgCode() != 1) {
log.error("rule {} 执行失败!返回结果是 {}", billRule.getId(), result);
int errorcode = result.getCode();
errorcode = errorcode > 0 ? errorcode : result.getMsgCode();
throw new BusinessException(Long.parseLong(errorcode + ""), result.getMessage());
}
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
select * from hr_staffing.billruleregister where tenant_id='' and billnum='common' and `action`='query' order by iorder
参照相关
参照前后(meta(gerefmeta)/data(getrefdata))干预rule
rev.refEntity = this.getRefEntityByCode(refCode, domain);
refEntity其实就是pub_ref表中的数据
pub_ref表的eventbean字段中可以配置一个rule,然后可以在getRefMeta前后加自己的业务逻辑
自己做出来的参照,自己用的时候直接refcode,如果是其他领域要用,直接domain.refcode。如果界面不满足要求,可以看是否是各领域的共性需求,如果不是共性需求,需要自己做excel(表单元数据);否则,让参照提供方提供满足要求的界面。
参照数据的来源取决于表结构的配置
pub_ref表的几个字段(这个逻辑需要再看代码确定下,之前的逻辑是这样的,但是看现在的getRefData方法已经走公共rule的AOP这种方式了。需要看源码确认下这个逻辑)
treedomain:当要做的是“树表参照”,并且树的参照数据来源于其他领域,这个时候就需要配置treedomain字段
domain:当表的数据来源不是自己领域的时候,需要配置。
偷师学艺。。。。