public Guid Create(Guid sourceEntityId, Guid targetEntityId, Guid sourceRecordId, bool ignorePermissions = false) { var entityMap = _entityMapFinder.Find(sourceEntityId, targetEntityId); if (entityMap == null || entityMap.StateCode == RecordState.Disabled) { OnException(_loc["entitymap_isempty"]); return(Guid.Empty); } var entity = new Entity(entityMap.SourceEnttiyName); entity.SetAttributeValue("ownerid", _user.SystemUserId); entity.SetAttributeValue("owningbusinessunit", _user.BusinessUnitId); //检查追加权限 var sourceEntityMetas = _entityFinder.FindById(entityMap.SourceEntityId); VerifyEntityPermission(entity, AccessRightValue.Append, sourceEntityMetas); //检查被追加权限 var targetEntityMetas = _entityFinder.FindById(entityMap.TargetEntityId); VerifyEntityPermission(entity, AccessRightValue.AppendTo, targetEntityMetas); //转换类型 if (entityMap.MapType == MapType.CopyOne) { return(CreateFromMap_Copy(entityMap, sourceRecordId)); } else if (entityMap.MapType == MapType.CopyMany) { return(CreateFromMap_Copy(entityMap, sourceRecordId)); } else if (entityMap.MapType == MapType.Control) { return(CreateFromMap_Control(entityMap, sourceRecordId)); } else if (entityMap.MapType == MapType.ForceControl) { return(CreateFromMap_Control(entityMap, sourceRecordId)); } return(Guid.Empty); }
public IActionResult CreateEntityMap(EditEntityMapModel model) { if (ModelState.IsValid) { //已存在的单据头映射 var headEntityMap = _entityMapFinder.Find(model.SourceEntityId, model.EntityId); if (headEntityMap != null) { return(JError(T["entitymap_duplicated"])); } //已存在的单据体映射 if (model.ChildAttributeMap.NotEmpty() && !model.ChildSourceEntityId.Equals(Guid.Empty) && !model.ChildTargetEntityId.Equals(Guid.Empty)) { var childEntityMap = _entityMapFinder.Find(model.ChildSourceEntityId, model.ChildTargetEntityId); if (childEntityMap != null) { return(JError(T["entitymap_duplicated"])); } } var id = Guid.NewGuid(); //单据头 if (model.HeadAttributeMap.NotEmpty()) { var entMapTable = new EntityMap { ComponentState = 0, SolutionId = SolutionId.Value, OrganizationId = CurrentUser.OrganizationId, CreatedBy = CurrentUser.SystemUserId, CreatedOn = DateTime.Now, EntityMapId = id, SourceEntityId = model.SourceEntityId, TargetEntityId = model.EntityId, RelationShipName = model.RelationShipName, MapType = model.MapType, StateCode = RecordState.Enabled }; var headAttributeMap = new List <AttributeMap>(); foreach (var item in model.HeadAttributeMap) { if (!item.SourceAttributeId.Equals(Guid.Empty)) { var attributeMap = new AttributeMap { AttributeMapId = Guid.NewGuid(), CanChange = item.CanChange, EntityMapId = entMapTable.EntityMapId, TargetAttributeId = item.TargetAttributeId, SourceAttributeId = item.SourceAttributeId }; if (model.HeadControlAttributeMap.NotEmpty()) { var controlAttrMap = model.HeadControlAttributeMap.Find(n => n.SourceAttributeId == item.SourceAttributeId); if (controlAttrMap != null) { attributeMap.RemainAttributeId = controlAttrMap.RemainAttributeId; attributeMap.ClosedAttributeId = controlAttrMap.ClosedAttributeId; } } headAttributeMap.Add(attributeMap); } } if (headAttributeMap.IsEmpty()) { return(JError(T["entitymap_emptyheadattributemap"])); } _entityMapCreater.Create(entMapTable); _attributeMapCreater.CreateMany(headAttributeMap); //单据体 if (model.ChildAttributeMap.NotEmpty() && !model.ChildSourceEntityId.Equals(Guid.Empty) && !model.ChildTargetEntityId.Equals(Guid.Empty)) { var childEntityMap = new EntityMap { ComponentState = 0, SolutionId = SolutionId.Value, OrganizationId = CurrentUser.OrganizationId, CreatedBy = CurrentUser.SystemUserId, CreatedOn = DateTime.Now, EntityMapId = Guid.NewGuid(), SourceEntityId = model.ChildSourceEntityId, TargetEntityId = model.ChildTargetEntityId, RelationShipName = model.ChildRelationShipName, ParentEntityMapId = entMapTable.EntityMapId, MapType = model.MapType, StateCode = RecordState.Enabled }; var childAttributeMap = new List <AttributeMap>(); foreach (var item in model.ChildAttributeMap) { if (!item.SourceAttributeId.Equals(Guid.Empty)) { var attributeMap = new AttributeMap { AttributeMapId = Guid.NewGuid(), CanChange = item.CanChange, EntityMapId = childEntityMap.EntityMapId, TargetAttributeId = item.TargetAttributeId, SourceAttributeId = item.SourceAttributeId }; if (model.ChildControlAttributeMap.NotEmpty()) { var controlAttrMap = model.ChildControlAttributeMap.Find(n => n.SourceAttributeId == item.SourceAttributeId); if (controlAttrMap != null) { attributeMap.RemainAttributeId = controlAttrMap.RemainAttributeId; attributeMap.ClosedAttributeId = controlAttrMap.ClosedAttributeId; } } childAttributeMap.Add(attributeMap); } } if (childAttributeMap.IsEmpty()) { return(JError(T["entitymap_emptychildattributemap"])); } _entityMapCreater.Create(childEntityMap); _attributeMapCreater.CreateMany(childAttributeMap); } } return(CreateSuccess(new { id = id })); } return(CreateFailure(GetModelErrors())); }
public IActionResult ForwardAndAppend(Guid entityid, Guid referencedrecordid, Guid workflowid, Guid stageid, Guid?instanceId, string relationshipname) { if (entityid.Equals(Guid.Empty) || referencedrecordid.Equals(Guid.Empty) || workflowid.Equals(Guid.Empty) || stageid.Equals(Guid.Empty)) { return(JError(T["parameter_error"])); } var entityMeta = _entityFinder.FindById(entityid); if (entityMeta == null) { return(NotFound()); } var flowInfo = _workFlowFinder.Find(n => n.WorkFlowId == workflowid); if (flowInfo == null) { return(NotFound()); } var stages = _processStageService.Query(n => n .Where(f => f.WorkFlowId == flowInfo.WorkFlowId) .Sort(s => s.SortAscending(f => f.StageOrder))); var currentStage = stages.Find(n => n.ProcessStageId == stageid); var prevStage = stages.Find(n => n.StageOrder == currentStage.StageOrder - 1); if (currentStage.EntityId.Equals(prevStage.EntityId)) { return(JError(T["parameter_error"])); } BusinessProcessFlowInstance bpfInstance = null; if (instanceId.HasValue && !instanceId.Value.Equals(Guid.Empty)) { bpfInstance = _businessProcessFlowInstanceService.Find(n => n.BusinessProcessFlowInstanceId == instanceId && n.WorkFlowId == workflowid); if (bpfInstance == null) { return(NotFound()); } } if (bpfInstance == null) { instanceId = Guid.NewGuid(); bpfInstance = new BusinessProcessFlowInstance(); bpfInstance.BusinessProcessFlowInstanceId = instanceId.Value; bpfInstance.WorkFlowId = workflowid; bpfInstance.ProcessStageId = stages.First().ProcessStageId; bpfInstance.Entity1Id = referencedrecordid; bpfInstance.ProcessEntityId = entityid; _businessProcessFlowInstanceService.Create(bpfInstance); } //是否存在单据转换规则 var entityMap = _entityMapFinder.Find(prevStage.EntityId, entityid); if (entityMap == null) { return(JOk(new { EntityId = entityid , StageId = stageid , BusinessFlowId = workflowid , BusinessFlowInstanceId = instanceId.Value , RelationShipName = relationshipname , ReferencedRecordId = referencedrecordid })); } var recordid = _dataMapper.Create(prevStage.EntityId, currentStage.EntityId, referencedrecordid); _businessProcessFlowInstanceUpdater.UpdateForward(workflowid, instanceId.Value, stageid, recordid); //更新当前记录的业务阶段 var updData = new Entity(entityMeta.Name); updData.SetIdValue(recordid); updData.SetAttributeValue("stageid", stageid); _dataUpdater.Update(updData); return(JOk(new { EntityId = entityid , RecordId = recordid , BusinessFlowId = workflowid , BusinessFlowInstanceId = instanceId.Value })); }