INDEX
Documentation Library
Search for information on Hornbill Documentation.
{{docApp.searchError}}
{{docApp.searchResultFilteredItems.length}} results for "{{docApp.currentResultsSearchText}}" in {{docApp.searchFilterBySpecificBookTitle}}
-
{{resultItem.title}}
{{resultItem.url}}
Have questions about this site?
What is this site?
- This website is Hornbill's new product documentation website and is currently under development.
- It is intended that all existing and future public-facing documentation we produce will be available to search, browse and share.
- Hornbill's current documentation is available at Hornbill Wiki but over time this content will be migrated to this documentation site.
- Please feel free to have a look around at any time.
Why has Hornbill created this site?
- Hornbill's products have moved on considerably since we introduced it almost 10 years ago. At the time, the MediaWiki tool was sufficient, but we have outgrown it.
- Our customers are more enterprise focused and more self-sufficient than ever before, so for 2023 and beyond we have established a new documentation platform and team to drive our documentation initiative forwards.
- We are aiming to deprecate the use of Hornbill Wiki for most Hornbill related documentation.
- We want to enable our growing partner network with product resources and information, documentation beyond our Wiki approach is required.
- We could definitely do with some help, and may even pay for some! If you have domain knowledge and would like to help, please check out our Hornbill Docs Contributor Guide and contact the Hornbill docs team at docs@hornbill.com.
What will this site be good for?
- Community contribution will be facilitated, encouraged, and most welcome.
- High quality documentation, will be kept up to date as rapidly as our products evolve.
- Real-time content search and discovery.
- Articles organized into books, books into libraries, creating a more natural and logical structure to our documentation.
- Legacy API documentation and various other documentation sources will all be consolidated into a single unified documentation system.
- Documentation available in browser as well as printable/viewable as PDF on demand.
- Personalized documentation experience, allowing dark/light mode, article subscriptions, social media sharing and other useful features.
- Almost all publicly available documentation on docs.hornbill.com will be open-source and available to fork on GitHub, allowing customers to derive their own custom documentation around Hornbill products should they wish to.
What is the timeline for this site?
- We have taken the decision to publish and make available early, there is very little content at this time.
- As and when we have completed/usable documentation, it will be published here.
- We have a host of additional features we wish to add over time, so please watch this space.
- We expect most of our existing documentation should be reviewed/migrated to docs.hornbill.com over the coming months.
- The documentation project will be ongoing, will continue to expand, evolve and improve day-by-day.
{{docApp.libraryHomeViewProduct.title || docApp.libraryHomeViewProduct.id}}
{{docApp.libraryHomeViewProduct.description}}
{{group.title || group.id}}
{{group.description}}
Configuration
- Article
- Wed Sep 04 2024
- 9 minutes to read
- 1 contributors
Overview
The options and configuration of imports using this utility are saved in one or more JSON (JavaScript Object Notation) files in the folder where the utility executable resides.
We have provided a default configuration file in each of the downloadable archives: conf.json
. This can be used as a template from which to build your import configurations.
Tip
The utility will default to conf.json
if a configuration file is not specified as a command line argument
Example Configuration
{
"KeysafeKeyID": 0,
"Database": {
"Source": "mysql",
"Encrypt": false,
"Query": "SELECT userdb.*, b.fullname AS manager FROM userdb LEFT JOIN userdb b ON b.keysearch = userdb.fk_manager"
},
"Action": "Both",
"User": {
"UserDN": "{{.keysearch}}",
"HornbillUniqueColumn": "h_user_id",
"AccountMapping": {
"UserID": "{{.keysearch}}",
"LoginID": "{{.keysearch}}",
"EmployeeID": "{{.keysearch}}",
"UserType": "basic",
"Name": "{{.firstname}} {{.surname}}",
"Password": "",
"FirstName": "{{.firstname}}",
"LastName": "{{.surname}}",
"JobTitle": "",
"Site": "{{.site}}",
"Phone": "{{.telext}}",
"Email": "{{.email}}",
"Mobile": "[mobile]",
"AbsenceMessage": "",
"TimeZone": "",
"Language": "",
"DateTimeFormat": "",
"DateFormat": "",
"TimeFormat": "",
"CurrencySymbol": "",
"CountryCode": "",
"Enable2FA": "",
"DisableDirectLogin": "",
"DisableDirectLoginPasswordReset": "",
"DisableDevicePairing": ""
},
"Type": {
"Action": "Both"
},
"Status": {
"Action": "Both",
"Value": "active"
},
"Role": {
"Action": "Both",
"Roles": [
"Basic User Role"
]
},
"ProfileMapping": {
"MiddleName": "",
"JobDescription": "",
"Manager": "{{.manager}}",
"WorkPhone": "",
"Qualifications": "",
"Interests": "",
"Expertise": "",
"Gender": "",
"Dob": "",
"Nationality": "",
"Religion": "",
"HomeTelephone": "{{.telext}}",
"SocialNetworkA": "",
"SocialNetworkB": "",
"SocialNetworkC": "",
"SocialNetworkD": "",
"SocialNetworkE": "",
"SocialNetworkF": "",
"SocialNetworkG": "",
"SocialNetworkH": "",
"PersonalInterests": "",
"homeAddress": "",
"PersonalBlog": "",
"Attrib1": "1",
"Attrib2": "2",
"Attrib3": "3",
"Attrib4": "4",
"Attrib5": "5",
"Attrib6": "6",
"Attrib7": "7",
"Attrib8": "8"
},
"Manager": {
"Action": "Both",
"Value": "{{.manager}}",
"Options": {
"GetStringFromValue": {
"Regex": "",
"Reverse": false
},
"MatchAgainstDistinguishedName": false,
"Search": {
"Enable": true,
"SearchField": ""
}
}
},
"Image": {
"Action": "Both",
"UploadType": "URL",
"InsecureSkipVerify": false,
"ImageType": "jpg",
"URI": "http://sample.myservicedesk.com/sw/clisupp/documents/userdb/images/{{.keysearch}}.jpg"
},
"Site": {
"Action": "Both",
"Value": "{{.site}}"
},
"Org": [
{
"Action": "Both",
"value": "{{.department}}",
"MemberOf": "",
"Options": {
"Type": 2,
"Membership": "member",
"TasksView": false,
"TasksAction": false,
"OnlyOneGroupAssignment": false,
"SetAsHomeOrganisation": false
}
},
{
"Action": "Both",
"value": "{{.companyname}}",
"MemberOf": "",
"Options": {
"Type": 5,
"Membership": "member",
"TasksView": false,
"TasksAction": false,
"OnlyOneGroupAssignment": false,
"SetAsHomeOrganisation": true
}
}
],
"Actions": [
{
"Action": "Trim",
"Value": "{{.department}}",
"Output": "department"
},
{
"Action": "Replace",
"Value": "{{.mobile}}",
"Options": {
"replaceFrom": "0",
"replaceWith": "+44"
},
"Output": "phone"
},
{
"Action": "Regex",
"Value": "{{.telephoneNumber}}",
"Options": {
"regexValue": "([0-9])\\w+/g"
},
"Output": "areaCode"
}
]
}
}
Configuration Explanation
KeysafeKeyID
- Type:integer
- The ID of the KeySafe Key that contains your database authentication details. See the KeySafe section of the Authentication article for more information.CSV
- Type:object
- If the data source is an on-disk CSV file, then this should be populated with the information needed to extract the user records. If theDataSourceFile
value is set, then the import will skip theDatabase
properties, below.DataSourceFile
- Type:string
- The path of the CSV file which contains the dataCommaCharacter
- Type:string
- The character used as field separator (usually “,”)LazyQuotes
- Type:boolean
- true/false if quoted fields might appear in an unquoted fieldFieldsPerRecord
- Type:integer
- a number that will automatically be calculated based on the first (header) line. This allows for manipulation (in case later records might have more fields)CarriageReturnRemoval
- Type:boolean
- true/false - tidying up the CSV file if necessary
Database
- Type:object
- The information that the utility needs to query your source database.Source
- Type:string
- The database technology the utility needs to connect to, one of:mssql
- Microsoft SQL Servermysql
- MySQL or MariaDBcsv
- CSV file, via ODBCexcel
- Excel spreadsheet, via ODBC
Encrypt
- Type:boolean
- Specifies whether the connection between this utility and the source database should be encrypted. There is a bug in SQL Server 2008 and below that causes connection failures if the connection is encrypted. Only set this to true if your SQL Server supports this, or has been patched accordingly.Query
- Type:string
- The SQL query to return your list of users for import. Please note that all field names are specificied as lowercase - this is to ensure smooth operation for field mapping (as they are case-sensitive). Also, by specifying each field in use, one is following SQL best practice as it prevents unnecessary/unused data to be returned, stored and processed (longvarchar and blob fields, for instance, can take up a lot of memory). For CSV please use UPPERCASE for all field names and, also, do NOT use spaces in the headers/fieldnames.
Action
- Type:string
- Can beCreate
,Update
, orBoth
. Import actions to perform on the discovered user records.User
- Type:object
- Contains all source database records to Hornbill mappings, and user configuration.UserDN
- Type:string
- The content from the source database user records that matches the unique reference against your Hornbill user records.HornbillUniqueColumn
- Type:string
- Can beh_user_id
,h_employee_id
,h_login_id
orh_email
. The column from the Hornbill user records that is used to match the user records against theirUserDN
(above).AccountMapping
- Type:object
- Data mapping, in the format"fieldInHornbill": "data to insert"
. The data to insert can either be hard-coded strings, mapped from the source data using one or more Go templates, or a mixture of the two. Some specific examples:"UserType": "basic"
- All records will be created as Basic Users in Hornbill. See the Hornbill user documentation for more information."Password": ""
- if the Password data mapping is left empty, then the utility with generate a random password to create new users with. The generated passwords will obey the password policies defined on the target Hornbill instance."Site": "1"
- If set, see the comments below on SiteLookupTimeZone
- See the list of timezones supported by Hornbill for valid values.Language
- Language localization tags, ISO 629 in combination with ISO 3166, examples:en-GB
en-US
fr-FR
- etc…
DateTimeFormat
- See the list of supported DateTime formats for valid values.CountryCode
- ISO 3166 Alpha 2 two Character Country Code.NOTE
- Any value of__clear__
will clear the target field for user records being updated.
ProfileMapping
- Type:object
- Data mapping for user profile fields, in the format"fieldInHornbill": "data to insert"
. SeeAccountMapping
above for details.Type
- Type:object
- Contains a single propertyAction
, which can beCreate
,Update
, orBoth
. Import actions to perform on the Type field of the discovered user records.Status
- Type:object
- Contains two properties, Import actions to perform on the Status of the discovered user records:Action
- Type:string
- Can beCreate
,Update
, orBoth
.Value
- Type:string
- The user account status. Can beactive
,suspended
, orarchived
.
Role
- Type:object
- Contains two properties, Import actions to perform on the Roles of the discovered user records:Action
- Type:string
- Can beCreate
,Update
, orBoth
.Roles
- Type:array
- A list of application or system roles that should be assigned to the users being imported.
Manager
- Type:object
- Contains three properties, Import actions to perform on the Manager field of the discovered user records:Action
- Type:string
- Can beCreate
,Update
, orBoth
.Value
- Type:string
- The mapped value of the users manager. . Set to__clear__
to remove the manager for user records being updated.Options
- Type:object
- Contains several properties to allow granular searching of the relevant manager records:Get String From Value
- Type:object
Regex
- Type:string
- Optional regular expression to match the name from a DSN String.Reverse
Type:boolean
- Reverse the name string matched from the regular expression, above.
Match Against DN
Type:string
- Match the users manager against the Distinguished Name instead of their name.Search
- Type:object
Enable
- Type:boolean
SearchField
- Type:string
- The field to search for manager records against.
Image
- Type:object
- Contains several properties, Import actions to perform on profile images of the discovered user records:Action
- Type:string
- Can beCreate
,Update
, orBoth
.UploadType
- Type:string
- Can beURI
orURL
- local (network) drive or HTTP(S) served imagesInsecureSkipVerify
- Type:boolean
- Skip invalid certificate verification when importing imagesImageType
- Type:string
- Image type, can bepng
orjpg
URI
- Type:string
- The source mapping for the image… Set to__clear__
to remove the profile image for user records being updated.
Site
- Type:object
- Contains two properties, Import actions to perform on the Location of the discovered user records:Action
- Type:string
- Can beCreate
,Update
, orBoth
.Value
- Type:string
- The source mapping of the Location.
Org
- Type:array
- An array of objects containing several properties of Organizational Unit/Group information to associate the imported user with:Action
- Type:string
- Can beCreate
,Update
, orBoth
.Value
- Type:string
- The mapped name of the Organizational Unit.Options
- Type:object
- A collection of properties to define membership settings of organizational group:Type
- Type:integer
- The numeric value for the group type:0
-general
1
-team
2
-department
3
-costcenter
4
-division
5
-company
6
-businessUnit
7
-directorate
8
-branch
9
-function
10
-board
11
-subsidiary
Membership
- Type:string
- The group membership role, can be one ofmember
,teamLeader
ormanager
.TasksView
- Type:boolean
- If set totrue
, then the imported users can view tasks assigned to this group (Typically only required for Groups of type “Team”).(Typically only required for Groups of type “Team”).TasksAction
- Type:boolean
- If set totrue
, then the user can action tasks assigned to this group.OnlyOneGroupAssignment
- Type:boolean
- When set totrue
, a user can only be associated with a single group of the specified type at any one time. So for example, if in the latest import the configuration was set to associate users to the Accounting department, the users would be associated with this new department and removed from any other department group that they were already associated with.SetAsHomeOrganisation
- Type:boolean
- Only used when the group type is Company (5). When set totrue
, the Company will be set as the users Home Organization.
Actions
- Type:array
- A list of transform actions that can be performed on mapped field values:Action
- Type:string
- One ofTrim
,Replace
orRegex
.Trim
- Trims whitespace characters from the beginning and end of the value.Replace
- Replaces part of a value string with another string.Regex
- Searches the value for content using a provided regular expression, and returns that value.
Options
- Type:object
- A collection of properties to control either theReplace
orRegex
actions:replaceFrom
- Type:string
- Used in theReplace
action. The old string that should be replaced.replaceWith
- Type:string
- Used in theReplace
action. The new string to replace the old string with.regexValue
- Type:string
- Used in theRegex
action. The regular expression to use to search the value.
- Version {{docApp.book.version}}
- Node {{docApp.node}} / {{docApp.build}}
In This Document