Recipes & Patterns
4 min
HR to User Lifecycle Connector
Goal: Synchronise an HR feed into Activate to automatically create, move, and disable users.
<workflow>
<clearImport />
<import>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.ImportSql</provider>
<connectionString>Server=SQL01;Integrated Security=true;Initial Catalog=HRDB;</connectionString>
<sql>EXEC dbo.GetActiveEmployees</sql>
</import>
<processImport />
<process>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.UserChangeHandler</provider>
<user>
<link name="User Account">
<scope>=//Roles/System Roles/Users</scope>
<match when="employeeNumber">(employeeNumber=%=//Current/employeeNumber%)</match>
</link>
<enabled>=/isActive</enabled>
</user>
<events>
<create>
<submit>
<task>=//Tasks/User/Create User</task>
<arguments>
<user>
<firstName>%=//Current/firstName%</firstName>
<lastName>%=//Current/lastName%</lastName>
<email>%=//Current/email%</email>
</user>
</arguments>
</submit>
</create>
<delete>
<submit>
<task>=//Tasks/User/Disable User</task>
<arguments>
<user>=//User</user>
</arguments>
</submit>
</delete>
</events>
</process>
</workflow>
Department Hierarchy to Role Tree
Goal: Build a complete Activate Role structure from department hierarchy data.
<workflow>
<clearImport />
<import>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.ImportText</provider>
<fileName>C:\Imports\departments.csv</fileName>
<headers>true</headers>
</import>
<processImport />
<process>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.RoleChangeHandler</provider>
<role>
<root>=//Roles/Departments</root>
<key>DepartmentCode</key>
<field>departmentCode</field>
<parent>parentCode</parent>
<name>=/department</name>
<parameters>
<departmentCode name="DepartmentCode" type="String">=/departmentCode</departmentCode>
</parameters>
<events>
<missing>
<createRole>
<description>Created by import %=//System/Now%</description>
</createRole>
</missing>
</events>
</role>
</process>
</workflow>
Ticket Synchronisation Example
Goal: Synchronise external service desk tickets and update state in Activate.
<workflow>
<clearImport />
<import>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.ImportSql</provider>
<connectionString>Server=SQL01;Integrated Security=true;Initial Catalog=Tickets;</connectionString>
<sql>SELECT * FROM ExternalTickets</sql>
</import>
<processImport />
<process>
<provider>Innovation.Activate.Library\Innovation.Activate.Connectors.ServiceDeskTicketChangeHandler</provider>
<ticket>
<match field="ticketNumber">=/ticketNumber</match>
</ticket>
<events>
<update>
<ticket>
<ticketNumber>=/ticketNumber</ticketNumber>
<state>=/state</state>
<status>=/status</status>
<notes>=/notes</notes>
</ticket>
</update>
</events>
</process>
</workflow>
Combining Connectors
- Use multiple connectors to manage different domains (e.g., HR → Users, Departments → Roles, Tickets → Service Desk).
- Keep imports lightweight by focusing each connector on a single purpose.
- Chain connectors via scheduled workflows for dependent updates.
Testing Patterns
- Run connectors with small datasets until results are validated.
- Use processImport/maxChanges guardrails.
- Monitor connector data tables directly for unexpected deletions.
- Trigger a manual workflow run before enabling schedules.