Пример #1
0
        internal void UpdatePOAMask(Guid poaId, int accessRightsMask)
        {
            var existing = db.GetEntity("principalobjectaccess", poaId);

            existing["accessrightsmask"] = existing.GetAttributeValue <int>("accessrightsmask") | accessRightsMask;
            db.Update(existing);
        }
Пример #2
0
        //TODO: update to also take in cascading filtering on Assign, Delete, Merge, reparent, rollup
        internal Entity GetDbEntityWithRelatedEntities(EntityReference reference, EntityRole primaryEntityRole, EntityReference userRef, CascadeSelection cascadeSelection = null, params Relationship[] relations)
        {
            var entity = db.GetEntityOrNull(reference);

            if (entity == null)
            {
                return(null);
            }

            var metadata = this.metadata.EntityMetadata.GetMetadata(entity.LogicalName);

            if (entity.RelatedEntities.Count() > 0)
            {
                var clone = entity.CloneEntity(metadata, new ColumnSet(true));
                db.Update(clone);
                entity = clone;
            }
            var relationQuery     = new RelationshipQueryCollection();
            var relationsMetadata =
                primaryEntityRole == EntityRole.Referenced
                ? metadata.OneToManyRelationships
                : metadata.ManyToOneRelationships;

            if (cascadeSelection != null)
            {
                relationsMetadata.Where(x => CascadeCompare(x.CascadeConfiguration, cascadeSelection));
            }

            if (relations.Any())
            {
                relationsMetadata = relationsMetadata.Join(relations, x => x.SchemaName, y => y.SchemaName, (r1, r2) => r1).ToArray();
            }
            relationQuery.AddRange(
                relationsMetadata
                .Select(relationshipMeta =>
            {
                var rel = new Relationship()
                {
                    SchemaName        = relationshipMeta.SchemaName,
                    PrimaryEntityRole = primaryEntityRole
                };
                var query = new QueryExpression()
                {
                    EntityName =
                        primaryEntityRole == EntityRole.Referenced
                            ? relationshipMeta.ReferencingEntity
                            : relationshipMeta.ReferencedEntity,
                    ColumnSet = new ColumnSet(true)
                };
                return(new KeyValuePair <Relationship, QueryBase>(rel, query));
            }));


            if (cascadeSelection == null)
            {
                var relationShipManyMetadata = metadata.ManyToManyRelationships;
                if (relations.Any())
                {
                    relationShipManyMetadata = relationShipManyMetadata.Join(relations, x => x.SchemaName, y => y.SchemaName, (r1, r2) => r1).ToArray();
                }
                relationQuery.AddRange(relationShipManyMetadata
                                       .Select(relationshipMeta =>
                {
                    var rel = new Relationship()
                    {
                        SchemaName = relationshipMeta.SchemaName
                    };
                    var query = new QueryExpression(relationshipMeta.IntersectEntityName)
                    {
                        ColumnSet = new ColumnSet(true)
                    };
                    return(new KeyValuePair <Relationship, QueryBase>(rel, query));
                }));
            }

            AddRelatedEntities(entity, relationQuery, userRef);
            return(entity);
        }