initVariable事件

1 事件介绍
插件可以在此事件中,对本地变量进行初始化。
此事件发生时,源单主实体、目标单主实体、转换规则都已经确定,可以基于这些上下文信息,初始化本地变量。
一些通用的单据转换业务插件,需要自动适应各种单据,这个事件就显得比较重要:
可以在转换规则执行前,让通用插件了解到当前的上下文,初始化一些变量,决定后续业务逻辑。
2 事件触发时机
开始运行转换规则,创建好了转换规则上绑定的单据转换插件之后,即触发此事件。
插件可以利用如下方法,获取到源单、目标单主实体、反写规则:
private void getContext(){
// 源单主实体
BillEntityType srcMainType = this.getSrcMainType();
// 目标单主实体
BillEntityType tgtMainType = this.getTgtMainType();
// 转换规则
ConvertRuleElement rule = this.getRule();
// 转换方式:下推、选单
ConvertOpType opType = this.getOpType();
}3 代码模板
package kd.bos.plugin.sample.bill.billconvert.template;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.InitVariableEventArgs;
public class InitVariable extends AbstractConvertPlugIn {
@Override
public void initVariable(InitVariableEventArgs e) {
// TODO 在此添加业务逻辑
}
}4 参数说明
public class InitVariableEventArgs extends ConvertPluginEventArgs
暂无属性。
5 应用示例
5.1 案例说明
1. 需要开发一个通用单据转换插件,把目标单单据体上的金额字段值,合计到单据头上;
2. 不同的单据上,单据体、单据头上的金额字段标识不同;
3. 暂时只支持采购费用发票、销售费用发票。
5.2 实现方案
1. 捕获 initVariable事件,确认源单、目标单,单据体、单据头各金额字段标识;
2. 在afterCreateLink事件,根据单据体金额字段,合计单据头金额字段,并换算本位币金额。
5.3 实例代码
package kd.bos.plugin.sample.bill.billconvert.bizcase;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.Date;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.AfterCreateLinkEventArgs;
import kd.bos.entity.botp.plugin.args.InitVariableEventArgs;
public class InitVariableSample extends AbstractConvertPlugIn {
/** 目标单主实体标识 */
private String targetEntityNumber;
/** 目标单单据体标识 */
private String key_entryentity;
private boolean isOtherBill = false;
/** 字段标识,单据头.价税合计_原币*/
private String key_AllAmountOri;
/** 字段标识,单据体.价税合计_原币*/
private String key_AllAmountOri_D;
/** 字段标识,单据头.价税合计_本位币*/
private String key_AllAmount;
/** 字段标识,单据头.不含税金额_原币*/
private String key_AmountOri;
/** 字段标识,单据体.不含税金额_原币*/
private String key_AmountOri_D;
/** 字段标识,单据头.不含税金额_本位币*/
private String key_Amount;
/** 字段标识,单据头.税额_原币*/
private String key_TaxAmountOri;
/** 字段标识,单据体.税额_原币*/
private String key_TaxAmountOri_D;
/** 字段标识,单据头.税额_本位币*/
private String key_TaxAmount;
/**
* 初始化事件:根据目标单,确定价税合计金额等字段标识
*/
@Override
public void initVariable(InitVariableEventArgs e) {
this.targetEntityNumber = this.getTgtMainType().getName();
this.setAmountKey();
}
/**
* 关联关系已经记录,并重算了反写控制字段值之后,触发此事件
*
* @remark
* 金额字段,是反写控制字段:
* 反写控制字段,需要记录从每条源单行携带过来的值,然后自动合计到单据体字段上;
* 用户手工修改单据体上的反写控制字段时,会根据原始携带量分配、反写到源单
*
* 因此,如果要依赖于反写控制字段值进行运算,必须在afterCreateLink事件之后
*
*/
@Override
public void afterCreateLink(AfterCreateLinkEventArgs e) {
if (this.isOtherBill){
// 其他未知的单据,不合计金额
return;
}
ExtendedDataEntity[] billDataEntitys = e.getTargetExtDataEntitySet().FindByEntityKey(this.targetEntityNumber);
// 逐单合计单据头金额字段值
for(ExtendedDataEntity billDataEntity : billDataEntitys){
this.calcAmount(billDataEntity);
}
}
/**
* 根据目标单,设置含税价格等字段标识
*/
private void setAmountKey() {
if (StringUtils.equals(this.targetEntityNumber, "iv_purexpinv")){
// 采购费用发票
this.key_entryentity = "entryentity";
//价税合计
this.key_AllAmountOri = "amountori";
this.key_AllAmountOri_D = "amountori";
this.key_AllAmount = "amount";
//不含税金额
this.key_AmountOri = "headauxpriceori";
this.key_AmountOri_D = "headauxpriceori";
this.key_Amount = "headauxprice";
//税额
this.key_TaxAmountOri = "deductibletaxori";
this.key_TaxAmountOri_D = "deductibletaxori";
this.key_TaxAmount = "deductibletax";
}
else if (StringUtils.equals(this.targetEntityNumber, "iv_saleexpinv")){
// 销售费用发票
this.key_entryentity = "entryentity";
//价税合计
this.key_AllAminitVariable事件
1 事件介绍插件可以在此事件中,对本地变量进行初始化。此事件发生时,源单主实体、目标单主实体、转换规则都已经确定,可以基于这些上下...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



