コード例 #1
0
        public void GetRelatedEntity_NotGeneric_RelatedEntitiesDifferentEntity_Test()
        {
            // Arrange
            var odataUser = new OdataObject <User, int>();
            var re1       = new RelatedEntity {
                Id = "7"
            };
            var person1 = new Person {
                Id = 7, FirstName = "Jared"
            };
            var json1 = JsonConvert.SerializeObject(person1);

            re1.Object = new JRaw(json1);

            var rec = new RelatedEntityCollection {
                re1
            };

            rec.RelatedEntity = "Person";
            odataUser.RelatedEntityCollection.Add(rec);

            // Act
            var odataPersonCollection = odataUser.GetRelatedEntityCollection(nameof(Smile));

            // Assert
            Assert.IsNull(odataPersonCollection);
        }
コード例 #2
0
ファイル: ContractResolverTests.cs プロジェクト: rhyous/Odata
        public void ShouldSerializePopulatedRelatedEntityCollection()
        {
            // Arrange
            var relatedEntityCollection = new RelatedEntityCollection {
                Entity = "Addendum", EntityId = "10", RelatedEntity = "Fake"
            };
            var json1          = "{ \"Id\" : \"1\" }";
            var jObject1       = JObject.Parse(json1);
            var json2          = "{ \"Id\" : \"2\" }";
            var jObject2       = JObject.Parse(json1);
            var relatedEntity1 = new RelatedEntity {
                Id = jObject1.GetValue("Id").ToString(), Object = new JRaw(json1)
            };
            var relatedEntity2 = new RelatedEntity {
                Id = jObject2.GetValue("Id").ToString(), Object = new JRaw(json2)
            };

            relatedEntityCollection.Add(relatedEntity1);
            relatedEntityCollection.Add(relatedEntity2);
            var odata = new OdataObject <Addendum, long>()
            {
                Object = new Addendum {
                    Id = 10, Property = "A", Value = "B"
                }
            };

            odata.RelatedEntityCollection.Add(relatedEntityCollection);

            // Act & Assert
            Assert.IsTrue(ExcludeEmptyEnumerablesContractResolver.Instance.ShouldSerialize(odata, new JsonProperty {
                PropertyName = "RelatedEntityCollection", UnderlyingName = "RelatedEntityCollection"
            }));
        }
コード例 #3
0
        public void SerializeOdataOjectAsJsonTest()
        {
            // Arrange
            var expected = "{\"Id\":10,\"Object\":{\"Id\":10,\"CreateDate\":\"0001-01-01T00:00:00\",\"CreatedBy\":0,\"Entity\":null,\"EntityId\":null,\"LastUpdated\":null,\"LastUpdatedBy\":null,\"Property\":\"A\",\"Value\":\"B\"},\"RelatedEntityCollection\":[{\"Count\":2,\"RelatedEntity\":\"Fake\",\"RelatedEntities\":[{\"Id\":\"1\",\"Object\":{ \"Id\" : \"1\" },\"Uri\":null},{\"Id\":\"2\",\"Object\":{ \"Id\" : \"2\" },\"Uri\":null}]}],\"Uri\":null}";
            var relatedEntityCollection = new RelatedEntityCollection {
                Entity = "Addendum", EntityId = "10", RelatedEntity = "Fake"
            };
            var json1          = "{ \"Id\" : \"1\" }";
            var jObject1       = JObject.Parse(json1);
            var json2          = "{ \"Id\" : \"2\" }";
            var jObject2       = JObject.Parse(json1);
            var relatedEntity1 = new RelatedEntity {
                Id = jObject1.GetValue("Id").ToString(), Object = new JRaw(json1)
            };
            var relatedEntity2 = new RelatedEntity {
                Id = jObject2.GetValue("Id").ToString(), Object = new JRaw(json2)
            };

            relatedEntityCollection.Add(relatedEntity1);
            relatedEntityCollection.Add(relatedEntity2);
            var odata = new OdataObject <Addendum, long>()
            {
                Object = new Addendum {
                    Id = 10, Property = "A", Value = "B"
                }
            };

            odata.RelatedEntityCollection.Add(relatedEntityCollection);

            // Act
            var actual = new Serializer().Json(odata, ContractResolver.Instance);

            // Assert
            Assert.AreEqual(expected, Encoding.UTF8.GetString(actual));
        }
コード例 #4
0
        protected override void Execute(CodeActivityContext context)
        {
            // TODO: VALIDATE ENTITY OR THROW EXCEPTION


            Workflows.UserInteractions.Request.ContactEntityRequest request = new UserInteractions.Request.ContactEntityRequest(

                Entity.Get(context),

                RelatedEntity.Get(context),

                RegardingMessage.Get(context),

                IntroductionScript.Get(context)

                );


            request.AllowEditRelatedEntity = AllowEditRelatedEntity.Get(context);

            request.AllowEditContactDateTime = AllowEditContactDateTime.Get(context);

            request.AllowEditRegarding = AllowEditRegarding.Get(context);

            request.AllowCancel = AllowCancel.Get(context);


            UserInteractionRequest.Set(context, request);

            return;
        }
