在项目开发过程中,经常会出现调用标准单据的保存方法,为啥值更新事件没触发呢?曾经在有一个销售订单下推销售出库单时,里面有个实际发货量里写了很多值更新事件,如果不触发会造成保存的单据很多地方是有问题的,首先发现的问题是明显库存,提示负库存,查原因是发货量这边会根据单位进行换算,写了大量的值更新事件,好了,找到原因了,又要如何解决呢?
解决方案如下:
一、首先需要构建一个视图,在视图里跟实际发货量赋值,并触发值更新事件,可是这个字段下推后各数据包都有了,先讲这些数据保存后,根据产生的主键,构建视图,实现过程如下:
string number = saveResult.OperateResult[0].Number.ToString();
//获取元数据服务和构建视图,更新出货量,并触发值更新事件
FormMetadata meta = (FormMetadata)Kingdee.BOS.ServiceHelper.MetaDataServiceHelper.Load(this.Context, "SAL_OUTSTOCK");
IDynamicFormView OUTSTOCKview = CreateBillView(this.Context, "SAL_OUTSTOCK", meta, fid);
二、给视图赋值,并触发值更新事件
OUTSTOCKview.Model.SetValue("FRealQty", outStockQty, 0);//含税单价字段赋值,row为具体行号
OUTSTOCKview.InvokeFieldUpdateService("FRealQty", 0);//联动触发含税单价值更新事件,row为具体行号
注意:OUTSTOCKview.InvokeFieldUpdateService("FRealQty", 0);这段代码才会去触发实际发货量的值更新事件,这样才能保证生成的销售出库单是正确的。否则不会去触发值更新事件的。
三、调保存、提交和审核方法
OUTSTOCKview.InvokeFormOperation(Kingdee.BOS.Core.DynamicForm.FormOperationEnum.Save);
OUTSTOCKview.InvokeFormOperation(Kingdee.BOS.Core.DynamicForm.FormOperationEnum.Submit); //自动提交
OUTSTOCKview.InvokeFormOperation(Kingdee.BOS.Core.DynamicForm.FormOperationEnum.Audit); //自动提交和审核
推荐阅读