Schema

The UMI Processor Service can process any XML file, irrespective of source, providing that the structure of the file adheres to the definition required.

The file shown below is a fully documented XML schema detailing the elements and attributes, required and optional, that are expected in a valid file containing User profiles. You can copy the text below into a file in order to validate the XML you're process is producing, or take a look below.

📘

From update 55 (released in Jan 2020), it's now possible to apply blank values to some user profile fields. This means that profile field values can now be cleared, as well as updated.

In order to do this, simply add an attribute named 'applyBlank' with a value of 'True' to the relevant elements. (Please this option is not available within all elements)

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:annotation>
		<xs:documentation>
			This is the definition of the User Profile Data File for Interact.
		</xs:documentation>
	</xs:annotation>
	<xs:element name="syncdata">
		<xs:complexType>
			<xs:annotation>
				<xs:documentation>
					The syncdata element is the root element of the file.
					The version attribute is the version of the schema, matched to a particular Interact release version. Current version = 1.
				</xs:documentation>
			</xs:annotation>
			<xs:sequence>
				<xs:element name="syncoptions">
					<xs:complexType>
						<xs:annotation>
							<xs:documentation>
								The syncoptions element holds a number of options related to the processing of the XML file.
								The domain attribute must match the Name in the configured Profile Source.
								The ldapId attribute is the unique Id associated with the Source created in Interact. This value must match on all synchronizations once a User is in Interact.
							</xs:documentation>
						</xs:annotation>
						<xs:sequence>
							<xs:element maxOccurs="unbounded" name="option">
								<xs:complexType>
									<xs:annotation>
										<xs:documentation>
											Each option has a name and a value:
											name = syncCompanies - value = True or False - indicates if Company values should be taken from file data
											name = syncLocations - True or False - indicates if Location values should be taken from file data
											name = syncDepartments - True or False - indicates if Department values should be taken from file data
											name = syncManagers - True or False - indicates if Manager values should be taken from file data
											name = actionDisabledUsers - 'd' (disable only), 'a' (archive), 'x' (do nothing) - action taken for disabled User accounts
											name = actionMissingDeletedUsers - 'd' (disable only), 'a' (archive), 'x' (do nothing) - action taken for missing User accounts
											name = loginType - 0 (Interact User), 1 (Windows User), 2 (SAML) - loginType to apply to new Users
											name = defaultCulture - integer referencing an Id in the Interact CULTURE table - culture to apply to new Users
											name = defaultCompany - integer referencing an Id in the Interact ORGANISATION table - default Company to apply - optional
											name = defaultDepartment - integer referencing an Id in the Interact ORGANISATION table - default Department to apply - optional
											name = defaultLocation - integer referencing an Id in the Interact ORGANISATION table - default Location to apply - optional
											name = newUserPasswordBehaviour = string describing the approach to the password in a new profile - optional
													'strict' takes the supplied password and applies strength checks as the PERSON row is saved
													'random' generates a random password
													'blank' saves a blank password - this is the default option if the element is not supplied
										</xs:documentation>
									</xs:annotation>
									<xs:simpleContent>
										<xs:extension base="xs:string">
											<xs:attribute name="name" type="xs:string" use="required" />
										</xs:extension>
									</xs:simpleContent>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="domain" type="xs:string" use="required" />
						<xs:attribute name="ldapid" type="xs:integer" use="required" />
					</xs:complexType>
				</xs:element>
				<xs:element name="users">
					<xs:complexType>
						<xs:annotation>
							<xs:documentation>
								The users element holds a sequence of user elements.
								The TotalUsers attribute is a count of the user elements. It is informational.
							</xs:documentation>
						</xs:annotation>
						<xs:sequence>
							<xs:element name="user">
								 <xs:complexType>
									<xs:annotation>
										<xs:documentation>
											The user element holds information for each user.

											When importing a user into Interact, the Processor will attempt to find an existing user based on 
												four pieces of data in the following order: uid, dn, username, email

											If any element is not available from the source of data, or a particular element is required to be
												used for matching, the other elements can be set as empty strings.

											- uid attribute:      a unique, unchanging Id for the user.
											- dn attribute:       the distinguished name attribute from Active Directory if used. This can be an empty string.
											- username attribute: the Interact Username.
											- email attribute:    the email address for the user including the domain suffix. This can be an empty string.

											The statusEnabled element indicates whether the user is Active or not: True or False.
											The password element is a string value in the case when a user is Local.
											The culture element is a integer value based on the contents of the CULTURE table in the 
												Interact database. Typically this is 1 for English UK and 2 for English US.
											The language element is an integer value based on the contents of the INTERACTLANGUAGE table in the 
												Interact database. Typically this is 0 for English and 1 for English US.
										</xs:documentation>
									</xs:annotation>
									<xs:sequence>
										<xs:element name="person">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="firstname" type="xs:string" />
													<xs:element name="surname" type="xs:string" />
													<xs:element name="title">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="initials" >
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="jobtitle">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="phone">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="mobile">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="fax">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="extension">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
													<xs:element name="address">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
										<xs:element name="statusenabled" type="xs:boolean"/>
										<xs:element name="password" type="xs:string" />
										<xs:element name="jobstartdate" type="xs:date" minOccurs="0" />
										<xs:element name="dateofbirth" type="xs:date" minOccurs="0" />
										<xs:element name="culture" type="xs:string" />
										<xs:element name="language">
											<xs:complexType>
												<xs:attribute name="id" type="xs:integer" use="required" />
											</xs:complexType>
										</xs:element>
										<xs:element name="timezone" type="xs:string" minOccurs="0" />
										<xs:element name="bio" minOccurs="0" >
											<xs:complexType>
												<xs:simpleContent>
													<xs:extension base="xs:string">
														<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
													</xs:extension>
												</xs:simpleContent>
											</xs:complexType>
										</xs:element>
										<xs:element name="additionalfields">
											<xs:complexType>
												<xs:annotation>
													<xs:documentation>
														The Additional Fields element holds information mapping to Interact Additional Fields.

														Additional Fields must be created on your site from 
															`Appliation Settings > Manage People > Manage Additional Information` before accepting user data.
														The name of each element matches the name of the field as created on your site, but in "snake case." 
															(e.g. `Employee ID` would become `employee_id`).

														The value is the incoming value for this field: three data types are handled in the database, all passed as strings.
														Additional field date type formatted as: 0|mm/dd/yyyy||||||||.
														Additional field boolean type formatted as True or False.
														Additional field string type passed as a string.
													</xs:documentation>
												</xs:annotation>
												<xs:sequence>
													<xs:element minOccurs="0" maxOccurs="unbounded" name="field">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="name" type="xs:string" use="required" />
																	<xs:attribute name="applyBlank" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
										<xs:element name="manager">
											<xs:complexType>
												<xs:annotation>
													<xs:documentation>
														The manager element holds information for the manager for a user.

														When assigning a manager to a user in Interact the Processor will attempt to find an existing 
															manager user based on the four pieces of data supplied below.
														It will use the four elements in order; uid, dn, username, email.
														NOTE: If any element is not available from the source of data, or a particular element is required 
															to be used for matching, the other elements can be set as empty strings.
														The uid attribute is a unique, unchanging Id for the user in the form of a Guid. This can be an empty string.
														The dn attribute is the distinguished name attribute from Active Directory if used. This can be an empty string.
														The username attribute is the Interact Username. This can be an empty string.
														The email attribute is the email address for the user including the domain suffix. This can be an empty string.


													</xs:documentation>
												</xs:annotation>
												<xs:attribute name="uid" type="xs:string" use="required" />
												<xs:attribute name="dn" type="xs:string" use="required" />
												<xs:attribute name="username" type="xs:string" use="optional" />
												<xs:attribute name="email" type="xs:string" use="optional" />
											</xs:complexType>
										</xs:element>
										<xs:element name="organisations">
											<xs:complexType>
												<xs:annotation>
													<xs:documentation>
														The organisations element is a sequence of organisation elements.
													</xs:documentation>
												</xs:annotation>
												<xs:sequence>
													<xs:element minOccurs="0" maxOccurs="unbounded" name="organisation">
														<xs:complexType>
															<xs:annotation>
																<xs:documentation>
																	Values of organisation type are department, location or company.
																	The value is the Id of the organisation row.
																	The primary attribute is optional: True or False. If set to false, the user will be assigned this as an additional department, location or company.
																</xs:documentation>
															</xs:annotation>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="type" type="xs:string" use="required" />
																	<xs:attribute name="primary" type="xs:boolean" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="uid" type="xs:string" use="required" />
									<xs:attribute name="dn" type="xs:string" use="required" />
									<xs:attribute name="username" type="xs:string" use="required" />
									<xs:attribute name="email" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="TotalUsers" type="xs:integer" use="required" />
					</xs:complexType>
				</xs:element>
				<xs:element name="groups">
					<xs:complexType>
						<xs:annotation>
							<xs:documentation>
								The groups element is a sequence of group elements.
								The TotalUsers attribute is a count of the user elements in all groups.
								The TotalGroups attribute is a count of the group.
							</xs:documentation>
						</xs:annotation>
						<xs:sequence>
							<xs:element minOccurs="1" maxOccurs="unbounded" name="group">
								<xs:complexType>
									<xs:annotation>
										<xs:documentation>
											The group element holds a users element.
											The UserCount attribute is a count of the user elements in the group. It is informational.
											The uid attribute is a unique, unchanging Id for the group in the form of a Guid.
											The dn attribute is the distinguished name attribute from Active Directory.
											The name attribute is the Interact Group name.
										</xs:documentation>
									</xs:annotation>
									<xs:sequence>
										<xs:element name="users">
											<xs:complexType>
												<xs:annotation>
													<xs:documentation>
														The users element is a sequence of user elements.
													</xs:documentation>
												</xs:annotation>
												<xs:sequence>
													<xs:element maxOccurs="unbounded" name="user">
														<xs:complexType>
															<xs:annotation>
																<xs:documentation>
																	The user element occurs once for each user that is a member of a group.
																	
																	NOTE: if a user is not included in any group, and does not exist in Interact, 
																		then it will not be imported.
																	NOTE: if a user is not included in any group and already exists in Interact, 
																		then it will be treated as Missing, and handled as per syncoptions.
																	
																	The uid attribute is the unique id of the user and matches the value in the top half of the file.
																	The dn attribute is the distinguished name attribute from Active Directory if used. This can be an empty string.
																	The username attribute is the Interact Username. This can be an empty string.
																	The email attribute is the email address for the user including the domain suffix. This can be an empty string.
																</xs:documentation>
															</xs:annotation>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="uid" type="xs:string" use="required" />
																	<xs:attribute name="dn" type="xs:string" use="optional" />
																	<xs:attribute name="username" type="xs:string" use="optional" />
																	<xs:attribute name="email" type="xs:string" use="optional" />
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
									<xs:attribute name="UserCount" type="xs:integer" use="required" />
									<xs:attribute name="uid" type="xs:string" use="required" />
									<xs:attribute name="dn" type="xs:string" use="required" />
									<xs:attribute name="name" type="xs:string" use="required" />
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="TotalUsers" type="xs:integer" use="required" />
						<xs:attribute name="TotalGroups" type="xs:integer" use="required" />
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="version" type="xs:integer" use="required" />
		</xs:complexType>
	</xs:element>
</xs:schema>