Esempio n. 1
0
        /// <summary>
        /// Disassociates an Entity from a collection of other Entities.
        /// </summary>
        /// <param name="relationshipName">The the name of the relationship to use to disconnect the records.</param>
        /// <param name="target">The target Entity to be disconnected from.</param>
        /// <param name="children">The collection of Entities to be disconnected from.</param>
        public void Disassociate(string relationshipName, EntityReference target, EntityReferenceCollection children)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target", "Disassociate method has a null parameter.");
            }

            if (children == null)
            {
                throw new ArgumentNullException("children", "Disassociate method has a null parameter.");
            }

            if (string.IsNullOrEmpty(relationshipName))
            {
                throw new ArgumentNullException("relationshipName", "Disassociate method has a null parameter.");
            }

            PerformAction(
                $"Associate [{relationshipName} / {target.Id} / {target.LogicalName}]",
                () =>
            {
                var disassociateRequest = new DisassociateRequest()
                {
                    Relationship    = new Relationship(relationshipName),
                    Target          = new EntityReference(target.LogicalName, target.Id),
                    RelatedEntities = children
                };
                Service.Execute(disassociateRequest);
            });
        }
Esempio n. 2
0
        public bool UnlinkFrom(IEnumerable <EntityReference> related)
        {
            try
            {
                var batchSize = (related.Count() >= 1000)
                    ? 1000
                    : related.Count();

                var processed = 0;
                while (processed < related.Count())
                {
                    var batch = new EntityReferenceCollection(related.Skip(processed).Take(batchSize).ToList());
                    processed += batch.Count();

                    var req = new DisassociateRequest
                    {
                        Target          = target.ToEntityReference(),
                        Relationship    = new Relationship(intersectionName),
                        RelatedEntities = batch
                    };
                    container.Service.Execute(req);
                    container.Log("Disassociated {0} {1} from {2}", batch.Count, related.Count() > 0 ? related.First().LogicalName : string.Empty, target.LogicalName);
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 3
0
        //Since the Source and target Entities are already filtered based on a particular configuration just searching on the Ids would be sufficent for the M2M matching
        private Dictionary <string, OrganizationRequest> GetDisassociateRequests(
            List <Entity> sourceEntities,
            List <Entity> targetEntities,
            Guid configurationId,
            string intersectEntityName)
        {
            Dictionary <string, OrganizationRequest> disassociateRequests = new Dictionary <string, OrganizationRequest>();

            foreach (Entity targetEntity in targetEntities)
            {
                if (!sourceEntities.Any(x => x.Id == targetEntity.Id))
                {
                    DisassociateRequest disassociateRequest = new DisassociateRequest
                    {
                        Target          = new EntityReference("msdyusd_configuration", configurationId),
                        RelatedEntities = new EntityReferenceCollection
                        {
                            new EntityReference(targetEntity.LogicalName, targetEntity.Id)
                        },
                        Relationship = new Relationship(intersectEntityName)
                    };

                    disassociateRequests.Add(targetEntity.Id.ToString(), disassociateRequest);
                }
            }



            return(disassociateRequests);
        }
        public void PerformTestSetup()
        {
            MessageName = "Disassociate";

            var contactEntity = EntityFactory.CreateContact();
            var letterEntity  = EntityFactory.CreateLetter();

            var associateRequest = new AssociateRequest
            {
                Target       = contactEntity.ToEntityReference(),
                Relationship = new Relationship
                {
                    SchemaName = "Contact_Letters"
                },
                RelatedEntities = new EntityReferenceCollection
                {
                    letterEntity.ToEntityReference()
                }
            };

            OrganizationService.Execute(associateRequest);

            DisassociateRequest = new DisassociateRequest
            {
                Target       = contactEntity.ToEntityReference(),
                Relationship = new Relationship
                {
                    SchemaName = "Contact_Letters"
                },
                RelatedEntities = new EntityReferenceCollection
                {
                    letterEntity.ToEntityReference()
                }
            };
        }
        public static void purgeExistingRelationships(ManyToManyRelationshipMetadata metaData, IOrganizationService orgService, ILog logger)
        {
            logger.Info(string.Format("Purging existing record associations for relationship {0}", metaData.SchemaName));
            //use metadata to create a qry to retreive all records in the N:N table.
            var qry = new QueryExpression
            {
                EntityName = metaData.IntersectEntityName,
                ColumnSet  = new ColumnSet(
                    metaData.Entity1IntersectAttribute,
                    metaData.Entity2IntersectAttribute)
            };


            var existingRelationships = orgService.RetrieveMultiple(qry).Entities;

            logger.Info(string.Format("Found {0} existing relationships", existingRelationships.Count));

            //remove each existing association
            foreach (var record in existingRelationships)
            {
                var entity1Id = new EntityReference(metaData.Entity1LogicalName, record.GetAttributeValue <Guid>(metaData.Entity1IntersectAttribute));
                var entity2Id = new EntityReference(metaData.Entity2LogicalName, record.GetAttributeValue <Guid>(metaData.Entity2IntersectAttribute));

                var req = new DisassociateRequest
                {
                    Relationship    = new Relationship(metaData.SchemaName),
                    Target          = entity1Id,
                    RelatedEntities = new EntityReferenceCollection {
                        entity2Id
                    }
                };

                if (entity1Id.LogicalName == entity2Id.LogicalName)
                {
                    req.Relationship.PrimaryEntityRole = EntityRole.Referenced;
                }

                logger.Info(string.Format("Removing link between {0}-{1} and {2}-{3}", entity1Id.LogicalName, entity1Id.Id, entity2Id.LogicalName, entity2Id.Id));
                orgService.Execute(req);

                req = new DisassociateRequest
                {
                    Relationship    = new Relationship(metaData.SchemaName),
                    Target          = entity2Id,
                    RelatedEntities = new EntityReferenceCollection {
                        entity1Id
                    }
                };

                if (entity1Id.LogicalName == entity2Id.LogicalName)
                {
                    req.Relationship.PrimaryEntityRole = EntityRole.Referenced;
                }

                logger.Info(string.Format("Removing link between {2}-{3} and {0}-{1}", entity1Id.LogicalName, entity1Id.Id, entity2Id.LogicalName, entity2Id.Id));
                orgService.Execute(req);
            }
        }
Esempio n. 6
0
 public void Disassociate(string entityName, Guid entityId, Relationship relationship, EntityReferenceCollection relatedEntities)
 {
     var request = new DisassociateRequest()
     {
         Target          = new EntityReference(entityName, entityId),
         Relationship    = relationship,
         RelatedEntities = relatedEntities
     };
     var response = Execute(request) as DisassociateResponse;
 }
        public void Disassociate(EntityReference entityReference, EntityReferenceCollection associatedEntities, string relationshipName)
        {
            DisassociateRequest request = new DisassociateRequest
            {
                RelatedEntities = associatedEntities,
                Relationship    = new Relationship(relationshipName),
                Target          = entityReference
            };

            ServiceProxy.Execute(request);
        }
Esempio n. 8
0
        /// <summary>
        /// Disassociate the described entity with the relatedEntities
        /// </summary>
        /// <param name="entityName"></param>
        /// <param name="entityId"></param>
        /// <param name="relationship"></param>
        /// <param name="relatedEntities"></param>
        public void Disassociate(string entityName, Guid entityId, Relationship relationship, EntityReferenceCollection relatedEntities)
        {
            var req = new DisassociateRequest();

            req.Target = new EntityReference {
                LogicalName = entityName, Id = entityId
            };
            req.Relationship    = relationship;
            req.RelatedEntities = relatedEntities;
            SendRequest <DisassociateResponse>(req);
        }
Esempio n. 9
0
        public void ApplyTo(IOrganizationService crm1, IOrganizationService crm2)
        {
            var crm = this.SourceEnvironmentIndex == 1 ? crm1 : crm2;


            var request = new DisassociateRequest
            {
                Relationship = new Relationship(Entity.LogicalName)
            };

            // TODO: capire come fare
        }
Esempio n. 10
0
        public virtual void PlanDisassociate(string entityName, Guid entityId, Relationship relationship,
                                             EntityReferenceCollection relatedEntities)
        {
            var request =
                new DisassociateRequest
            {
                Target          = new EntityReference(entityName, entityId),
                Relationship    = relationship,
                RelatedEntities = relatedEntities
            };

            PlanOperation(request);
        }
Esempio n. 11
0
 public void Disassociate(string entityName, Guid entityId, Relationship relationship,
                          EntityReferenceCollection relatedEntities)
 {
     if (relatedEntities.Count > 0)
     {
         var request = new DisassociateRequest
         {
             Target          = CreateLookup(entityName, entityId),
             Relationship    = relationship,
             RelatedEntities = relatedEntities
         };
         Execute(request);
     }
 }
        /// <summary>
        /// Remove link (association) between records.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.messages.disassociaterequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="mainRecordId"></param>
        /// <param name="mainRecordLogicalName"></param>
        /// <param name="relatedEntities"></param>
        /// <param name="relationName"></param>
        /// <returns>
        /// <see cref="DisassociateResponse"/>
        /// </returns>
        public DisassociateResponse Disassociate(Guid mainRecordId, string mainRecordLogicalName, EntityReferenceCollection relatedEntities, string relationName)
        {
            ExceptionThrow.IfGuidEmpty(mainRecordId, "mainRecordId");
            ExceptionThrow.IfNullOrEmpty(mainRecordLogicalName, "mainRecordLogicalName");
            ExceptionThrow.IfNull(relatedEntities, "relatedEntities");
            ExceptionThrow.IfNullOrEmpty(relationName, "relationName");

            DisassociateRequest request = new DisassociateRequest()
            {
                Target          = new EntityReference(mainRecordLogicalName, mainRecordId),
                RelatedEntities = relatedEntities,
                Relationship    = new Relationship(relationName)
            };

            return((DisassociateResponse)this.OrganizationService.Execute(request));
        }
Esempio n. 13
0
        private DisassociateRequest GetDisassociateRequestM2M(CRMM2MEntityMapping m2mEntityMapping, Guid entity1Id, Guid entity2Id)
        {
            DisassociateRequest disassociateRequest = new DisassociateRequest
            {
                Target          = new EntityReference(m2mEntityMapping.Entity1, entity1Id),
                RelatedEntities = new EntityReferenceCollection {
                    new EntityReference(m2mEntityMapping.Entity2, entity2Id)
                },
                Relationship = new Relationship(m2mEntityMapping.IntersectEntity)
            };

            if (m2mEntityMapping.Entity1 == m2mEntityMapping.Entity2)
            {
                disassociateRequest.Relationship.PrimaryEntityRole = EntityRole.Referencing;
            }

            return(disassociateRequest);
        }
        /// <summary>
        /// Creates a CRM <c>DisassociateRequest</c>
        /// </summary>
        /// <param name="relationshipName">The name of the relationship to disassociate.</param>
        /// <param name="entity1Name">The name of the first entity to disassociate.</param>
        /// <param name="entity1Guid">The unique identifier of the first entity instance.</param>
        /// <param name="entity2Name">The name of the second entity to disassociate.</param>
        /// <param name="entity2Guid">The unique identifier of the second entity to disassociate.</param>
        private void CreateDisassociateRequest(string relationshipName, string entity1Name, string entity1Guid, string entity2Name, string entity2Guid)
        {
            DisassociateRequest dreq = new DisassociateRequest();

            // Target is the entity that you are disassociating your entities with.
            dreq.Target = new EntityReference(entity1Name, new Guid(entity1Guid));

            // RelatedEntities are the entities you are disassociating to your target (can be more than 1)
            dreq.RelatedEntities = new EntityReferenceCollection();
            dreq.RelatedEntities.Add(new EntityReference(entity2Name, new Guid(entity2Guid)));

            // The relationship schema name in CRM you are using to disassociate the entities.
            // Found in settings - customization - entity - relationships
            dreq.Relationship = new Relationship(relationshipName);

            // Execute the request
            this.CrmAdapter.OrganizationService.Execute(dreq);
        }
Esempio n. 15
0
        public ActionResult Disassociate(DisassociateRequest request)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var relatedEntities =
                request.RelatedEntities.Where(
                    related => entityPermissionProvider.TryAssertAssociation(serviceContext, request.Target, request.Relationship, related)).ToList();

            if (relatedEntities.Any())
            {
                var filtered = new DisassociateRequest {
                    Target = request.Target, Relationship = request.Relationship, RelatedEntities = new EntityReferenceCollection(relatedEntities)
                };

                serviceContext.Execute(filtered);
            }
            else
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Missing_Permissions_For_Operation_Exception")));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Esempio n. 16
0
 public static void FakeDisassociate(XrmFakedContext context, IOrganizationService fakedService)
 {
     A.CallTo(() => fakedService.Disassociate(A<string>._, A<Guid>._, A<Relationship>._, A<EntityReferenceCollection>._))
         .Invokes((string entityName, Guid entityId, Relationship relationship, EntityReferenceCollection entityCollection) =>
         {
             if (context.FakeMessageExecutors.ContainsKey(typeof(DisassociateRequest)))
             {
                 var request = new DisassociateRequest()
                 {
                     Target = new EntityReference() { Id = entityId, LogicalName = entityName },
                     Relationship = relationship,
                     RelatedEntities = entityCollection
                 };
                 context.FakeMessageExecutors[typeof(DisassociateRequest)].Execute(request, context);
             }
             else
                 throw PullRequestException.NotImplementedOrganizationRequest(typeof(DisassociateRequest));
         });
 }
Esempio n. 17
0
        protected override void Execute(CodeActivityContext executionContext)
        {
            #region "Load CRM Service from context"

            Common objCommon = new Common(executionContext);
            objCommon.tracingService.Trace("Load CRM Service from context --- OK");
            #endregion

            #region "Read Parameters"
            String          _entity1        = this.entity1.Get(executionContext);
            String          _entity2        = this.entity2.Get(executionContext);
            String          _nnrelationship = this.NNrelationship.Get(executionContext);
            String          _recordurl      = this.recordurl.Get(executionContext);
            Regex           rx      = new Regex("(?<=id=).{36}", RegexOptions.None);
            MatchCollection matches = rx.Matches(_recordurl);
            Guid            _guid1  = new Guid(matches[0].Value);
            Guid            _guid2  = new Guid(this.guid2.Get(executionContext));
            #endregion


            #region "Execution"
            try
            {
                DisassociateRequest       request         = new DisassociateRequest();
                EntityReference           moniker1        = new EntityReference(_entity1, _guid1);
                EntityReference           moniker2        = new EntityReference(_entity2, _guid2);
                EntityReferenceCollection relatedEntities = new EntityReferenceCollection();
                relatedEntities.Add(moniker1);
                request.Target          = moniker2;
                request.RelatedEntities = new EntityReferenceCollection {
                    moniker1
                };
                request.Relationship = new Relationship(_nnrelationship);
                objCommon.service.Execute(request);
                success.Set(executionContext, true);
            }
            catch (Exception ex)
            {
                errmsg.Set(executionContext, ex.Message);
            }
            #endregion
        }
Esempio n. 18
0
        private Dictionary <string, OrganizationRequest> GetM2MDisassociateRequests(List <Entity> sourceEntities,
                                                                                    List <Entity> targetEntities,
                                                                                    CRMM2MEntityMapping m2mEntityMapping)
        {
            Dictionary <string, OrganizationRequest> disassociateRequests = new Dictionary <string, OrganizationRequest>();


            foreach (Entity targetEntity in targetEntities)
            {
                Guid   targetEntity1Id = targetEntity.GetAttributeValue <Guid>(m2mEntityMapping.Entity1Attribute);
                Guid   targetEntity2Id = targetEntity.GetAttributeValue <Guid>(m2mEntityMapping.Entity2Attribute);
                string requestId       = GetRequestId(targetEntity1Id, targetEntity2Id);

                bool disassociate = false;

                if (m2mEntityMapping.Entity1 == m2mEntityMapping.Entity2)//Ex;- SubActionCalls
                {
                    if (!sourceEntities.Any(x => (x.GetAttributeValue <Guid>(m2mEntityMapping.Entity1Attribute) == targetEntity1Id &&
                                                  x.GetAttributeValue <Guid>(m2mEntityMapping.Entity2Attribute) == targetEntity2Id) ||
                                            (x.GetAttributeValue <Guid>(m2mEntityMapping.Entity2Attribute) == targetEntity1Id &&
                                             x.GetAttributeValue <Guid>(m2mEntityMapping.Entity1Attribute) == targetEntity2Id)))
                    {
                        disassociate = true;
                    }
                }
                else if (!sourceEntities.Any(x => x.GetAttributeValue <Guid>(m2mEntityMapping.Entity1Attribute) == targetEntity1Id &&
                                             x.GetAttributeValue <Guid>(m2mEntityMapping.Entity2Attribute) == targetEntity2Id))
                {
                    disassociate = true;
                }

                if (disassociate)
                {
                    DisassociateRequest disassociateRequest = GetDisassociateRequestM2M(m2mEntityMapping, targetEntity1Id, targetEntity2Id);
                    disassociateRequests.Add(requestId, disassociateRequest);
                }
            }



            return(disassociateRequests);
        }
Esempio n. 19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="service"></param>
        /// <param name="target"></param>
        /// <param name="relatedEntity"></param>
        /// <param name="relation"></param>
        public static void DisassociateEntities
            (IOrganizationService service, Entity target, Entity relatedEntity, string relation)
        {
            try
            {
                var request = new DisassociateRequest
                {
                    Target          = new EntityReference(target.LogicalName, target.Id),
                    RelatedEntities =
                        new EntityReferenceCollection
                    {
                        new EntityReference(relatedEntity.LogicalName, relatedEntity.Id)
                    },
                    Relationship = new Relationship(relation)
                };

                service.Execute(request);
            }
            catch (Exception ex)
            {
                throw new Exception(HU.ErrorMessageWrapper(ex));
            };
        }
Esempio n. 20
0
        public void Disassociate(string entityName, Guid entityId, Relationship relationship,
                                 EntityReferenceCollection relatedEntities)
        {
            ValidateState();

            var request = new DisassociateRequest
            {
                Target          = new EntityReference(entityName, entityId),
                Relationship    = relationship,
                RelatedEntities = relatedEntities
            };
            var operation = new Operation <object>(request)
            {
                Index = OperationIndex++
            };

            using (var service = GetService())
            {
                try
                {
                    service.Disassociate(entityName, entityId, relationship, relatedEntities);
                }
                catch (Exception ex)
                {
                    operation.Exception = ex;
                    throw;
                }


                if (TransactionManager?.IsTransactionInEffect() == true)
                {
                    TransactionManager.ProcessRequest(service, operation);
                }

                operation.Response = new object();
            }
        }
Esempio n. 21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="bag"></param>
        /// <param name="entity"></param>
        /// <param name="relatedentities"></param>
        /// <param name="intersect"></param>
        /// <param name="batchSize"></param>
        public static void Disassociate(this IBag bag, Entity entity, List <EntityReference> relatedentities, string intersect, int batchSize)
        {
            if (batchSize < 1)
            {
                throw new ArgumentException("Must be a positive number", "batchSize");
            }

            var processed = 0;

            while (processed < relatedentities.Count)
            {
                var batch = new EntityReferenceCollection(relatedentities.Skip(processed).Take(batchSize).ToList());
                processed += batch.Count();

                var req = new DisassociateRequest
                {
                    Target          = entity.ToEntityReference(),
                    Relationship    = new Relationship(intersect),
                    RelatedEntities = batch
                };
                bag.Service.Execute(req);
                bag.Logger.Log($"Disassociated {batch.Count} {(relatedentities.Count > 0 ? relatedentities[0].LogicalName : "")} from {entity.ToStringExt(bag.Service)}");
            }
        }
        /// <summary>
        /// The disassociate.
        /// </summary>
        /// <param name="relationshipName">
        /// The relationship name.
        /// </param>
        /// <param name="ids">
        /// The ids.
        /// </param>
        private void Disassociate(string relationshipName, IList <EntityReference> ids)
        {
            if (ids == null || ids.Count == 0)
            {
                return;
            }

            var inputTarget = this.PluginContext.InputTargetAsEntity;
            var request     = new DisassociateRequest
            {
                Target          = inputTarget.ToEntityReference(),
                Relationship    = new Relationship(relationshipName),
                RelatedEntities = new EntityReferenceCollection(ids)
            };

            var entity1LogicalName = inputTarget.LogicalName;
            // ReSharper disable once PossibleNullReferenceException
            var entity2LogicalName = ids.FirstOrDefault().LogicalName;
            var selfRelation       = entity1LogicalName.Equals(entity2LogicalName, StringComparison.InvariantCultureIgnoreCase);

            if (selfRelation)
            {
                request.Relationship.PrimaryEntityRole = EntityRole.Referenced;
            }

            var service = this.PluginContext.Service;

            service.Execute(request);
            if (!selfRelation)
            {
                return;
            }

            request.Relationship.PrimaryEntityRole = EntityRole.Referencing;
            service.Execute(request);
        }
        public void Update(Entity entity)
        {
            var transaction = new ExecuteTransactionRequest();

            foreach (var attribute in entity.Attributes.ToList())
            {
                var attributes = _crmCache.GetValueUpdateCache <EntityAttribute>($"EntityDefinitions(LogicalName='{entity.LogicalName}')/Attributes(LogicalName='{attribute.Key}')", "Get", DateTimeOffset.Now.AddDays(1));

                if (attributes.AttributeTypeName.Value == "LookupType" && attribute.Value == null)
                {
                    var diasociateReq = new DisassociateRequest(entity.ToEntityReference(), attribute.Key);
                    transaction.AddRequest(diasociateReq);
                    entity.Attributes.Remove(attribute.Key);
                }
            }

            var updReq = new UpdateRequest();

            updReq.Target = entity;

            transaction.AddRequest(updReq);

            var response = _webProxy.GetTransactionResponse(transaction);
        }
        /// <summary>
        /// Remove link (association) between records.
        /// <para>
        /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.messages.disassociaterequest(v=crm.8).aspx
        /// </para>
        /// </summary>
        /// <param name="mainRecordId"></param>
        /// <param name="mainRecordLogicalName"></param>
        /// <param name="relatedEntityIdList"></param>
        /// <param name="relatedEntityLogicalName"></param>
        /// <param name="relationName"></param>
        /// <returns>
        /// <see cref="DisassociateResponse"/>
        /// </returns>
        public DisassociateResponse Disassociate(Guid mainRecordId, string mainRecordLogicalName, List <Guid> relatedEntityIdList, string relatedEntityLogicalName, string relationName)
        {
            ExceptionThrow.IfGuidEmpty(mainRecordId, "mainRecordId");
            ExceptionThrow.IfNullOrEmpty(mainRecordLogicalName, "mainRecordLogicalName");
            ExceptionThrow.IfNull(relatedEntityIdList, "relatedEntityIdList");
            ExceptionThrow.IfNullOrEmpty(relatedEntityLogicalName, "relatedEntityLogicalName");
            ExceptionThrow.IfNullOrEmpty(relationName, "relationName");

            EntityReferenceCollection entityCollection = new EntityReferenceCollection();

            foreach (Guid item in relatedEntityIdList)
            {
                entityCollection.Add(new EntityReference(relatedEntityLogicalName, item));
            }

            DisassociateRequest request = new DisassociateRequest()
            {
                Target          = new EntityReference(mainRecordLogicalName, mainRecordId),
                RelatedEntities = entityCollection,
                Relationship    = new Relationship(relationName)
            };

            return((DisassociateResponse)this.OrganizationService.Execute(request));
        }
Esempio n. 25
0
        public static void Should_Not_Find_Faked_N_To_N_Records_If_Disassociated_Again()
        {
            var fakedContext = new XrmFakedContext();
            var fakedService = fakedContext.GetFakedOrganizationService();

            var userId     = new Guid("11111111-7982-4276-A8FE-7CE05FABEAB4");
            var businessId = Guid.NewGuid();

            var testUser = new SystemUser
            {
                Id = userId
            };

            var testRole = new Role
            {
                Id             = new Guid("22222222-7982-4276-A8FE-7CE05FABEAB4"),
                Name           = "Test Role",
                BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, businessId)
            };

            fakedContext.Initialize(new Entity[] { testUser, testRole });

            fakedContext.AddRelationship("systemuserroles_association", new XrmFakedRelationship
            {
                IntersectEntity    = "systemuserroles",
                Entity1LogicalName = SystemUser.EntityLogicalName,
                Entity1Attribute   = "systemuserid",
                Entity2LogicalName = Role.EntityLogicalName,
                Entity2Attribute   = "roleid"
            });

            var request = new AssociateRequest()
            {
                Target          = testUser.ToEntityReference(),
                RelatedEntities = new EntityReferenceCollection()
                {
                    new EntityReference(Role.EntityLogicalName, testRole.Id),
                },
                Relationship = new Relationship("systemuserroles_association")
            };

            fakedService.Execute(request);

            var disassociate = new DisassociateRequest
            {
                Target          = testUser.ToEntityReference(),
                RelatedEntities = new EntityReferenceCollection()
                {
                    new EntityReference(Role.EntityLogicalName, testRole.Id),
                },
                Relationship = new Relationship("systemuserroles_association")
            };

            fakedService.Execute(disassociate);

            var query = new QueryExpression()
            {
                EntityName   = "role",
                ColumnSet    = new ColumnSet("name"),
                LinkEntities =
                {
                    new LinkEntity
                    {
                        LinkFromEntityName    = Role.EntityLogicalName,
                        LinkFromAttributeName = "roleid",
                        LinkToEntityName      = SystemUserRoles.EntityLogicalName,
                        LinkToAttributeName   = "roleid",
                        LinkCriteria          = new FilterExpression
                        {
                            FilterOperator = LogicalOperator.And,
                            Conditions     =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "systemuserid",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { userId }
                                }
                            }
                        }
                    }
                }
            };

            var result = fakedService.RetrieveMultiple(query);

            Assert.Empty(result.Entities);
        }
        /// <summary>
        /// Creates a CRM <c>DisassociateRequest</c>
        /// </summary>
        /// <param name="relationshipName">The name of the relationship to disassociate.</param>
        /// <param name="entity1Name">The name of the first entity to disassociate.</param>
        /// <param name="entity1Guid">The unique identifier of the first entity instance.</param>
        /// <param name="entity2Name">The name of the second entity to disassociate.</param>
        /// <param name="entity2Guid">The unique identifier of the second entity to disassociate.</param>
        private void CreateDisassociateRequest(string relationshipName, string entity1Name, string entity1Guid, string entity2Name, string entity2Guid)
        {
            DisassociateRequest dreq = new DisassociateRequest();

            // Target is the entity that you are disassociating your entities with.
            dreq.Target = new EntityReference(entity1Name, new Guid(entity1Guid));

            // RelatedEntities are the entities you are disassociating to your target (can be more than 1)
            dreq.RelatedEntities = new EntityReferenceCollection();
            dreq.RelatedEntities.Add(new EntityReference(entity2Name, new Guid(entity2Guid)));

            // The relationship schema name in CRM you are using to disassociate the entities.
            // Found in settings - customization - entity - relationships
            dreq.Relationship = new Relationship(relationshipName);

            // Execute the request
            this.CrmAdapter.OrganizationService.Execute(dreq);
        }
