Ejemplo n.º 1
0
        /// <summary>
        /// Simplifies getting values from Entity.FormattedValues collection
        /// <param name="attributeLogicalName">Attribute name</param>
        /// <returns>Attribute formated value</returns>
        public static String GetFormatedValue(this Entity entity, String attributeLogicalName)
        {
            CheckParam.CheckForNull(attributeLogicalName, nameof(attributeLogicalName));

            entity.FormattedValues.TryGetValue(attributeLogicalName, out string outValue);
            return(outValue);
        }
        /// <summary>
        /// RetrieveMultiple method override optimized for FetchExpression. Returns all pages using callback or 'yield' iterator
        /// </summary>
        /// <param name="query">A query that determines the set of record</param>
        /// <param name="callback">Optional function to be called for each record page</param>
        /// <returns>Entity set as 'yield' iterator</returns>
        public static IEnumerable <Entity> RetrieveMultiple(this IOrganizationService service, FetchExpression query, Action <EntityCollection> callback = null)
        {
            CheckParam.CheckForNull(query, nameof(query));

            EntityCollection collection = new EntityCollection
            {
                MoreRecords = true
            };

            /// For performance reasons it's better to load XML once
            XDocument document = XDocument.Parse(query.Query);

            while (collection.MoreRecords)
            {
                /// Paging start working if Page > 1
                query.NextPage(document, collection.PagingCookie);

                collection = service.RetrieveMultiple(query);
                callback?.Invoke(collection);

                foreach (Entity entity in collection.Entities)
                {
                    yield return(entity);
                }
            }
        }
        /// <summary>
        /// Delete method override. Deletes by Alternative key
        /// </summary>
        /// <param name="reference">Entity to delete</param>
        public static void Delete(this IOrganizationService service, string logicalName, KeyAttributeCollection keyAttributeCollection)
        {
            CheckParam.CheckForNull(logicalName, nameof(logicalName));
            CheckParam.CheckForNull(keyAttributeCollection, nameof(keyAttributeCollection));

            service.Execute(new DeleteRequest()
            {
                Target = new EntityReference(logicalName, keyAttributeCollection)
            });
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Update method override. Accept ConcurrencyBehavior parameter
        /// </summary>
        /// <param name="reference">Entity to delete</param>
        public static void Update(this IOrganizationService service, Entity entity, ConcurrencyBehavior concurrencyBehavior)
        {
            CheckParam.CheckForNull(entity, nameof(entity));

            service.Execute(new UpdateRequest()
            {
                Target = entity,
                ConcurrencyBehavior = concurrencyBehavior
            });
        }
        /// <summary>
        /// Delete method override. Deletes by Alternative key
        /// </summary>
        /// <param name="reference">Entity to delete</param>
        public static void Delete(this IOrganizationService service, string logicalName, string keyName, object keyValue)
        {
            CheckParam.CheckForNull(keyName, nameof(keyName));
            CheckParam.CheckForNull(keyValue, nameof(keyValue));

            KeyAttributeCollection keys = new KeyAttributeCollection();

            keys.Add(keyName, keyValue);

            service.Delete(logicalName, keys);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Retrieve method override. Retrieves by Alternative key
        /// </summary>
        /// <param name="keyName">Name of alternative key</param>
        /// <param name="keyValue">Key value</param>
        public static Entity Retrieve(this IOrganizationService service, string logicalName, string keyName, object keyValue, ColumnSet columnSet)
        {
            CheckParam.CheckForNull(keyName, nameof(keyName));
            CheckParam.CheckForNull(keyValue, nameof(keyValue));

            KeyAttributeCollection keys = new KeyAttributeCollection
            {
                { keyName, keyValue }
            };

            return(service.Retrieve(logicalName, keys, columnSet));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Retrieve method override. Retrieves by Alternative key
        /// </summary>
        /// <param name="keyName">Name of alternative key</param>
        /// <param name="keyValue">Key value</param>
        public static Entity Retrieve(this IOrganizationService service, string logicalName, KeyAttributeCollection keyAttributeCollection, ColumnSet columnSet)
        {
            CheckParam.CheckForNull(logicalName, nameof(logicalName));
            CheckParam.CheckForNull(keyAttributeCollection, nameof(keyAttributeCollection));

            RetrieveResponse response = service.Execute(new RetrieveRequest()
            {
                Target    = new EntityReference(logicalName, keyAttributeCollection),
                ColumnSet = columnSet
            }) as RetrieveResponse;

            return(response.Entity);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Simplifies getting values from linked entities attributes wrapped in AliasedValue class
        /// This kind of attributes can be queried by FetchExpression or QueryExpression using Linked Entities
        /// </summary>
        /// <typeparam name="T">Attribute value type</typeparam>
        /// <param name="attributeLogicalName">Optional. Attribute logical name</param>
        /// <param name="alias">>Entity alias used in LinkedEntity definition</param>
        /// <returns>Attribute value</returns>
        public static T GetAliasedValue <T>(this Entity entity, String attributeLogicalName, String alias)
        {
            CheckParam.CheckForNull(alias, nameof(alias));

            String       aliasedAttributeName = attributeLogicalName != null?  alias + "." + attributeLogicalName : alias;
            AliasedValue aliasedValue         = entity.GetAttributeValue <AliasedValue>(aliasedAttributeName);

            if (aliasedValue != null)
            {
                return((T)aliasedValue.Value);
            }
            else
            {
                return(default);
        /// <summary>
        /// Delete method override. Takes EntityReference as input parameter
        /// </summary>
        /// <param name="reference">Entity to delete</param>
        public static void Delete(this IOrganizationService service, EntityReference reference)
        {
            CheckParam.CheckForNull(reference, nameof(reference));

            /// Delete by id if possible as is supposed to be faster
            if (reference.Id != Guid.Empty)
            {
                service.Delete(reference.LogicalName, reference.Id);
            }
            /// Use alternative key
            else
            {
                service.Delete(reference.LogicalName, reference.KeyAttributes);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Retrieve method override. Takes EntityReference as input parameter
        /// </summary>
        /// <param name="reference">Entity to retrieve</param>
        public static Entity Retrieve(this IOrganizationService service, EntityReference reference, ColumnSet columnSet)
        {
            CheckParam.CheckForNull(reference, nameof(reference));

            /// Retrieve by id if possible as is supposed to be faster
            if (reference.Id != Guid.Empty)
            {
                return(service.Retrieve(reference.LogicalName, reference.Id, columnSet));
            }
            /// Use alternative key
            else
            {
                return(service.Retrieve(reference.LogicalName, reference.KeyAttributes, columnSet));
            }
        }
        /// <summary>
        /// Disassociate method override. Takes EntityReference as primary entity input parameter
        /// </summary>
        public static void Disassociate(this IOrganizationService service, EntityReference primaryEntity, Relationship relationship, EntityReferenceCollection relatedEntities)
        {
            CheckParam.CheckForNull(primaryEntity, nameof(primaryEntity));

            /// Disassociate by id if possible as is supposed to be faster
            if (primaryEntity.Id != Guid.Empty)
            {
                service.Disassociate(primaryEntity.LogicalName, primaryEntity.Id, relationship, relatedEntities);
            }
            /// Use alternative key
            else
            {
                service.Execute(new DisassociateRequest()
                {
                    Target          = primaryEntity,
                    Relationship    = relationship,
                    RelatedEntities = relatedEntities
                });
            }
        }
        /// <summary>
        /// Universal RetrieveMultiple method override. Returns all pages using callback or 'yield' iterator
        /// </summary>
        /// <param name="query">A query that determines the set of record</param>
        /// <param name="callback">Optional function to be called for each record page</param>
        /// <returns>Entity set as 'yield' iterator</returns>
        public static IEnumerable <Entity> RetrieveMultiple(this IOrganizationService service, QueryBase query, Action <EntityCollection> callback = null)
        {
            CheckParam.CheckForNull(query, nameof(query));

            EntityCollection collection = new EntityCollection
            {
                MoreRecords = true
            };

            while (collection.MoreRecords)
            {
                /// Paging start working if Page > 1
                query.NextPage(collection.PagingCookie);

                collection = service.RetrieveMultiple(query);
                callback?.Invoke(collection);

                foreach (Entity entity in collection.Entities)
                {
                    yield return(entity);
                }
            }
        }
        /// <summary>
        /// Delete method override. Takes Entity as input parameter
        /// </summary>
        /// <param name="entity">Entity to delete</param>
        public static void Delete(this IOrganizationService service, Entity entity)
        {
            CheckParam.CheckForNull(entity, nameof(entity));

            service.Delete(entity.ToEntityReference(true));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Execute method override. Returns OrganizationResponse as the specified type
        /// </summary>
        public static T Execute <T>(this IOrganizationService service, OrganizationRequest request) where T : OrganizationResponse
        {
            CheckParam.CheckForNull(request, nameof(request));

            return(service.Execute(request) as T);
        }