1.用途
操作执行后(事务外)事件,在操作处理完毕,事务提交完毕后触发。
所以那种次业务不影响主流程的操作都可以放置在这个方法中。
2.备注
通常用于在操作完毕后,进行后续的处理,但因为操作的事务已经提交,不能够撤销操作。
如操作完毕后,修饰操作提示信息,使之更加人性化。
3.个人操作代码讲解
/// <summary>
/// 操作执行后,事务结束后
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;
/// 2. 此事件在操作事务提交之后;
/// 3. 此事件中的数据库处理,不受操作的事务保护
/// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
/// </remarks>
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
//工作流获取
var activityCollection = this.Option.GetVariableValue<ObjectActivityInstanceCollection>(BOSConst.CST_KEY_WfActivityInstance, null);
//非空判断
if (activityCollection != null)
{
//获取领域模型元数据服务类实例
IMetaDataService metaService = ServiceFactory.GetMetaDataService(this.Context);
IViewService viewService = ServiceFactory.GetViewService(this.Context);
//每个任务传入一个ObjectActivityInstance对象,批量审批任务时会传入多个对象
foreach (ObjectActivityInstance actRow in activityCollection)
{
//获取当前处理人的信息(每个任务可能有多个处理人,所有处理人存储在ReceiverList属性中)
IActivityInstance actInstance = actRow.ActivityInstance;
//当前节点审批信息
var currentReceiver = actInstance.CurrentReceiver;
//根据节点ID把审批人等信息输出到相应字段上,比如一级审核节点(如何查询节点ID参见下文)的审批人输出到FUserId1字段上
if (actInstance.ActivityDefineId == KEY_DataSynNodeId && currentReceiver != null)
{
//加载单据数据
FormMetadata rowMeta = metaService.Load(this.Context, actRow.ObjectFormId, true) as FormMetadata;
//获取销售订单关联所有数据
var rowData = viewService.LoadSingle(this.Context, actRow.ObjectKeyValue, rowMeta.BusinessInfo.GetDynamicObjectType());
//获取单据体分录信息
DynamicObjectCollection saleOrderEntries = rowData["SaleOrderEntry"] as DynamicObjectCollection;
//循环分录信息获取物料信息
foreach (var entityRow in saleOrderEntries)
{
}
}
}
}
}
3.1.this.Option.GetVariableValue<>();
从选项中获取定义的值
3.2.ServiceFactory.GetMetaDataService(this.Context)
获取领域模型元数据服务类实例
3.3.ServiceFactory.GetViewService(this.Context);
获取对应业务对象的值
操作步骤:
- 获取工作流数据。
- 循环工作流获取指定流程节点的单据信息。
- 数据解析处理。