コード例 #5
0
        /// <summary>
        /// Shows the edit.
        /// </summary>
        private void ShowEdit()
        {
            // Check that we have source and target ids from the query string
            if (!sourceEntityId.HasValue || !targetEntityId.HasValue)
            {
                nbMessages.Text = "Invalid source and target entities provided.";
                pnlEdit.Visible = false;
            }

            lTitle.Text = HeaderTitle;
            lIcon.Text  = $"<i class=\"{ HeaderIconCssClass}\"></i> ";
            avcAttributes.NumberOfColumns = AttributeColumns;

            // Render header content
            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);

            lHeaderContent.Text = HeaderLavaTemplate.ResolveMergeFields(mergeFields);

            // Check if quantity should be show
            nudQuantity.Visible = GetAttributeValue(AttributeKey.ShowQuantity).AsBoolean();

            // Check if notes should be shown
            txtNotes.Visible = GetAttributeValue(AttributeKey.ShowNote).AsBoolean();

            RelatedEntity relatedEntity = null;

            // Determine if we should show existing values and if so load their values
            if (EnableEdit)
            {
                // Check for existing values, if there are multiple we'll assume the first item
                relatedEntity = GetExistingRelationship();

                if (relatedEntity != null)
                {
                    if (relatedEntity.Quantity.HasValue)
                    {
                        nudQuantity.Value = relatedEntity.Quantity.Value;
                    }

                    txtNotes.Text = relatedEntity.Note;
                }
            }

            // We need to configure the attribute value container
            if (EnableAttributeEditing)
            {
                if (relatedEntity == null)
                {
                    // Create a stub of a relationship object so that the attribute editor knows what attributes to show
                    relatedEntity = new RelatedEntity();
                    relatedEntity.SourceEntityTypeId = sourceEntityTypeId;
                    relatedEntity.TargetEntityTypeId = targetEntityTypeId;
                    relatedEntity.PurposeKey         = PurposeKey;
                }

                relatedEntity.LoadAttributes();

                avcAttributes.AddEditControls(relatedEntity, Rock.Security.Authorization.EDIT, CurrentPerson);
            }
        }
