private static void AssertOpportunityProductHasUoM(Entity entity, DelayedException exception) { if (entity.GetAttributeValue <EntityReference>(OpportunityProduct.Fields.UoMId) == null) { exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.MissingUomId); } }
private static void AssertIncidentHasCustomer(Entity entity, DelayedException exception) { if (entity.GetAttributeValue <EntityReference>(Incident.Fields.CustomerId) == null) { exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.unManagedidsincidentparentaccountandparentcontactnotpresent); } }
private static void AssertConnectionRolesAreAssociated(LocalCrmDatabaseOrganizationService service, Entity entity, bool isUpdate, DelayedException exception) { var role1 = entity.GetAttributeValue <EntityReference>(Connection.Fields.Record1RoleId); var role2 = entity.GetAttributeValue <EntityReference>(Connection.Fields.Record2RoleId); if (isUpdate) { if (role1 == null && role2 == null) { // Role never got set, exit return; } if (role1 == null || role2 == null) { // One is null, attempt to populate it var dbVersion = service.Retrieve(entity.LogicalName, entity.Id, new ColumnSet(true)); var dbRole1 = dbVersion.GetAttributeValue <EntityReference>(Connection.Fields.Record1RoleId); var dbRole2 = dbVersion.GetAttributeValue <EntityReference>(Connection.Fields.Record2RoleId); if (role1 == null) { role1 = role2.NullSafeEquals(dbRole1) ? dbRole2 : dbRole1; } else { role2 = role1.NullSafeEquals(dbRole2) ? dbRole1 : dbRole2; } } } if (role1 == null || role2 == null) { return; } var qe = new QueryExpression { ColumnSet = new ColumnSet(true), EntityName = ConnectionRoleAssociation.EntityLogicalName }; qe.First().WhereEqual( ConnectionRoleAssociation.Fields.ConnectionRoleId, role1.Id, ConnectionRoleAssociation.Fields.AssociatedConnectionRoleId, role2.Id, LogicalOperator.Or, ConnectionRoleAssociation.Fields.ConnectionRoleId, role2.Id, ConnectionRoleAssociation.Fields.AssociatedConnectionRoleId, role1.Id); if (!service.RetrieveMultiple(qe).Entities.Any()) { exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.UnrelatedConnectionRoles); } }
private static bool AssertValidQueryByAttribute(QueryByAttribute query, DelayedException delay) { if (!query.Attributes.Any()) { delay.Exception = CrmExceptions.GetFaultException(ErrorCodes.QueryBuilderByAttributeNonEmpty); return(true); } if (query.Attributes.Count != query.Values.Count) { delay.Exception = CrmExceptions.GetFaultException(ErrorCodes.QueryBuilderByAttributeMismatch); return(true); } return(false); }
/// <summary> /// Simulates CRM update action preventions. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="service">The service.</param> /// <param name="entity">The entity.</param> /// <param name="exception">The exception.</param> /// <returns></returns> private static bool SimulateCrmUpdateActionPrevention <T>(LocalCrmDatabaseOrganizationService service, T entity, DelayedException exception) where T : Entity { #if Xrm2015 return(false); #endif switch (entity.LogicalName) { case Incident.EntityLogicalName: if (service.CurrentRequestName != new CloseIncidentRequest().RequestName&& entity.GetAttributeValue <OptionSetValue>(Incident.Fields.StateCode).GetValueOrDefault() == (int)IncidentState.Resolved) { // Not executing as a part of a CloseIncidentRequest. Disallow updating the State Code to Resolved. exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.UseCloseIncidentRequest); return(true); } break; } return(false); }
private static void AssertConnectionRolesArePopulated(Entity entity, bool isUpdate, DelayedException exception) { var record1Null = (entity.GetAttributeValue <EntityReference>(Connection.Fields.Record1RoleId) ?? entity.GetAttributeValue <EntityReference>(Connection.Fields.Record1Id)) == null; var record2Null = (entity.GetAttributeValue <EntityReference>(Connection.Fields.Record2RoleId) ?? entity.GetAttributeValue <EntityReference>(Connection.Fields.Record2Id)) == null; var aConnectionIsMissing = record1Null || record2Null; if (isUpdate) { var containsRecord1 = entity.Contains(Connection.Fields.Record1Id) || entity.Contains(Connection.Fields.Record1RoleId); var containsRecord2 = entity.Contains(Connection.Fields.Record2Id) || entity.Contains(Connection.Fields.Record2RoleId); aConnectionIsMissing = containsRecord1 && record1Null || containsRecord2 && record2Null; } if (aConnectionIsMissing) { exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.BothConnectionSidesAreNeeded); } }