예제 #1
0
 private static void AssertOpportunityProductHasUoM(Entity entity, DelayedException exception)
 {
     if (entity.GetAttributeValue <EntityReference>(OpportunityProduct.Fields.UoMId) == null)
     {
         exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.MissingUomId);
     }
 }
예제 #2
0
 private static void AssertIncidentHasCustomer(Entity entity, DelayedException exception)
 {
     if (entity.GetAttributeValue <EntityReference>(Incident.Fields.CustomerId) == null)
     {
         exception.Exception = CrmExceptions.GetFaultException(ErrorCodes.unManagedidsincidentparentaccountandparentcontactnotpresent);
     }
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
 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);
 }
예제 #5
0
        /// <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);
        }
예제 #6
0
        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);
            }
        }