private string GetPOEntryTableNumber() { IBusinessFlowService bfMetaService = ServiceHelper.GetService <IBusinessFlowService>(); var tableDefine = bfMetaService.LoadTableDefine(this.Context, POFormId, "FPOOrderEntry"); return(tableDefine.TableNumber); }
/// <summary> /// 尝试删除下游单据,返回删除结果 /// </summary> /// <param name="tableNumber">下游单据表格编码</param> /// <param name="entityIds">下游单据体内码</param> /// <returns></returns> private IOperationResult DeleteTargetBill( string tableNumber, HashSet <long> entityIds) { IBusinessFlowService bfService = ServiceHelper.GetService <IBusinessFlowService>(); TableDefine tableDefine = bfService.LoadTableDefine(this.Context, tableNumber); // 读取下游单据的元数据 IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); FormMetadata meta = metaService.Load( this.Context, tableDefine.FormId) as FormMetadata; // 根据下游单据体的内码,读取单据内码 HashSet <long> billIds = this.LoadTargetBillIds(meta.BusinessInfo, tableDefine.EntityKey, entityIds); object[] pkValues = (from p in billIds select(object) p).ToArray(); // 调用删除服务,删除单据 IDeleteService deleteService = ServiceHelper.GetService <IDeleteService>(); IOperationResult deleteResult = deleteService.Delete(this.Context, meta.BusinessInfo, pkValues, this.Option); return(deleteResult); }
/// <summary> /// 分析业务流程实例,输出全部下游单据 /// </summary> /// <param name="entity">上游单据体</param> /// <param name="entityIds">上游单据体内码</param> /// <param name="bfInstances">相关的业务流程实例</param> /// <returns>Dictioanry(下游单据表格编码, 下游单据体内码集合)</returns> private Dictionary <string, HashSet <long> > GetTargetEntityIds( Entity entity, HashSet <long> entityIds, BusinessFlowInstanceCollection bfInstances) { Dictionary <string, HashSet <long> > dctTargetEntityIds = new Dictionary <string, HashSet <long> >(); IBusinessFlowService bfService = ServiceHelper.GetService <IBusinessFlowService>(); TableDefine srcTableDefine = bfService.LoadTableDefine( this.Context, this.BusinessInfo.GetForm().Id, entity.Key); // 逐个实例查找本单的下游单据体内码 foreach (var instance in bfInstances) { // 首先找到业务流程实例中,本单所在的节点 List <RouteTreeNode> srcNodes = instance.SerarchTargetFormNodes(srcTableDefine.TableNumber); foreach (RouteTreeNode srcNode in srcNodes) { if (entityIds.Contains(srcNode.Id.EId)) { // 找到了本单所在的节点,按类别输出其下游节点: foreach (RouteTreeNode targetNode in srcNode.ChildNodes) { if (dctTargetEntityIds.Keys.Contains(targetNode.Id.Tbl) == false) { dctTargetEntityIds.Add(targetNode.Id.Tbl, new HashSet <long>()); } if (dctTargetEntityIds[targetNode.Id.Tbl].Contains(targetNode.Id.EId) == false) { dctTargetEntityIds[targetNode.Id.Tbl].Add(targetNode.Id.EId); } } } } } return(dctTargetEntityIds); }