Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Followings are the available user scaler scalar properties:

  • Deactivate (X): If the column DeactivateX (aka ‘Deactivate (X)’) exists, leaving the value empty (‘’) would reactivate a user. Use ANY value for DeactivateX to deactivate a user.

  • OrgLoginId: is optional, Don't doesn’t update if empty. This is unique within an Organization.

  • Password: if the user already exists and left empty - the password is not updated

  • FirstName: will not be updated if empty

  • LastName: will not be updated if empty
    It can be removed depending on the configuration after user deactivation (System.Customer.PreserveOrgLoginIdOnDeactivate). Default Value: '' (String)

  • EmailAddress: will not be updated if empty

  • ContactEmail: will not be updated if empty

  • ForcePasswordChange: 'True' or 'False'. Anything not 'True' (e.g. empty) for new users will be interpreted as 'False'. For updates, will not be updated if not 'True' or 'False'.

  • CanViewReports: 'True' or 'False'. Anything not 'True' (e.g. empty) for new users will be interpreted as 'False'. For updates, will not be updated if not 'True' or 'False'.

*Along with these scaler properties all active OPF fields can be used in translation.

Sample CsvTranslations:
"OrgLoginId=UniqueUserID,FirstName=FirstName,LastName=LastName,Password=DateOfBirth,ContactEmail=PersonalEmailAddress,Deactivate (X)=Deactivate (X)"

Here Left side of '=' sign is the MLS user property and right side is the csv column name.

[MLS user property]=[csv column name]

  • UserImportMode: This configuration is mandatory. Possible values are ‘Partial’ or ‘Full’. Partial mode may allow to create user with invalid regular fields.

Example NavPage Attribute Configuration

...

  • . This is unique across different organizations. It can be removed depending on the configuration after user deactivation. Default Value: '' (String)(System.Customer.PreserveLoginEmailOnDeactivate).

  • ExternalUserId: is optional, doesn’t update if empty. This is unique within an Organization. (Doesn’t get erased after user deactivation). Default Value: '' (String)

  • Deactivate (X): If the column DeactivateX (aka ‘Deactivate (X)’) exists, leaving the value empty (‘’) would reactivate a user. Use ANY value there to deactivate a user.. Default Value: '' (String)

  • Password: if the user already exists and left empty - the password is not updated. Default Value:'' (String)

  • FirstName: will not be updated if empty. Default Value: '' (String)

  • LastName: will not be updated if empty. Default Value: '' (String)

  • ContactEmail: will not be updated if empty. Default Value: '' (String)

  • ForcePasswordChange: ‘True' or 'False'. Anything not 'True' (e.g. empty) for new users will be interpreted as 'False'. For updates, will not be updated if not 'True' or 'False'. Default Value: 'false’ (Boolean)

  • CanViewReports: 'True' or 'False'. Anything not 'True' (e.g. empty) for new users will be interpreted as 'False'. For updates, will not be updated if not 'True' or 'False'. Default Value: 'false’ (Boolean)

  • PasswordChangesAllowed: ‘True’ or ‘False’. Setting to false blocks users from changing their own passwords. If this is false, ForcePasswordChange CANNOT be ‘true’.

*Along with these scalar properties all active OPF fields can be used in translation.

Sample CsvTranslations:
"OrgLoginId=UniqueUserID,FirstName=FirstName,LastName=LastName,Password=DateOfBirth,ContactEmail=PersonalEmailAddress,Deactivate (X)=Deactivate (X)"

Here Left side of '=' sign is the MLS user property and right side is the csv column name.

[MLS user property]=[csv column name]

  • UserImportMode: This configuration is mandatory. Possible values are ‘Partial’ or ‘Full’. Partial mode may allow to create user with invalid regular fields.

Example NavPage Attribute Configuration

Code Block
--AddNavPageAttribute /Root/NI System.Customer.NIUserCsvIntegrator.IsTestMode True

AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.SchedulePeriodCsvDelimiter "1,"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.PollingIntervalImportFilePath "1E:UserImporter\incomingFile\incomingFile"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.CsvTranslations "ImportFileBackupPath "E:UserImporter\incomingFile\backupFile"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.SchedulePeriod "1"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.PollingInterval "1"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.CsvTranslations "OrgLoginId=UniqueUserID,FirstName=FirstName,LastName=LastName,Password=DateOfBirth,ContactEmail=PersonalEmailAddress"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.UserImportMode "Partial"
AddNavPageAttribute /Root/NI System.Customer.Integrator.NIUserCsvIntegrator.ExternalId "ExternalId1"

...

User importer is configured using a JSON file (i.e UserIntegratorConfigFile.where file name is always Integrator name (UserIntegratorName.json). It has multiple sections which are called activities. Every configured activity is being executed in order (can’t be changed via configuration). The order the activities are executed is the order this document describes the activity configurations.. Every section is described below, also a sample configuration file is attached.

...

If there are multiple email address provided for one user AND those are separated by the MultipleEmailsDelimiter only the first email is imported if this configuration is present.

...

Data Formatting Configuration (Optional)

Sample Configuration:

Code Block
languagejs
  "ResetFieldsToDefaultIfEmptyConfigurationDataFormattingConfiguration" : {
	"FieldFormatting" : [
		{
			"ResetFieldsToDefaultIfEmptyFieldName" : ["DateOfBirth",
			"VesselType", : 		"RankDateTime",
			"EmbarkmentDateInputFormat"     ]
  }

If no value (null/empty) is provided for a user field listed in the ResetFieldsToDefaultIfEmpty array, it resets the user property (from no value) to the field’s default value (dependent on the data type - see below).

Any field not included in ResetFieldsToDefaultIfEmpty and no value was provided (null/empty), will not be updated (ignored).

If we want to set null/empty value to any field, those fields must be included in ResetFieldsToDefaultIfEmptyConfiguration. That means, if any organization uses deactivation field (Deactivate (X)) that needs to included in this configuration.

Info

The user property must be part of the DataValidationConfiguration except for any Primary Identifying Field)

Default values for different user property types:

  • User scalar property (string): empty string (except any Primary Identifying Field)

  • OPF (single-choice-string): first choice

  • OPF (string): empty string

  • OPF (int): not supported yet (we don’t have a default value for int yet)

Data Formatting Configuration (Optional)

Sample Configuration:

Code Block
languagejs
"DataFormattingConfiguration" : {
	"FieldFormatting" : [
		{
			"FieldName" : "DateOfBirth",
			"Type" : "DateTime",
			"InputFormat" : "MM-dd-yyyy",
			"OutputFormat" : "dd-MM-yyyy"				
		}
	]
}

Data formatting takes an input value and formats it according to the configuration. For every field which needs formatting the expected input format and output format is needed. The expected input format may be optional and that depends on the data type. Above configuration shows formatting of a date field.

Supported data types:

  • String

  • DateTime

  • Number

Data Assembler Configuration (Optional)

Sample Configuration:

Code Block
languagejs
"DataAssemblerConfiguration": {
	"FieldConfigurations" : [ 
		{
			"FieldName" : "OrgLoginId",
			"Segments" : [
				{	
					"IsField" : "true", 
					"Value" : "Operating Line"
				},
				{
					"IsField" : "false", 
					"Value" : "-"
				},
				{
					"IsField" : "true",
					"Value" : "OrgLoginId"
				}
			]
		}
	]
}

The data assembler activity is able to modify user property fields dynamically or create values using other user property fields. Every user property can be used to aggregate data for another or the same field.

For example, Above configuration adds a prefix to an user property "OrgLoginId" which consists of 3 different segments, “Operation Line” “-“ & “OrgLoginId“. If IsField=true, that means it will get the value provided in the csv, Otherwise whatever the value provided in the configuration value property it will consider that. Please consider that any previous data manipulation will have taken effect (i.e. DataSanitization). It may not be the original value from the CSV anymore.

...

: "MM-dd-yyyy",
			"OutputFormat" : "dd-MM-yyyy"				
		}
	]
}