Esempio n. 27
0
        public void Delete()
        {
            using (var reader = new StreamReader(filePath, Encoding.Default))
            {
                string line;
                int lineNumber = 0;
                while ((line = reader.ReadLine()) != null)
                {
                    lineNumber++;
                    try
                    {
                        var data = line.Split(',');

                        Guid firstGuid;
                        Guid secondGuid;

                        if (settings.FirstAttributeIsGuid)
                        {
                            firstGuid = new Guid(data[0]);
                        }
                        else
                        {
                            var records = service.RetrieveMultiple(new QueryExpression(settings.FirstEntity)
                            {
                                Criteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression(settings.FirstAttributeName, ConditionOperator.Equal,
                                            data[0])
                                    }
                                }
                            });

                            if (records.Entities.Count == 1)
                            {
                                firstGuid = records.Entities.First().Id;
                            }
                            else if (records.Entities.Count > 1)
                            {
                                if (RaiseError != null)
                                    RaiseError(this,
                                        new ResultEventArgs
                                        {
                                            LineNumber = lineNumber,
                                            Message = string.Format("More than one record ({0}) were found with the value specified", settings.FirstEntity)
                                        });

                                continue;
                            }
                            else
                            {
                                if (RaiseError != null)
                                    RaiseError(this,
                                    new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message = string.Format("No record ({0}) was found with the value specified", settings.FirstEntity)
                                    });

                                continue;
                            }
                        }

                        if (settings.SecondAttributeIsGuid)
                        {
                            secondGuid = new Guid(data[1]);
                        }
                        else
                        {
                            var records = service.RetrieveMultiple(new QueryExpression(settings.SecondEntity)
                            {
                                Criteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression(settings.SecondAttributeName, ConditionOperator.Equal,
                                            data[1])
                                    }
                                }
                            });

                            if (records.Entities.Count == 1)
                            {
                                secondGuid = records.Entities.First().Id;
                            }
                            else if (records.Entities.Count > 1)
                            {
                                if (RaiseError != null)
                                    RaiseError(this,
                                    new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message = string.Format("More than one record ({0}) were found with the value specified", settings.SecondEntity)
                                    });

                                continue;
                            }
                            else
                            {
                                if (RaiseError != null)
                                    RaiseError(this,
                                    new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message = string.Format("No record ({0}) was found with the value specified", settings.SecondEntity)
                                    });

                                continue;
                            }
                        }

                        var request = new DisassociateRequest
                        {
                            Target = new EntityReference(settings.FirstEntity, firstGuid),
                            Relationship = new Relationship(settings.Relationship),
                            RelatedEntities = new EntityReferenceCollection
                            {
                                new EntityReference(settings.SecondEntity, secondGuid)
                            }
                        };

                        if (request.Target.LogicalName == request.RelatedEntities.First().LogicalName)
                        {
                            request.Relationship.PrimaryEntityRole = EntityRole.Referenced;
                        }

                        service.Execute(request);

                        OnRaiseSuccess(new ResultEventArgs { LineNumber = lineNumber });
                    }
                    catch (FaultException<OrganizationServiceFault> error)
                    {
                        if (error.Detail.ErrorCode.ToString("X") == "80040237")
                        {
                            OnRaiseError(new ResultEventArgs { LineNumber = lineNumber, Message = "Relationship was not created because it already exists" });
                        }
                        else
                        {
                            OnRaiseError(new ResultEventArgs { LineNumber = lineNumber, Message = error.Message });
                        }
                    }
                }
            }
        }
