Team Expansion
When workflow activities are assigned to Team roles, the system automatically expands team membership to create individual assignments for member of the team.
Team Assignment Resolution
Team Membership Expansion:
- Activities may be assigned to a single user, a group, or a Team role.
- If a Team role is used, the system looks up all members of that Team.
- Each member receives their own Activity Assignment.
Resolution Timing:
- Team expansion occurs when the workflow is created, before any Workflow Assignment Rules (WARs) execute
- By the time WARs run, any Team roles assigned to activities have already been expanded into individual Identity assignments
What Administrators Should Expect
Static Membership
- Team membership used for assignments is locked in when the workflow starts.
- Changes to the Team afterward do not update existing assignments.
- New members won’t receive assignments already created.
- Removed members keep the assignments they had.
Assignment Items Always Reference Identities
- Activity assignments always reference Identity items (individual users or groups), never directly to Team roles.
- To filter by specific team role (e.g., “Team Manager”, “Team Member”), query the team_role property in the Team Identity relationship
Best Practices
Use Teams for Consistent Patterns:
- Define teams for recurring assignment patterns (e.g., “Engineering Managers”, “Quality Reviewers”)
- Reference teams in rule logic rather than hard-coding individual users
- Maintain team membership centrally for easier administration
Consider Team Size Impact:
- Large teams create many individual assignments, which may impact workflow complexity
- Review team size before using teams in high-frequency workflows
- Consider using dynamic assignment rules to filter team members based on additional criteria
Document Team Requirements:
- Include team membership requirements in rule descriptions
- Document which teams are expected to exist for rules to function correctly
- Communicate team structure dependencies to Change Administrators
Query Teams in Rules Sample:
- If rules depend on Team roles, query the team during the WAR execution and create assignments explicitly
// Example: Query Team members with specific role and create assignmentsInnovator inn = this.getInnovator();
string activityId = this.getID(); // Assuming Target = Activity
// Apply business logic to determine Team ID, e.g. team assigned to context item
// ... your custom logic here ...
Item team = inn.newItem(“Team”, “get”);team.setID(teamId);team.setAttribute(“select”, “id ");
// Query Team Identity relationships filtered by Team Manager roleItem teamIdentityRel = team.createRelationship(“Team Identity”, “get”);teamIdentityRel.setAttribute(“select”, “related_id”);Item teamRole = teamIdentityRel.createPropertyItem(“team_role”, “Identity”, “get”);teamRole.setProperty(“name”, “Team Manager”);
team = team.apply();
if (team.isError()){return inn.newError(“Failed to get Team: " + team.getErrorDetail());}
// Iterate through Team Identity relationships to get Team Manager IdentitiesItem teamIdentities = team.getRelationships(“Team Identity”);int managerCount = teamIdentities.getItemCount();
if (managerCount == 0){return inn.newResult(“No Team Managers found in team”);}
for (int i = 0; i < managerCount; i++){Item teamIdentityRel = teamIdentities.getItemByIndex(i);string managerIdentityId = teamIdentityRel.getProperty(“related_id”);
// Create assignment for this Team Manager IdentityItem assignment = inn.newItem(“Activity Assignment”, “add”);assignment.setProperty(“source_id”, activityId);assignment.setProperty(“related_id”, managerIdentityId);assignment.setProperty(“voting_weight”, “100");assignment = assignment.apply();
if (assignment.isError()){return inn.newError(“Failed to assign Team Manager: " + assignment.getErrorDetail());}}
return inn.newResult(“Assigned " + managerCount + " Team Manager(s) to activity”);