Data formatting takes an input value and formats it according to the configuration. For every field which needs formatting the expected input format and output format is needed. The expected input format may be optional and that depends on the data type. Above configuration shows formatting of a date field.

Supported data types:

  • String

  • Integer

  • EmailAddress

  • DateTime

  • Boolean

Data Assembler Configuration (Optional)

Sample Configuration:

Code Block
languagejs
"DataAssemblerConfiguration": {
	"FieldConfigurations" : [ 
		{
			"FieldName" : "OrgLoginId",
			"Segments" : [
				{	
					"IsField" : "true", 
					"Value" : "Operating Line"
				},
				{
					"IsField" : "false", 
					"Value" : "-"
				},
				{
					"IsField" : "true",
					"Value" : "OrgLoginId"
				}
			]
		}
	]
}

The data assembler activity is able to modify user property fields dynamically or create values using other user property fields. Every user property can be used to aggregate data for another or the same field.

For example, Above configuration adds a prefix to an user property "OrgLoginId" which consists of 3 different segments, “Operation Line” “-“ & “OrgLoginId“. If IsField=true, that means it will get the value provided in the csv, Otherwise whatever the value provided in the configuration value property it will consider that. Please consider that any previous data manipulation will have taken effect (i.e. DataSanitization). It may not be the original value from the CSV anymore.

From V4.9, It is possible to use any fields to assemble other field even those fields are not part of OPF.

Check For Existing User Configuration (No Configuration Required)

This activity checks for existing users using Identifier fields configured in Data Validation Configuration. Currently this activity doesn’t have it’s own configuration.

Reset Fields To Default If Empty Configuration (Mandatory)

Sample Configuration:

Code Block
languagejs
  "ResetFieldsToDefaultIfEmptyConfiguration": {
    "ResetFieldsToDefaultIfEmpty": [
		"Vessel",
		"Rank",
		"EmbarkmentDate"
    ]
  }

If no value (null/empty) is provided for a user field listed in the ResetFieldsToDefaultIfEmpty array, it resets the user property (from no value) to the field’s default value (dependent on the data type - see below).

Any field not included in ResetFieldsToDefaultIfEmpty and no value was provided (null/empty), will not be updated (ignored).

If we want to set null/empty value to any field, those fields must be included in ResetFieldsToDefaultIfEmptyConfiguration. That means, if any organization uses deactivation field (Deactivate (X)) that needs to included in this configuration.

Info

Critical fields (scalar or String OPF) and Identifier fields can’t be configured. User importer considers this as configuration error because Critical fields must not be empty and Identifier fields are usually not empty either.

Default values for different user property types:

  • User scalar property: empty string (except any Primary Identifying Field)

  • OPF (single-choice-string): first choice

  • OPF (string): empty string

  • OPF (int): not supported yet (we don’t have a default value for int yet)

Data Validation Configuration (Mandatory)

...

Code Block
languagejs
  "DataValidationConfiguration": {
    "IdentifierFields": [
      {
        "Name": "OrgLoginId",
        "Type": "String"
      }
    ],
    "CriticalFields": [
      {
        "Name": "VesselEmbarkmentDate",
        "Type": "StringDateTime"
        "Format": "dd-MM-yyyy"
      },
      {
        "Name": "FirstName",
        "Type": "String"
      },
      {
        "Name": "LastName",
        "Type": "String"
      },
      {
        "Name": "Rank",
        "Type": "String"
      }
    ],
    "RegularFields": [
      {
        "Name": "EmailAddress",
        "Type": "EmailAddress"
      },
      {
        "Name": "DeptCode",
        "Type": "String"
      },
      {
        "Name": "Password",
        "Type": "String"
      }
    ]
  }
  }

If EmailAddress is used as Identifier field then this optional navpage attribute System.Customer.PreserveLoginEmailOnDeactivate must be set to true

This activity validates all parsed user objects according to configuration and LMS specification (i.e. single choice field must have the proper value).