コード例 #6
0
        public void OneToManySortTest()
        {
            // Arrange
            var user1 = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user2 = new User {
                Id = 2, Name = "User2", UserTypeId = 3
            };
            var entities = new List <User> {
                user1, user2
            };

            var membership1 = new UserGroupMembership {
                Id = 11, UserId = 1, UserGroupId = 7
            };
            var relatedObjectJson1 = new JRaw(JsonConvert.SerializeObject(membership1));
            var relatedEntity1     = new RelatedEntity {
                Object = relatedObjectJson1
            };

            var membership2 = new UserGroupMembership {
                Id = 14, UserId = 2, UserGroupId = 8
            };
            var relatedObjectJson2 = new JRaw(JsonConvert.SerializeObject(membership2));
            var relatedEntity2     = new RelatedEntity {
                Object = relatedObjectJson2
            };

            var relatedEntities = new List <RelatedEntity> {
                relatedEntity1, relatedEntity2
            };

            var sorterDictionary = new SortMethodDictionary <User>();
            var sortDetails      = new SortDetails
            {
                EntityName    = "User",
                RelatedEntity = "UserGroupMembership",
                EntityToRelatedEntityProperty = "UserId",
                RelatedEntityType             = RelatedEntity.Type.OneToMany
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.OneToMany](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("User", actualCollections[0].Entity);
            Assert.AreEqual("UserGroupMembership", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(1, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson1, actualCollections[0].RelatedEntities[0].Object);

            Assert.AreEqual("User", actualCollections[1].Entity);
            Assert.AreEqual("UserGroupMembership", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(1, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson2, actualCollections[1].RelatedEntities[0].Object);
        }
コード例 #7
0
        public async Task <D365ServiceResponse> GetClientUpcomingAppointments(string RecordId)
        {
            D365CrudService service = new D365CrudService();
            QueryFilter     filter  = new QueryFilter();

            filter.AddCriteria(D365Appointment.STATUS_FIELD, ComparisonOperators.Equal, D365Appointment.CONFIRMED_STATUS);
            filter.AddCriteria(D365Appointment.CLIENT_ID_FIELD, ComparisonOperators.Equal, RecordId);
            filter.AddCriteria(D365Appointment.START_DATE_FIELD, ComparisonOperators.GreaterThan, DateTime.Now.Date);
            RelatedEntity branch = new RelatedEntity()
            {
                IdField = D365Appointment.BRANCH_ID_FIELD,
                Fields  = new SelectFieldsList(Branch.FIELDS)
            };
            RelatedEntity advisor = new RelatedEntity()
            {
                IdField = D365Appointment.ADVISOR_ID_NAV_FIELD,
                Fields  = new SelectFieldsList(SystemUser.FIELDS)
            };

            RetreiveMultipleRequest request = new RetreiveMultipleRequest()
            {
                EntityName      = D365Appointment.ENTITY_NAME,
                Fields          = new SelectFieldsList(D365Appointment.FIELDS),
                Filter          = filter,
                RelatedEntities = new RelatedEntity[2] {
                    branch, advisor
                }
            };
            D365ServiceResponse response = await service.RetreiveMultiple(request);

            return(response);
        }
コード例 #8
0
        public void SortTest()
        {
            // Arrange
            var user1 = new User {
                Id = 1, Name = "User1", UserTypeId = 3
            };
            var user2 = new User {
                Id = 2, Name = "User2", UserTypeId = 3
            };
            var user3 = new User {
                Id = 3, Name = "User3", UserTypeId = 4
            };
            var users = new [] { user1, user2, user3 };

            var userType1 = new UserType {
                Id = 3, Name = "Example Users"
            };
            var userType2 = new UserType {
                Id = 4, Name = "Example Users"
            };
            var userType1Json = new JRaw(JsonConvert.SerializeObject(userType1.AsOdata <UserType, int>()));
            var userType2Json = new JRaw(JsonConvert.SerializeObject(userType2.AsOdata <UserType, int>()));

            var relatedEntity1 = new RelatedEntity {
                Object = userType1Json
            };
            var relatedEntity2 = new RelatedEntity {
                Object = userType1Json
            };
            var relatedEntity3 = new RelatedEntity {
                Object = userType2Json
            };
            var relatedEntitites = new[] { relatedEntity1, relatedEntity2, relatedEntity3 };

            var sorter      = new RelatedEntitySorter <User, int>();
            var sortDetails = new SortDetails("User", "UserType", RelatedEntity.Type.ManyToOne);

            // Act
            var collection = sorter.Sort(users, relatedEntitites, sortDetails);

            // Assert
            Assert.AreEqual(3, collection.Count);
            Assert.AreEqual("User", collection[0].Entity);
            Assert.AreEqual("UserType", collection[0].RelatedEntity);
            Assert.AreEqual("1", collection[0].EntityId);
            Assert.AreEqual(2, collection[0].RelatedEntities.Count);

            Assert.AreEqual("User", collection[1].Entity);
            Assert.AreEqual("UserType", collection[1].RelatedEntity);
            Assert.AreEqual("2", collection[1].EntityId);
            Assert.AreEqual(2, collection[1].RelatedEntities.Count);

            Assert.AreEqual("User", collection[2].Entity);
            Assert.AreEqual("UserType", collection[2].RelatedEntity);
            Assert.AreEqual("3", collection[2].EntityId);
            Assert.AreEqual(1, collection[2].RelatedEntities.Count);
        }
コード例 #9
0
        public void ImplicitOperatorNullTest()
        {
            // Arrange
            OdataObject <Entity1, int> o = null;

            // Act
            RelatedEntity e = o;

            // Assert
            Assert.IsNull(e);
        }
コード例 #10
0
        protected virtual void TMasterFieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
        {
            TMaster row = (TMaster)e.Row;

            if (row == null || row.ClassID == null)
            {
                return;
            }

            RelatedEntity pars = this.Caches <RelatedEntity>().Current as RelatedEntity;

            if (pars == null || pars.Type == null || pars.RefNoteID == null)
            {
                return;
            }

            EntityHelper helper     = new EntityHelper(this);
            Type         entityType = PXBuildManager.GetType(pars.Type, false);
            var          related    = new EntityHelper(this).GetEntityRow(entityType, pars.RefNoteID);

            if (related == null)
            {
                return;
            }

            Type graphType = helper.GetPrimaryGraphType(entityType, related, true);

            if (graphType == null)
            {
                return;
            }

            TMaster copy = PXCache <TMaster> .CreateCopy(row);

            PXGraph graph = CreateInstance(graphType);

            Type   noteType = EntityHelper.GetNoteType(entityType);
            PXView view     = new PXView(this, false, BqlCommand.CreateInstance(BqlCommand.Compose(typeof(Select <,>), entityType, typeof(Where <,>), noteType, typeof(Equal <>), typeof(Required <>), noteType)));

            graph.Caches[entityType].Current = view.SelectSingle(pars.RefNoteID);

            PXCache <TMaster> cache = graph.Caches <TMaster>();

            cache.SetDefaultExt(copy, typeof(CRActivity.bAccountID).Name);
            cache.SetDefaultExt(copy, typeof(CRActivity.contactID).Name);
            if (copy.BAccountID != null)
            {
                row.BAccountID = copy.BAccountID;
            }
            if (copy.ContactID != null)
            {
                row.ContactID = copy.ContactID;
            }
        }
コード例 #11
0
        public override void UpdatedAllRelated(TForeignEntity ForeignEntity)
        {
            TForeignKey?foreignKey = foreignKeyManager.GetEntityKey(ForeignEntity);

            if (propRelated != null)
            {
                EntityCollection <TForeignEntity, TRelatedEntity> relatedCollection = getRColc(ForeignEntity);

                foreach (TRelatedEntity RelatedEntity in relatedCollection)
                {
                    // when an unchanged entity reference to added entity it's state change from unchanged to modified,
                    // therefore when insert added entity to database, any related entity can be added or modified.
                    if (RelatedEntity.HasBusy() || !RelatedEntity.HasChanged())
                    {
                        throw new EntityRelationManagerException($"[{this}] UpdatedAllRelated Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                    }

                    setFKey(RelatedEntity, foreignKey);

                    RelatedEntity.State |= EntityState.Busy;

                    RelatedEntity.OnPropertyChanged(propForeignKey.Name);
                    RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                    RelatedEntity.State ^= EntityState.Busy;
                }
            }
            else
            {
                foreach (TRelatedEntity RelatedEntity in relatedEntitySet)
                {
                    TForeignEntity foreignEntity = getFRef(RelatedEntity);

                    if (foreignEntity == ForeignEntity)
                    {
                        // when an unchanged entity reference to added entity it's state change from unchanged to modified,
                        // therefore when insert added entity to database, any related entity can be added or modified.
                        if (RelatedEntity.HasBusy() || !RelatedEntity.HasChanged())
                        {
                            throw new EntityRelationManagerException($"[{this}] UpdatedAllRelated Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                        }

                        setFKey(RelatedEntity, foreignKey);

                        RelatedEntity.State |= EntityState.Busy;

                        RelatedEntity.OnPropertyChanged(propForeignKey.Name);
                        RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                        RelatedEntity.State ^= EntityState.Busy;
                    }
                }
            }
        }
コード例 #12
0
        public void ImplicitOperatorNullTest()
        {
            // Arrange
            RelatedEntity <User, int> re1 = null;

            // Act
            RelatedEntity re2 = re1;

            // Assert
            Assert.IsNull(re2);
        }
コード例 #13
0
        public void SettingObjectKeyIdPropertyTest()
        {
            // Arrange
            string json          = "{\"Key\":3,\"IdProperty\":\"Key\",\"Addenda\":[],\"Object\":{\"Id\":3,\"UserGroupId\":3,\"UserId\":3},\"PropertyUris\":[],\"RelatedEntities\":[],\"Uri\":\"http://localhost:3896/UserGroupMembershipService.svc/UserGroupMemberships(3)\"}";
            var    relatedEntity = new RelatedEntity();

            // Act
            relatedEntity.Object = new JRaw(json);

            // Assert
            Assert.AreEqual("3", relatedEntity.Id);
        }
コード例 #14
0
        public void ImplicitOperatorDefaultTest()
        {
            // Arrange
            var re1 = new RelatedEntity <User, int>();

            // Act
            RelatedEntity re2 = re1;

            // Assert
            Assert.IsNotNull(re2);
            Assert.AreEqual("0", re2.Id);
        }
コード例 #15
0
        public void ImplicitOperatorNewJRawStringTest()
        {
            // Arrange
            var re1 = new RelatedEntity <JRaw, string>();

            // Act
            RelatedEntity re2 = re1;

            // Assert
            Assert.IsNotNull(re2);
            Assert.IsNull(re2.Id);
        }
コード例 #16
0
        /// <summary>
        /// Handles the Click event of the btnSave control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            var rockContext          = new RockContext();
            var relatedEntityService = new RelatedEntityService(rockContext);

            RelatedEntity relatedEntity = null;

            // Check if we should be editing existing records and if so load it
            if (EnableEdit)
            {
                relatedEntity = GetExistingRelationship(rockContext, relatedEntityService);
            }

            if (relatedEntity == null)
            {
                relatedEntity = new RelatedEntity();
                relatedEntity.SourceEntityTypeId = sourceEntityTypeId;
                relatedEntity.TargetEntityTypeId = targetEntityTypeId;
                relatedEntity.SourceEntityId     = sourceEntityId.Value;
                relatedEntity.TargetEntityId     = targetEntityId.Value;
                relatedEntity.PurposeKey         = PurposeKey;

                relatedEntityService.Add(relatedEntity);
            }

            // Save quantity
            if (GetAttributeValue(AttributeKey.ShowQuantity).AsBoolean())
            {
                relatedEntity.Quantity = nudQuantity.Value;
            }

            // Save note
            if (GetAttributeValue(AttributeKey.ShowNote).AsBoolean())
            {
                relatedEntity.Note = txtNotes.Text;
            }

            rockContext.SaveChanges();

            // Save the attributes
            if (EnableAttributeEditing)
            {
                // Save the attributes
                relatedEntity.LoadAttributes(rockContext);
                avcAttributes.GetEditValues(relatedEntity);

                rockContext.SaveChanges();
                relatedEntity.SaveAttributeValues(rockContext);
            }

            Response.Redirect(PreviousUrl);
        }
コード例 #17
0
        public void ManyToOneSortByPropertyOtherThanIdTest()
        {
            // Arrange
            var user1 = new User2 {
                Id = 1, Name = "User1", UserTypeName = "Example Users"
            };
            var user2 = new User2 {
                Id = 2, Name = "User2", UserTypeName = "Example Users"
            };
            var entities = new List <User2> {
                user1, user2
            };

            var userType1 = new UserType {
                Id = 3, Name = "Example Users"
            };
            var relatedObjectJson = new JRaw(JsonConvert.SerializeObject(userType1));
            var relatedEntity1    = new RelatedEntity {
                Object = relatedObjectJson
            };
            var relatedEntities = new List <RelatedEntity> {
                relatedEntity1
            };

            var sorterDictionary = new SortMethodDictionary <User2>();
            var sortDetails      = new SortDetails
            {
                EntityName    = "User",
                RelatedEntity = "UserType",
                EntityToRelatedEntityProperty = "UserTypeName",
                RelatedEntityType             = RelatedEntity.Type.ManyToOne,
                RelatedEntityIdProperty       = "Name"
            };

            // Act
            var actualCollections = sorterDictionary[RelatedEntity.Type.ManyToOne](entities, relatedEntities, sortDetails);

            // Assert
            Assert.AreEqual(2, actualCollections.Count);

            Assert.AreEqual("User", actualCollections[0].Entity);
            Assert.AreEqual("UserType", actualCollections[0].RelatedEntity);
            Assert.AreEqual("1", actualCollections[0].EntityId);
            Assert.AreEqual(1, actualCollections[0].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson, actualCollections[0].RelatedEntities[0].Object);

            Assert.AreEqual("User", actualCollections[1].Entity);
            Assert.AreEqual("UserType", actualCollections[1].RelatedEntity);
            Assert.AreEqual("2", actualCollections[1].EntityId);
            Assert.AreEqual(1, actualCollections[1].RelatedEntities.Count);
            Assert.AreEqual(relatedObjectJson, actualCollections[1].RelatedEntities[0].Object);
        }
コード例 #18
0
        protected override void Execute(CodeActivityContext context)
        {
            // TODO: VALIDATE ENTITY OR THROW EXCEPTION


            Workflows.UserInteractions.Request.SendCorrespondenceRequest request = new UserInteractions.Request.SendCorrespondenceRequest(

                Entity.Get(context),

                RelatedEntity.Get(context),

                WorkflowManager.Get(context).Application.CorrespondenceGetIdByName(CorrespondenceName.Get(context)),


                AllowUserSelection.Get(context),

                AllowAlternateAddress.Get(context)

                );



            request.AllowCancel = AllowCancel.Get(context);

            request.Attention = Attention.Get(context);

            request.AllowEditRelatedEntity = AllowEditRelatedEntity.Get(context);

            request.AllowHistoricalSendDate = AllowHistoricalSendDate.Get(context);

            request.AllowFutureSendDate = AllowFutureSendDate.Get(context);

            request.AllowSendByFacsimile = AllowSendByFacsimile.Get(context);

            request.AllowSendByEmail = AllowSendByEmail.Get(context);

            request.AllowSendByInPerson = AllowSendByInPerson.Get(context);

            request.SendDate = SendDate.Get(context);

            request.AlternateAddress = AlternateAddress.Get(context);

            request.AlternateFaxNumber = AlternateFaxNumber.Get(context);

            request.AlternateEmail = AlternateEmail.Get(context);


            UserInteractionRequest.Set(context, request);

            return;
        }
コード例 #19
0
        public void ImplicitCastJRawStringObjectTest()
        {
            // Arrange
            var odataObj = new OdataObject <JRaw, string>();

            // Act
            RelatedEntity re = odataObj;

            // Assert
            foreach (var prop in odataObj.GetType().GetProperties())
            {
                Assert.AreEqual(re.GetType().GetProperty(prop.Name).GetValue(re)?.ToString(), prop.GetValue(odataObj)?.ToString());
            }
        }
コード例 #20
0
        public async Task <EntitiesResponseModel> GetAsync(GetEntitiesRequestModel request)
        {
            var subjectRepository = _repositoryResolver.GetRepository(request.RepositoryAlias);

            var parentPath = request is GetEntitiesOfParentRequestModel parentRequest ? parentRequest.ParentPath
                : request is GetEntitiesOfRelationRequestModel relationRequest ? relationRequest.Related.ParentPath
                : default;
            var parent = await _parentService.GetParentAsync(ParentPath.TryParse(parentPath));

            var related = default(IRelated);

            if (request is GetEntitiesOfRelationRequestModel relatedRequest)
            {
                var relatedRepository = _repositoryResolver.GetRepository(relatedRequest.Related.RepositoryAlias ?? throw new ArgumentNullException());
                var relatedEntity     = await relatedRepository.GetByIdAsync(relatedRequest.Related.Id ?? throw new ArgumentNullException(), new ViewContext(null, default))
                                        ?? throw new NotFoundException("Could not find related entity");

                related = new RelatedEntity(parent, relatedEntity, relatedRequest.Related.RepositoryAlias);
            }

            var protoEntity = await subjectRepository.NewAsync(new ViewContext(null, parent), default);

            await _authService.EnsureAuthorizedUserAsync(request.UsageType, protoEntity);

            await _dataViewResolver.ApplyDataViewToViewAsync(request.View);

            var action = (request.UsageType & ~(UsageType.List)) switch
            {
                UsageType.Add when related != null => async() => await subjectRepository.GetAllNonRelatedAsync(new RelatedViewContext(related, null, default), request.View),
                _ when related != null => async() => await subjectRepository.GetAllRelatedAsync(new RelatedViewContext(related, null, default), request.View),
                _ when related == null => async() => await subjectRepository.GetAllAsync(new ViewContext(null, parent), request.View),

                _ => default(Func <Task <IEnumerable <IEntity> > >)
            };

            if (action == default)
            {
                throw new InvalidOperationException($"UsageType {request.UsageType} is invalid for this method");
            }

            var entities = await action.Invoke();

            return(new EntitiesResponseModel
            {
                Entities = entities,
                MoreDataAvailable = request.View.MoreDataAvailable
            });
        }
    }
コード例 #21
0
        public override void UpdatedAllOrphan(TForeignEntity ForeignEntity)
        {
            TForeignKey foreignKey = foreignKeyManager.GetEntityKey(ForeignEntity);

            if (propRelated != null)
            {
                EntityCollection <TForeignEntity, TRelatedEntity> relatedCollection = getRColc(ForeignEntity);

                foreach (TRelatedEntity RelatedEntity in orphanage.GetAllRelated(foreignKeyManager.GetEntityKey(ForeignEntity)).ToArray())
                {
                    if (!RelatedEntity.HasEditable() || RelatedEntity.HasBusy())
                    {
                        throw new EntityRelationManagerException($"[{this}] UpdatedAllOrphan Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                    }

                    // UpdatedOrphan ....
                    setFRef(RelatedEntity, ForeignEntity);
                    OrphanageRemove(RelatedEntity, foreignKey);

                    relatedCollection.InternalAdd(RelatedEntity);

                    RelatedEntity.State |= EntityState.Busy;

                    RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                    RelatedEntity.State ^= EntityState.Busy;
                }
            }
            else
            {
                foreach (TRelatedEntity RelatedEntity in orphanage.GetAllRelated(foreignKeyManager.GetEntityKey(ForeignEntity)).ToArray())
                {
                    if (!RelatedEntity.HasEditable() || RelatedEntity.HasBusy())
                    {
                        throw new EntityRelationManagerException($"[{this}] UpdatedAllOrphan Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                    }

                    // UpdatedOrphan ....
                    setFRef(RelatedEntity, ForeignEntity);
                    OrphanageRemove(RelatedEntity, foreignKey);

                    RelatedEntity.State |= EntityState.Busy;

                    RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                    RelatedEntity.State ^= EntityState.Busy;
                }
            }
        }
コード例 #22
0
        public override void RestoreAllRelated(TForeignEntity ForeignEntity)
        {
            TForeignKey?foreignKey = foreignKeyManager.GetEntityKey(ForeignEntity);

            if (propRelated != null)
            {
                EntityUnique <TForeignEntity, TRelatedEntity> relatedUnique = getRUniq(ForeignEntity);

                TRelatedEntity RelatedEntity = relatedUnique.Entity;

                if (!RelatedEntity.IsNull())
                {
                    UpdateUniqueConstraint(foreignKey, getFKey(RelatedEntity));

                    setFKey(RelatedEntity, foreignKey);

                    RelatedEntity.State |= EntityState.Busy;

                    RelatedEntity.OnPropertyChanged(propForeignKey.Name);
                    RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                    RelatedEntity.State ^= EntityState.Busy;
                }
            }
            else
            {
                foreach (TRelatedEntity RelatedEntity in relatedEntitySet)
                {
                    TForeignEntity foreignEntity = getFRef(RelatedEntity);

                    if (foreignEntity == ForeignEntity)
                    {
                        UpdateUniqueConstraint(foreignKey, getFKey(RelatedEntity));

                        setFKey(RelatedEntity, foreignKey);

                        RelatedEntity.State |= EntityState.Busy;

                        RelatedEntity.OnPropertyChanged(propForeignKey.Name);
                        RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                        RelatedEntity.State ^= EntityState.Busy;

                        break;
                    }
                }
            }
        }
コード例 #23
0
        public void OverridesSameRelation()
        {
            var rel1 = new List <string> {
                "Abc", "Def"
            };
            var rel2 = new List <string> {
                "Def", "Abc"
            };
            var relatedEntity1 = new RelatedEntity(rel1, new HypermediaObjectReference(new TestHypermediaObject()));
            var relatedEntity2 = new RelatedEntity(rel2, new HypermediaObjectReference(new TestHypermediaObject()));

            relationDictionary.Add(relatedEntity1);
            relationDictionary.Add(relatedEntity2);

            Assert.AreEqual(1, relationDictionary.Count);
            Assert.AreEqual(relationDictionary[rel1], relatedEntity2);
        }
コード例 #24
0
        public override void NotifyAllRelated(TForeignEntity ForeignEntity)
        {
            if (propRelated != null)
            {
                EntityUnique <TForeignEntity, TRelatedEntity> relatedUnique = getRUniq(ForeignEntity);

                TRelatedEntity RelatedEntity = relatedUnique.Entity;

                if (!RelatedEntity.IsNull())
                {
                    if (!RelatedEntity.HasEditable() || RelatedEntity.HasBusy())
                    {
                        throw new EntityRelationManagerException($"[{this}] NotifyAllRelated Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                    }

                    RelatedEntity.State |= EntityState.Busy;

                    RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                    RelatedEntity.State ^= EntityState.Busy;
                }
            }
            else
            {
                foreach (TRelatedEntity RelatedEntity in relatedEntitySet)
                {
                    TForeignEntity foreignEntity = getFRef(RelatedEntity);

                    if (foreignEntity == ForeignEntity)
                    {
                        if (!RelatedEntity.HasEditable() || RelatedEntity.HasBusy())
                        {
                            throw new EntityRelationManagerException($"[{this}] NotifyAllRelated Failed, {RelatedEntity} With {RelatedEntity.State} State Is Not Supported");
                        }

                        RelatedEntity.State |= EntityState.Busy;

                        RelatedEntity.OnPropertyChanged(propForeignReference.Name);

                        RelatedEntity.State ^= EntityState.Busy;

                        break;
                    }
                }
            }
        }
コード例 #25
0
        static void UpdateIDFs(RelatedEntity phenotype, int totalNumberOfDisease, int NbDisease_i, double TotalOfSumMinMaxNorm, double SumOfMinMaxNorm_i)
        {
            //IDF UNARY
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.Unary).FirstOrDefault().Value = 1.0;

            //NbDisease_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.NbDisease_i).FirstOrDefault().Value =
                (double)NbDisease_i;

            //Inverse_NbDisease_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.Inverse_NbDisease_i).FirstOrDefault().Value =
                (double)totalNumberOfDisease / (double)NbDisease_i;

            //IDF_Classic_NbDisease_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.IDF_Classic_NbDisease_i).FirstOrDefault().Value =
                Math.Log10((double)totalNumberOfDisease / (double)NbDisease_i);

            //IDF_Smooth_NbDisease_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.IDF_Smooth_NbDisease_i).FirstOrDefault().Value =
                Math.Log10(1.0 + ((double)totalNumberOfDisease / (double)NbDisease_i));

            //Prob_IDF_NbDisease_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.Prob_IDF_NbDisease_i).FirstOrDefault().Value =
                Math.Log10((((double)totalNumberOfDisease - (double)NbDisease_i)) / (double)NbDisease_i);

            //SumOfRawCount_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.SumOfMinMaxNorm_i).FirstOrDefault().Value =
                (double)SumOfMinMaxNorm_i;

            //Inverse_SumOfRawCount_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.Inverse_SumOfMinMaxNorm_i).FirstOrDefault().Value =
                TotalOfSumMinMaxNorm / (double)SumOfMinMaxNorm_i;

            //IDF_Classic_SumOfRawCount_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.IDF_Classic_SumOfMinMaxNorm_i).FirstOrDefault().Value =
                Math.Log10(TotalOfSumMinMaxNorm / (double)SumOfMinMaxNorm_i);

            //IDF_Smooth_SumOfRawCount_i
            phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.IDF_Smooth_SumOfMinMaxNorm_i).FirstOrDefault().Value =
                Math.Log10(1.0 + (TotalOfSumMinMaxNorm / (double)SumOfMinMaxNorm_i));

            //Prob_IDF_SumOfRawCount_i
            //phenotype.IDFs.Where(IDF => IDF.IDFType == IDFType.Prob_IDF_SumOfRawCount_i).FirstOrDefault().Value =
            //Math.Log10(((1.0 - (double)SumOfRawCount_i)) / (double)SumOfRawCount_i);
        }
コード例 #26
0
ファイル: RelatedEntityHelper.cs プロジェクト: waldo2590/Rock
        /// <summary>
        /// Adds a relationship between the relatedEntity and the entity
        /// </summary>
        /// <typeparam name="TT">The type of the t.</typeparam>
        /// <param name="entityId">The entity identifier.</param>
        /// <param name="relatedEntity">The related entity.</param>
        /// <param name="purposeKey">The purpose key.</param>
        public void AddRelatedToSourceEntity <TT>(int entityId, TT relatedEntity, string purposeKey) where TT : IEntity
        {
            var relatedEntityTypeId = EntityTypeCache.GetId <TT>();
            var sourceEntityTypeId  = EntityTypeCache.GetId <T>();

            var relatedEntityRecord = new RelatedEntity();

            relatedEntityRecord.SourceEntityTypeId = sourceEntityTypeId.Value;
            relatedEntityRecord.SourceEntityId     = entityId;

            relatedEntityRecord.TargetEntityTypeId = relatedEntityTypeId.Value;
            relatedEntityRecord.TargetEntityId     = relatedEntity.Id;

            relatedEntityRecord.PurposeKey = purposeKey;
            var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext);

            relatedEntityService.Add(relatedEntityRecord);
        }
コード例 #27
0
 //Read the configuration for filtering
 static private bool FilterFunctionForOneRelatedEntities(RelatedEntity x)
 {
     if (ConfigurationManager.Instance.config.TFTypeOfBestCombination == "NULL" ||
         ConfigurationManager.Instance.config.IDFTypeOfBestCombination == "NULL")
     {
         return(true);
     }
     else
     {
         return(x.TermFrequencies
                .Where(tf => tf.TFType == (TFType)Enum.Parse(typeof(TFType), ConfigurationManager.Instance.config.TFTypeOfBestCombination))
                .FirstOrDefault().Value
                *
                x.IDFs.Where(idf => idf.IDFType == (IDFType)Enum.Parse(typeof(IDFType), ConfigurationManager.Instance.config.IDFTypeOfBestCombination))
                .FirstOrDefault().Value
                >= ConfigurationManager.Instance.config.Threshold);
     }
 }
コード例 #28
0
        public void GetRelatedEntity_NotGeneric_Test()
        {
            // Arrange
            var odataUser = new OdataObject <User, int>();
            var re1       = new RelatedEntity {
                Id = "7"
            };
            var smile1 = new Smile {
                Id = 7, SmileType = "Wide"
            };
            var json1 = JsonConvert.SerializeObject(smile1);

            re1.Object = new JRaw(json1);

            var re2 = new RelatedEntity {
                Id = "8"
            };
            var smile2 = new Smile {
                Id = 8, SmileType = "Flat"
            };
            var json2 = JsonConvert.SerializeObject(smile2);

            re2.Object = new JRaw(json2);
            var rec = new RelatedEntityCollection {
                re1, re2
            };

            rec.RelatedEntity = "Smile";
            odataUser.RelatedEntityCollection.Add(rec);

            // Act
            var odataSmileCollection = odataUser.GetRelatedEntityCollection(nameof(Smile));

            // Assert
            Assert.AreEqual(2, odataSmileCollection.Count);
            Assert.AreEqual("7", odataSmileCollection[0].Id);
            var jObj0 = JObject.Parse(odataSmileCollection[0].Object.ToString());

            Assert.AreEqual("Wide", jObj0["Type"]);
            Assert.AreEqual("8", odataSmileCollection[1].Id);
            var jObj1 = JObject.Parse(odataSmileCollection[1].Object.ToString());

            Assert.AreEqual("Flat", jObj1["Type"]);
        }
コード例 #29
0
        public virtual IEnumerable relate(PXAdapter adapter)
        {
            bool lint = entityFilter.AskExt() == WebDialogResult.OK && entityFilter.VerifyRequired();

            if (lint)
            {
                PXCache       cache            = this.Caches <CRSMEmail>();
                RelatedEntity relatedEntity    = entityFilter.Current;
                EntityHelper  helper           = new EntityHelper(this);
                Type          entityType       = PXBuildManager.GetType(relatedEntity.Type, false);
                object        row              = helper.GetEntityRow(entityType, relatedEntity.RefNoteID);
                Type          graphType        = helper.GetPrimaryGraphType(row, false);
                Type          actualEntityType = PXSubstManager.Substitute(entityType, graphType);
                object        actualRow        = helper.GetEntityRow(actualEntityType, relatedEntity.RefNoteID);
                PXGraph       graph            = PXGraph.CreateInstance(graphType);
                graph.Caches[actualEntityType].Current = actualRow;
                foreach (PXResult <CRSMEmail, EMailAccount, EPView> email in SelectedList())
                {
                    ((CRSMEmail)email).Selected = false;
                    CRSMEmail copy = PXCache <CRSMEmail> .CreateCopy(email);

                    CRActivity newActivity = (CRActivity)graph.Caches[typeof(CRActivity)].Insert();

                    copy.BAccountID = newActivity.BAccountID;
                    copy.ContactID  = newActivity.ContactID;
                    copy.RefNoteID  = newActivity.RefNoteID;
                    copy.MPStatus   = MailStatusListAttribute.Processed;
                    copy.Exception  = null;
                    PXRefNoteSelectorAttribute.EnsureNotePersistence(this, entityFilter.Current.Type, entityFilter.Current.RefNoteID);
                    copy = (CRSMEmail)cache.Update(copy);
                }
                Save.Press();
            }
            else
            {
                entityFilter.Ask(Messages.Warning, Messages.SelectRecord, MessageButtons.OK);
            }

            Emails.Cache.IsDirty = false;
            Emails.Cache.Clear();
            Emails.Cache.ClearQueryCacheObsolete();
            Emails.View.RequestRefresh();
            return(adapter.Get());
        }
コード例 #30
0
        /// <summary>
        /// Adds the relationship.
        /// </summary>
        private void AddRelationship()
        {
            var rockContext          = new RockContext();
            var relatedEntityService = new RelatedEntityService(rockContext);

            var relatedEntity = new RelatedEntity();

            relatedEntityService.Add(relatedEntity);

            relatedEntity.SourceEntityTypeId = sourceEntityTypeId;
            relatedEntity.TargetEntityTypeId = targetEntityTypeId;
            relatedEntity.SourceEntityId     = CurrentSourceEntityId;
            relatedEntity.TargetEntityId     = CurrentTargetEntityId;
            relatedEntity.PurposeKey         = CurrentPurposeKey;

            rockContext.SaveChanges();

            ShowContent();
        }
コード例 #31
0
        public void Enums_are_mapped_by_int_value()
        {
            var source = new RelatedEntity { Enum = SomeEnum.Value2 };
            var target = _mapper.Map<RelatedDTO>(source);

            Assert.AreEqual(SomeOtherEnum.OtherValue2, target.Enum);
        }