The sources section of a Nextedy POWERSHEET sheet configuration defines an array of data source objects that specify which entities to load from Polarion and how to traverse relationships via expans
Sources are the bridge between the domain model (which defines entity types and relationships) and the sheet columns (which define how data is displayed). The domain model declares what entities and relationships exist; sources declare which of those entities to load and which relationships to expand; columns declare how to render the resulting data.
Understanding how sources connect to the domain model and columns is essential. See Cardinality for the full relationship between these three configuration layers.
Default property values applied when creating new entities from this source. See Entity Factory.
Source Ordering
The first source in the array (sources[0]) is the primary data source for the sheet. Additional sources can define secondary entity types for multi-type configurations.
The where property supports dynamic value expressions using the () => syntax. The predicate value is evaluated at runtime, allowing queries that depend on document parameters, the current date, or other context values.The resulting value must match the expected type for the property being filtered. For example, date comparisons require ISO 8601 format strings.Static filter example:
Dynamic expressions must be valid JavaScript arrow functions starting with () =>. The resulting value must be in the correct format for the property type. For dates, always use .toISOString() in the expression to produce a properly formatted string.
The expand array defines which related entities to load by traversing navigation properties declared in the domain model relationships. Expansion paths determine the hierarchical depth of the sheet and directly control which columns can be bound to the loaded data.
Property
Type
Required
Default
Description
expand[].name
string
Yes
None
Navigation property name to expand. Must match a direct or back name from the domain model relationships.
expand[].expand
array
No
None
Nested expansion for loading multi-level relationships. Same structure as the parent expand.
expand[].entityFactory
object
No
None
Default values for new entities created at this expansion level. See Entity Factory.
Here chapter is a direct navigation property from the domain model, loading the single parent Chapter entity for each UserNeed.1:N example (each Chapter has many child UserNeed entities):
For many-to-many (M:N) relationships, or when building deep hierarchies, use nested expand entries. M:N relationships use an association entity, so the expansion path traverses two levels: the association collection and then the target entity.
This creates a four-level hierarchy: UserNeed > SystemRequirement (via M:N association) > DesignRequirement (via M:N association). Each M:N hop requires two expand levels: one for the association collection (systemRequirements) and one for the target entity (systemRequirement).
There is no hard limit on nesting depth, but deeper hierarchies increase data load and rendering time. A typical RTM configuration uses 3-5 expansion levels.
The entityFactory object defines default property values that are automatically applied when a user creates a new entity from the sheet. This can be specified at the source level (for root entities) or within an expand entry (for child entities at that expansion level).
Property
Type
Required
Default
Description
entityFactory
object
No
None
Key-value pairs where each key is a property name and each value is the default. Values can be strings, numbers, booleans, or null.
In this example, new UserNeed entities default to severity: "medium" and status: "draft", while new association entities at the systemRequirements level default to status: "proposed".
Entity factory values support dynamic value expressions using the () => syntax, allowing defaults that reference document parameters or computed values:
entityFactory: Client: "() => context.parameters.client" CreatedDate: "() => new Date().toISOString()"
A sheet configuration can define multiple sources to load different root entity types. Each source operates independently with its own query, expansion paths, and entity factory defaults.
When using multiple sources, the sheet displays each source’s entities as separate root-level groups. Column bindings must account for which source provides which properties. See Multi-Item Columns for handling columns across different entity types.
Sheet configurations (including sources) can be defined at two scopes:
Scope
Location
Behavior
Project
Project SVN repository
Available only to the specific project. Listed without suffix in the configuration picker.
Global
Global configuration directory
Available to all projects. Listed with a (Global) suffix in the configuration picker.
Both global and project-specific configurations are discovered automatically and presented in the Administration > Nextedy POWERSHEET configuration interface. No default configuration is predefined; administrators must explicitly select a configuration for each document.
Sources do not exist in isolation. They connect to several other sheet configuration sections:
Columns: Column binding paths (the key of each column entry) must align with the navigation properties defined in the source expansion paths. A column key like systemRequirements.systemRequirement.title requires that the source expands through systemRequirements and then systemRequirement.
Views: Views override column visibility but do not change source definitions. The same sources feed all views.
Formatters: Formatters apply conditional styling to cells. The context.item available in formatter expressions refers to entities loaded by the sources.
Sort By: Client-side sorting is applied after source data is loaded. The columnId in sortBy entries must reference columns that are bound to source data.
Binding Syntax: The dot-notation paths used in column keys directly mirror the navigation property names from source expansion paths.
Begin with a minimal single-source configuration and extend incrementally. Jumping directly to complex multi-source, multi-level configurations leads to hard-to-diagnose errors. Validate each expansion level before adding the next.
Match expand to columns: Every column binding path that traverses a navigation property requires a corresponding expand entry in the source. A missing expand results in empty columns.
Use entity factories for required fields: If the target Polarion work item type has required custom fields, set defaults in entityFactory to avoid save validation errors.
Limit query scope with where: Use filter predicates to reduce the number of root entities loaded, improving sheet load performance.
Name sources descriptively: Use meaningful id values (e.g., user_needs, hazards) rather than generic names. The title property provides the human-readable label in the UI.