...

  • IdentifierFields (Mandatory): used to uniquely identify a user (i.e. OrgLoginId, login email address). Currently it supports one identifier field.

  • Critical field which needs data validation and would stop processing the whole user if it contained invalid data (skip user). Continue with any other users though.

  • Regular fields: ‘Partial' user import mode may allow to create user with invalid regular fields. In case of 'Full’ import mode it would stop any user to be imported if there is any invalid regular field(s).

...

  • any invalid regular field(s).

Every field must have a Name and Type. If any field is configured as “DateTime“ type then Format must be specified (example above) otherwise it will be considered as configuration error.

If UserImporterConfiguration contains DataFormattingConfiguration and it formats any datetime field, then the Format in DataValidationConfiguration for the datetime type field must match the output format of FieldFormatting.

Code Block
languagejs
  "DataFormattingConfiguration" : {
	"FieldFormatting" : [
		{
			"FieldName" : "EmbarkmentDate",
			"Type" : "DateTime",
			"InputFormat" : "dd-MMM-yy",
			"OutputFormat" : "yyyy-MM-dd"				
		}
	]
  }

List of all exact names for user scalar properties which can be used:

  • IdentifierFields": "OrgLoginId"

  • CriticalFields": "Rank", "Vessel", "FirstName", "LastName"

  • RegularFields: "EmailAddress", "ContactEmail", “Deactivate (X)”, “UserLanguage”, “CanViewReports”, “ForcePasswordChange”, “Password“

...

Code Block
languagejs
"PasswordConfiguration": {
	"UserReactivationAction": "ForcePasswordChange",
	"UseRandomPassword": "false",
	"ExpireInitialPasswordForNewUser": "true",
	"PasswordFormat": [
	{
		"Value": "Password",
		"IsField": "true"
	},
	{
		"Value": "aA!",
		"IsField": "false"
	}
	]
}
Info

if If UseRandomPassword is set false then only Password format is required, otherwise that can be empty. Other fields are mandatory.

...

UserReactivationAction When an user gets reactivated then password of that user depends on this configuration. Values can be ForcePasswordChange, Random, None.

If UseRandomPassword is set to true then it will create random password and ignore the PasswordFormat. Otherwise it creates password with the combination of other fields or values.

All the values inside the PasswordFormat will be concatenated for password creating for new user only. If IsField=true, that means it will get the value provided in the csv (Also can be modified in previous activities), Otherwise whatever the value provided in the configuration value property it will consider that.

Info
  • For SSO-enabled Organization following configuration is required.

    • UseRandomPassword must always be true

    • Must not have a Password column in csv translation (System.Customer.Integrator.NIUserCsvIntegrator.CsvTranslations)

    • PasswordFormat must not exist

    • UserReactivationAction must be None or Random. ForcePasswordChange is not allowed

    • ExpireInitialPasswordForNewUser must be false

Auto User Deactivation Configuration (Optional)

...

Code Block
languagejs
"AutoUserDeactivationConfiguration": {
	"MaxUsersToDeactivate": "500",
		"UserFilterFieldNames": [
			"Rank"
		]
}

UserFilterFieldNames array takes the field name to filter the users on which auto deactivation will be applied if filtered users are not part of the csv import, where field must be a Single Choice String (ScS).

...

Sample Configuration:

Code Block
languagejsjson
  "ThresholdConfiguration" : {
	  "Thresholds" : [
		{
			"Name" : "MaxUsersPerImport",
			"Value" : 1,
			"Action" : "StopImport"
		},
		{
			"Name" : "MaxDeactivateUsers",
			"Value" : 1,
			"Action" : "GenerateWarning"
		},
		{
			"Name" : "MaxNewUsers",
			"Value" : 4,
			"Action" : "StopImport"
		},
		{
			"Name" : "MaxOrgProfileValueUpdates",
			"Value" : 1,
			"Action" : "GenerateWarning"
		},
		{
			"Name" : "MaxReactivateUsers",
			"Value" : 1,
			"Action" : "GenerateWarning"
		},
		{
			"Name" : "MaxInvalidUsers",
			"Value" : 1,
			"Action" : "None"
		}
	]
  }

...