/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }