Exemplo n.º 1
0
        private AggregateRootMetaData GetAggregateRootMetaData(AggregateRoot aggregateRoot, Guid?systemFormId)
        {
            var aggRootMetaData    = new AggregateRootMetaData();
            var entityMetadata     = GetEntityMetaData(aggregateRoot.MainEntity.Name);
            var attributeMetadatas = _attributeFinder.FindByEntityId(entityMetadata.EntityId);
            var eam = new EntityAttributeMetadata {
                EntityMetadata = entityMetadata, AttributeMetadatas = attributeMetadatas
            };

            aggRootMetaData.MainMetadata = eam;
            aggRootMetaData.SystemFormId = systemFormId;


            aggRootMetaData.ListMetadatas = new Dictionary <string, EntityAttributeMetadata>();
            foreach (var refEntity in aggregateRoot.ChildEntities)
            {
                entityMetadata     = GetEntityMetaData(refEntity.Name);
                attributeMetadatas = _attributeFinder.FindByEntityId(entityMetadata.EntityId);
                eam = new EntityAttributeMetadata {
                    EntityMetadata = entityMetadata, AttributeMetadatas = attributeMetadatas
                };
                if (aggRootMetaData.ListMetadatas.ContainsKey(refEntity.Name))
                {
                    aggRootMetaData.ListMetadatas.Add(refEntity.Name, eam);
                }
            }
            return(aggRootMetaData);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 创建记录时触发的事件
        /// </summary>
        /// <param name="data"></param>
        /// <param name="stage"></param>
        /// <param name="entityMetadata"></param>
        private void InternalOnCreate(AggregateRoot data, OperationStage stage, AggregateRootMetaData aggRootMetaDatas)
        {
            //plugin
            var        entityId         = aggRootMetaDatas.MainMetadata.EntityMetadata.EntityId;
            Guid?      businessObjectId = aggRootMetaDatas.SystemFormId;
            PlugInType pluginType       = PlugInType.Form;

            _pluginExecutor.Execute(entityId, businessObjectId, pluginType, OperationTypeEnum.Update, stage, data, aggRootMetaDatas);
            if (stage == OperationStage.PreOperation)
            {
                //event publishing
                _eventPublisher.Publish(new AggRootCreatingEvent(data)
                {
                    AggRootMetaData = aggRootMetaDatas
                });
            }
            else if (stage == OperationStage.PostOperation)
            {
                //event publishing
                _eventPublisher.Publish(new AggRootCreatedEvent(data)
                {
                    AggRootMetaData = aggRootMetaDatas
                });
            }
            OnCreate(data, stage, aggRootMetaDatas);
        }
Exemplo n.º 3
0
        public Guid Create(AggregateRoot aggregateRoot, Guid?systemFormId = null, bool ignorePermissions = false)
        {
            AggregateRootMetaData aggRootMetaData = GetAggregateRootMetaData(aggregateRoot, systemFormId);
            var thisId = Guid.Empty;

            try
            {
                _organizationDataProvider.BeginTransaction();
                InternalOnCreate(aggregateRoot, OperationStage.PreOperation, aggRootMetaData);

                //关联Id
                thisId = Guid.NewGuid();

                foreach (var c in aggregateRoot.ChildEntities)
                {
                    string name = c.Name, relationshipname = c.Relationshipname, refname = string.Empty;
                    if (relationshipname.IsNotEmpty())
                    {
                        var relationShipMetas = _relationShipFinder.FindByName(c.Relationshipname);
                        if (null != relationShipMetas && relationShipMetas.ReferencedEntityId == c.Entityid)
                        {
                            refname = relationShipMetas.ReferencingAttributeName;
                        }
                        if (refname.IsNotEmpty())
                        {
                            c.Entity.SetAttributeValue(refname, new EntityReference(aggregateRoot.MainEntity.Name, thisId));
                        }
                    }
                }

                var childEntities = aggregateRoot.ChildEntities.Select(x => x.Entity).ToList();
                var entityNames   = childEntities.Select(n => n.Name).Distinct().ToList();
                foreach (var item in entityNames)
                {
                    var items           = childEntities.Where(n => n.Name.IsCaseInsensitiveEqual(item)).ToList();
                    var creatingRecords = items.Where(n => n.Name.IsCaseInsensitiveEqual(item) && n.GetIdValue().Equals(Guid.Empty)).ToList();
                    if (creatingRecords.NotEmpty())
                    {
                        _dataCreater.CreateMany(creatingRecords);
                    }
                }
                aggregateRoot.MainEntity.SetIdValue(thisId);
                _dataCreater.Create(aggregateRoot.MainEntity);

                InternalOnCreate(aggregateRoot, OperationStage.PostOperation, aggRootMetaData);

                _organizationDataProvider.CommitTransaction();
            }
            catch (Exception e)
            {
                _organizationDataProvider.RollBackTransaction();
                OnException(e);
            }
            return(thisId);
        }
Exemplo n.º 4
0
 public virtual void OnCreate(AggregateRoot data, OperationStage stage, AggregateRootMetaData aggRootMetaData)
 {
 }
Exemplo n.º 5
0
 public virtual void OnUpdate(AggregateRoot existsData, AggregateRoot newData, OperationStage stage, AggregateRootMetaData AggRootMetaDatas)
 {
 }