Esempio n. 28
0
 private DisassociateResponse ExecuteInternal(DisassociateRequest request)
 {
     Disassociate(request.Target.LogicalName, request.Target.Id, request.Relationship, request.RelatedEntities);
     return(new DisassociateResponse());
 }
        public static void Should_Not_Find_Faked_N_To_N_Records_If_Disassociated_Again()
        {
            var fakedContext = new XrmFakedContext();
            var fakedService = fakedContext.GetFakedOrganizationService();

            var userId = new Guid("11111111-7982-4276-A8FE-7CE05FABEAB4");
            var businessId = Guid.NewGuid();

            var testUser = new SystemUser
            {
                Id = userId
            };

            var testRole = new Role
            {
                Id = new Guid("22222222-7982-4276-A8FE-7CE05FABEAB4"),
                Name = "Test Role",
                BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, businessId)
            };

            fakedContext.Initialize(new Entity[] { testUser, testRole });

            fakedContext.AddRelationship("systemuserroles_association", new XrmFakedRelationship
            {
                IntersectEntity = "systemuserroles",
                Entity1LogicalName = SystemUser.EntityLogicalName,
                Entity1Attribute = "systemuserid",
                Entity2LogicalName = Role.EntityLogicalName,
                Entity2Attribute = "roleid"
            });

            var request = new AssociateRequest()
            {
                Target = testUser.ToEntityReference(),
                RelatedEntities = new EntityReferenceCollection()
                {
                    new EntityReference(Role.EntityLogicalName, testRole.Id),
                },
                Relationship = new Relationship("systemuserroles_association")
            };

            fakedService.Execute(request);

            var disassociate = new DisassociateRequest
            {
                Target = testUser.ToEntityReference(),
                RelatedEntities = new EntityReferenceCollection()
                {
                    new EntityReference(Role.EntityLogicalName, testRole.Id),
                },
                Relationship = new Relationship("systemuserroles_association")
            };

            fakedService.Execute(disassociate);

            var query = new QueryExpression()
            {
                EntityName = "role",
                ColumnSet = new ColumnSet("name"),
                LinkEntities = {
                    new LinkEntity {
                        LinkFromEntityName = Role.EntityLogicalName,
                        LinkFromAttributeName = "roleid",
                        LinkToEntityName = SystemUserRoles.EntityLogicalName,
                        LinkToAttributeName = "roleid",
                        LinkCriteria = new FilterExpression {
                            FilterOperator = LogicalOperator.And,
                            Conditions = {
                                new ConditionExpression {
                                    AttributeName = "systemuserid",
                                    Operator = ConditionOperator.Equal,
                                    Values = { userId }
                                }
                            }
                        }
                    }
                }
            };

            var result = fakedService.RetrieveMultiple(query);
            Assert.Empty(result.Entities);
        }
        protected override string GetRequestDescription(OrganizationRequest request)
        {
            DisassociateRequest disassociateRequest = (DisassociateRequest)request;

            return(string.Format(Properties.Resources.Dynamics365DisassociateOperationRequestDescription, Entity.DisplayName, disassociateRequest.Target.Id, AssociatedEntity.DisplayName, disassociateRequest.RelatedEntities[0].Id));
        }
