Пример #1
0
        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);
        }
Пример #2
0
        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()));
        }
Пример #3
0
        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
            }));
        }