Esempio n. 1
0
        /// <summary>
        /// Loads structured data for the specified entity.
        /// </summary>
        /// <param name="entityId">The entity to load.</param>
        /// <param name="request">The description of fields and related entities to load.</param>
        /// <returns>The requested data. Or null if the entity does not exist.</returns>
        /// <exception cref="PlatformSecurityException">
        /// The user lacks read access to the given entity.
        /// </exception>
        public EntityData GetEntityData(EntityRef entityId, EntityMemberRequest request)
        {
            try
            {
                // Validate input
                if (entityId == null)
                {
                    throw new ArgumentNullException("entityId");
                }

                try
                {
                    long id = entityId.Id;  // ensure we can resolve any alias
                }
                catch (ArgumentException)
                {
                    return(null);    // alias does not exist .. return null
                }

                request = ValidateRequest(request);

                // Place request
                var resultList = GetEntitiesData(entityId.ToEnumerable(), request, SecurityOption.DemandAll);

                var result = resultList.FirstOrDefault();
                return(result);
            }
            catch (Exception ex)
            {
                EventLog.Application.WriteError("Failed GetEntityData. Entity: #{0}\nRequest details:\n{1}\n\nException:\n{2}",
                                                entityId, request == null ? "null" : request.Debug(), ex);
                throw;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Runs a query and returns all entities that match the query.
        /// </summary>
        /// <param name="query">The query to execute. Do not specify columns or ordering. Only specify conditions and a root entity (and any joins required to apply the condition).</param>
        /// <param name="request">The description of fields and related entities to load.</param>
        /// <returns>The requested data for all entities matched by the query.</returns>
        public IEnumerable <EntityData> QueryEntityData(StructuredQuery query, EntityMemberRequest request)
        {
            try
            {
                // Validate input
                if (query == null)
                {
                    throw new ArgumentNullException("query");
                }
                if (query.SelectColumns.Count > 0)
                {
                    throw new ArgumentException("query.SelectColumns must be empty", "query");
                }
                request = ValidateRequest(request);

                // Create context
                Context context = new Context();

                // Query for top-level entities
                IEntityRef[]          members  = RequestedMembers(request, context);
                IEnumerable <IEntity> entities = Entity.GetMatches(query, members);

                // Fill data
                IEnumerable <EntityData> result = PackageEntities(context, request, entities, true);

                var list = result.Where(e => e != null).ToList();
                return(list);
            }
            catch (Exception ex)
            {
                string xml = "";
                try { xml = EDC.ReadiNow.Metadata.Query.Structured.StructuredQueryHelper.ToXml(query); }
                catch { }
                EventLog.Application.WriteError("Failed QueryEntityData:\nRequest:\n{0}\n\nQuery:\n{1}\n\nException:\n{2}",
                                                request == null ? "null" : request.Debug(), xml, ex);
                throw;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Loads structured data for the specified entity.
        /// </summary>
        /// <param name="entityIds">The IDs of the entities to load.</param>
        /// <param name="request">The description of fields and related entities to load.</param>
        /// <param name="securityOption">How to handle access denied situations.</param>
        /// <returns>The requested data.</returns>
        /// <exception cref="PlatformSecurityException">
        /// Thrown if the user lacks read access to the given entities and <paramref name="securityOption"/> is <see cref="SecurityOption.DemandAll"/>.
        /// </exception>
        public IEnumerable <EntityData> GetEntitiesData(IEnumerable <EntityRef> entityIds, EntityMemberRequest request, SecurityOption securityOption = SecurityOption.SkipDenied)
        {
            try
            {
                if (entityIds == null)
                {
                    throw new ArgumentNullException("entityIds");
                }
                if (entityIds.Any(e => e == null))
                {
                    throw new ArgumentNullException("entityIds", "One of the entityIds was null.");
                }
                request = ValidateRequest(request);

                // Create context
                Context context = new Context();

                // Load top-level entities
                IEntityRef[]          members  = RequestedMembers(request, context);
                IEnumerable <IEntity> entities = Entity.Get(entityIds, false, securityOption, true, members);

                // Fill data
                IEnumerable <EntityData> result = PackageEntities(context, request, entities, true);

                var list = result.Where(e => e != null).ToList();
                return(list);
            }
            catch (Exception ex)
            {
                if (entityIds != null)
                {
                    string.Join(", ", entityIds);
                }
                EventLog.Application.WriteError("Failed GetEntitiesData:\n{0}\nRequest:\n{1}\n\nException:\n{2}",
                                                entityIds, request == null ? "null" : request.Debug(), ex);
                throw;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Loads structured data for the specified entities.
        /// This is an internal helper method and is not exposed as a service method.
        /// </summary>
        /// <param name="entities">The entities.</param>
        /// <param name="request">The description of fields and related entities to load.</param>
        /// <returns>
        /// The requested data.
        /// </returns>
        /// <exception cref="System.ArgumentNullException">
        /// entities
        /// or
        /// entities;One of the entities was null.
        /// </exception>
        internal IEnumerable <EntityData> ToEntitiesData(IEnumerable <IEntity> entities, EntityMemberRequest request)
        {
            try
            {
                if (entities == null)
                {
                    throw new ArgumentNullException("entities");
                }
                if (entities.Any(e => e == null))
                {
                    throw new ArgumentNullException("entities", "One of the entities was null.");
                }
                request = ValidateRequest(request);

                // Create context
                Context context = new Context();

                // Load top-level entities
                IEntityRef[] members = RequestedMembers(request, context);

                // Fill data
                IEnumerable <EntityData> result = PackageEntities(context, request, entities, true);

                var list = result.Where(e => e != null).ToList();
                return(list);
            }
            catch (Exception ex)
            {
                List <EntityRef> entityRefs = new List <EntityRef>();

                if (entities != null)
                {
                    entityRefs = entities.Select(e => new EntityRef(e as Entity)).ToList();
                }

                string.Join(", ", entityRefs);
                EventLog.Application.WriteError("Failed GetEntitiesData:\n{0}\nRequest:\n{1}\n\nException:\n{2}",
                                                entityRefs, request == null ? "null" : request.Debug(), ex);
                throw;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Loads structured data for all entities of the specified type.
        /// </summary>
        /// <param name="entityType">The type of the entities to be loaded.</param>
        /// <param name="includeDerivedTypes">If true, then instances of types that directly or indirectly derive from 'entityType' are also returned.</param>
        /// <param name="request">The description of fields and related entities to load.</param>
        /// <returns>All instances of type 'entityType', and optionally all instances of types that derive from 'entityType'.</returns>
        public IEnumerable <EntityData> GetEntitiesByType(EntityRef entityType, bool includeDerivedTypes, EntityMemberRequest request)
        {
            // Note: this is only called by the legacy entity info service.

            try
            {
                if (entityType == null)
                {
                    throw new ArgumentNullException("entityType");
                }
                request = ValidateRequest(request);

                // Create context
                Context context = new Context();

                // Load top-level entities
                IEntityRef[]          members  = RequestedMembers(request, context);
                IEnumerable <IEntity> entities = Entity.GetInstancesOfType(entityType, includeDerivedTypes);

                // Fill data
                IEnumerable <EntityData> result = PackageEntities(context, request, entities, true);

                var list = result.Where(e => e != null).ToList();
                return(list);
            }
            catch (Exception ex)
            {
                EventLog.Application.WriteError("Failed GetEntitiesByType:\n{0}\nRequest:\n{1}\n\nException:\n{2}",
                                                entityType, request == null ? "null" : request.Debug(), ex);
                throw;
            }
        }