Esempio n. 31
0
        public void Delete()
        {
            using (var reader = new StreamReader(filePath, Encoding.Default))
            {
                string line;
                int    lineNumber = 0;
                while ((line = reader.ReadLine()) != null)
                {
                    lineNumber++;
                    try
                    {
                        var data = line.Split(',');

                        Guid firstGuid;
                        Guid secondGuid;

                        if (settings.FirstAttributeIsGuid)
                        {
                            firstGuid = new Guid(data[0]);
                        }
                        else
                        {
                            var records = service.RetrieveMultiple(new QueryExpression(settings.FirstEntity)
                            {
                                Criteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression(settings.FirstAttributeName, ConditionOperator.Equal,
                                                                data[0])
                                    }
                                }
                            });

                            if (records.Entities.Count == 1)
                            {
                                firstGuid = records.Entities.First().Id;
                            }
                            else if (records.Entities.Count > 1)
                            {
                                if (RaiseError != null)
                                {
                                    RaiseError(this,
                                               new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message    = string.Format("More than one record ({0}) were found with the value specified", settings.FirstEntity)
                                    });
                                }

                                continue;
                            }
                            else
                            {
                                if (RaiseError != null)
                                {
                                    RaiseError(this,
                                               new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message    = string.Format("No record ({0}) was found with the value specified", settings.FirstEntity)
                                    });
                                }

                                continue;
                            }
                        }

                        if (settings.SecondAttributeIsGuid)
                        {
                            secondGuid = new Guid(data[1]);
                        }
                        else
                        {
                            var records = service.RetrieveMultiple(new QueryExpression(settings.SecondEntity)
                            {
                                Criteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression(settings.SecondAttributeName, ConditionOperator.Equal,
                                                                data[1])
                                    }
                                }
                            });

                            if (records.Entities.Count == 1)
                            {
                                secondGuid = records.Entities.First().Id;
                            }
                            else if (records.Entities.Count > 1)
                            {
                                if (RaiseError != null)
                                {
                                    RaiseError(this,
                                               new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message    = string.Format("More than one record ({0}) were found with the value specified", settings.SecondEntity)
                                    });
                                }

                                continue;
                            }
                            else
                            {
                                if (RaiseError != null)
                                {
                                    RaiseError(this,
                                               new ResultEventArgs
                                    {
                                        LineNumber = lineNumber,
                                        Message    = string.Format("No record ({0}) was found with the value specified", settings.SecondEntity)
                                    });
                                }

                                continue;
                            }
                        }

                        var request = new DisassociateRequest
                        {
                            Target          = new EntityReference(settings.FirstEntity, firstGuid),
                            Relationship    = new Relationship(settings.Relationship),
                            RelatedEntities = new EntityReferenceCollection
                            {
                                new EntityReference(settings.SecondEntity, secondGuid)
                            }
                        };

                        if (request.Target.LogicalName == request.RelatedEntities.First().LogicalName)
                        {
                            request.Relationship.PrimaryEntityRole = EntityRole.Referenced;
                        }

                        service.Execute(request);

                        OnRaiseSuccess(new ResultEventArgs {
                            LineNumber = lineNumber
                        });
                    }
                    catch (FaultException <OrganizationServiceFault> error)
                    {
                        if (error.Detail.ErrorCode.ToString("X") == "80040237")
                        {
                            OnRaiseError(new ResultEventArgs {
                                LineNumber = lineNumber, Message = "Relationship was not created because it already exists"
                            });
                        }
                        else
                        {
                            OnRaiseError(new ResultEventArgs {
                                LineNumber = lineNumber, Message = error.Message
                            });
                        }
                    }
                }
            }
        }
Esempio n. 32
0
 public void Disassociate(string entityName, Guid entityId, Relationship relationship,
     EntityReferenceCollection relatedEntities)
 {
     if (relatedEntities.Count > 0)
     {
         var request = new DisassociateRequest
         {
             Target = CreateLookup(entityName, entityId),
             Relationship = relationship,
             RelatedEntities = relatedEntities
         };
         Execute(request);
     }
 }