/// <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); }); }
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); } }
//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); } }
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); }
/// <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); }
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 }
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); }
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)); }
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); }
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)); }
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)); }); }
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 }
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); }
/// <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)); }; }
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(); } }
/// <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)); }
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); }
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 }); } } } } }
private DisassociateResponse ExecuteInternal(DisassociateRequest request) { Disassociate(request.Target.LogicalName, request.Target.Id, request.Relationship, request.RelatedEntities); return(new DisassociateResponse()); }
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)); }
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 }); } } } } }