Generic Python Script -liitin
Generic Python Script -liitin
Generic Python Script -liitin (aiemmin nimillä Custom script ja Custom backend) on osa natiiveja liittimiä, ja sen avulla voidaan lukea dataa mistä tahansa sovelluksesta ja ladata se asiakkaan Matrix42 Core, Pro and IGA -ratkaisuun. Toiminnallisuus toteutetaan Python-skriptillä (asiakas toimittaa skriptin), joka suoritetaan asiakkaan ratkaisun host-koneella. Skripti vastaa tiedon lukemisesta kohdesovelluksesta, ja sen tulee sen jälkeen luoda JSON-tiedosto luetuista tiedoista.
Kun custom script -liitin otetaan käyttöön, edellytetään että
- Liitintä varten on tehty Python-skripti, joka on tallennettu asiakkaan Efecte-ratkaisun host-koneelle
- Liittimen tiedot on täytetty ja ajastettu tehtävä on konfiguroitu datan lataamiseksi asiakkaan ratkaisuun.

General functionalities
Connectors - general functionalities
Connectors - general functionalities
In this article are described general functionalities for managing native connectors in solution. All Native Connectors are managed from the same connector management UI.
Notice that there are separate descriptions for each connector, where connector specific functionalities and configuration instructions are described in detailed level.
To be able to access connector management, user needs to have admin level permissions to customers Platform configuration. When accesses are granted correctly, Connector tab will be visible and user can manage connectors.

Left menu
Connector management is divided into four tabs:

- Overview - for creating and updating Native Connectors. The Admin User can see their status, type and how many scheduled or event tasks are associated with them.
- Authentication - for creating and updating authentication tasks. Provisioning task for authentication is needed for Secure Access to be able to define which Customers end-users can access to Matrix42 Core, Pro and IGA login page.
- Logs - for downloading Native Connector and Secure Access logs from UI.
- Settings - general settings for Native Connectors and Secure Access, including environment type for logging and monitoring.
In release 26.2 left menu was moved to be on top of page as top menu. It also now contains new Certificates tab, for handling Native Connectors and Secure Access LDAP and HTTPS traffic certificates.

Connectors overview tab
From overview page, user can easily and quickly see status for all connectors.

Top bar:

-
Connectors
- Green indicates that Native Connectors is online. All the needed services are up and running.
- Red indicates that there is a problem with Native Connectors, all the services are not running.
-
Authentication (Secure Access)
- Green indicates that Secure Access is online. All the needed services are up and running.
- Red indicates that there is a problem with Secure Access, all the services are not running.
-
Native Connectors version number is displayed in top right corner
Top bar for list view:

- New connector - opens new window for adding and configuring new connector
- Remove connector(s) - workflow references are calculated and pop-up window appears to confirm removal (notice that calculating references can take several seconds)
- Export - Admin can export one or more connectors (and tasks) from the environment. Usually used for exporting connectors and connectors (and tasks) from test to prod. Native connectors secret information is password protected.
-
Import - Admin can import one or more connectors (and tasks) to the environment. Usually used for importing connectors (and tasks) from test to prod.
- Admin cannot import from old EPE UI (Older than 2024.1) to the new one. Source and target environments must have same version.
- Import will fail if the configuration (templates, attributes) is not the same - for example when some attribute is missing
- If a connector with the same details already exists in the environment, the import process detects this and informs the admin that the connector already exists. The existing connector is not modified or renamed.
- Refresh - Admin can refresh connectors list view by clicking the Refesh button.
List view for overview,

- Select connector(s) - Select one connector by clicking check box in front of the connector row or clicking check box in the header row will select all connectors
- Id - Automatically generated unique ID of the connector. Cannot be edited or changed.
- Status - indicates scheduled task status
-
Green double check mark - Task is executed without any errors
-
Red triangle -Task is executed, but there have been error
-
Grey line - Tasks are not executed yet
-
Orange - one or more of the tasks has a problem
- No value - Scheduled based-task is missing
- Name - Connector name added to connector settings. Unique name of the connector holding configuration for one data source
- Type - indicates target / source system
- Scheduled - informs how many scheduled tasks are configured
- Event - informs how many event tasks are configured
-
Manage
- Pen icon - opens connector settings (double-clicking the connector row, also opens settings)
- Paper icon - copies the connector
- Stop - workflow references are calculated and pop-up window appears to confirm removal
- Search - User can search connector by entering the search term in the corresponding field . Id, Status, Name, Type, Scheduled and Event fields can be searched.
Scheduled task information (click arrow front of the connector)
When clicking arrow at the beginning of the connector row, all related scheduled and event tasks are shown

Top bar for scheduled tasks
- New task - opens configuration page for new task
- Remove task(s) - removes the selected task(s) from the system and they cannot be recovered anymore.
- Refresh - refresh scheduled-based tasks view
- Search - user can search task by entering the search term in the corresponding field for Id, name, enabled, extract/load status.
List view for scheduled tasks

- Select task(s) - Select task to be deleted from the list view by ticking.
- Id - Unique ID of the task. Generated automatically and cannot be changed.
- Name - Task name added to task settings, unique name of the task.
-
Scheduling - Displays is the task scheduled or not
-
Green calendar mark - Task is scheduled
-
Grey line - Task is not scheduled
-
-
Extract status - Displays status of data extraction from the target directory/system
-
Green double check mark - data is extracted successfully
-
Red triangle - data is extracted with error(s) or extraction is failed
-
Grey line - Extract has not been executed yet
-
Black gears - Extraction is ongoing
-
-
Load status - Displays status of data export from json-file to customers solution
-
Green double check mark - data is imported successfully to customers solution
-
Red triangle - data is imported with error(s) or import is failed
-
Grey line - Data load has not been executed yet
-
Black gears - Load is ongoing
-
- Manage

- Pen icon - opens task settings in own window (double-clicking the task row also opens task settings)
- Paper icon - copies the task
- Move icon - move task under some different connector, pop-up window opens to select target connector
- Run icon - run task manually once, pop-up window opens to confirm the run
- Clock icon - opens task history view
-
Minus icon - remove task, pop-up window opens to confirm the removal
Scheduled task history view
By clicking the clock icon in the scheduled task row, history for scheduling will be shown.
It shows maximum 500 previous task runs.

Top bar for view history
- Refresh - refreshes scheduled task status. This doesn't affect task, this only updates UI to show latest information of task run.
List view for scheduled task history
-
Color of the row is indicating status
-
Green double check mark - execution successful
-
Red triangle - execution failed (hover red icon to see more detailed error)
-
- Execution ID - unique ID for the scheduled task row
- Extract status - status for fetching data from the directory/application
- Load status - status for loading information to customers solution
- Scheduled start time - when next extract from the directory/application is scheduled to happen
- Extract actual start time - when extract was started
- Extract actual end time - when extract ended
- Load actual start time - when load actually started
- Load actual end time - when load actually ended
Task run details
- Download Group file - JSON file containing group information read from the directory/application
- Download Users file - JSON file containing user information read from the directory/application
- Download Generic file - JSON file containing generic information read from the directory/application
- Download All Failed Data Cards - JSON file containing failed objects
- Load overview - detailed information about loading the information to customers Matrix42 Pro and IGA solution
- Log data - part of logs. Full logs can be downloaded from Logs tab

Edit window for scheduled task
Configuration for scheduled task can be opened by clicking pen icon or double-clicking the task row.
Left menu and attributes varies according to selected options and therefore more detailed instructions for editing tasks can be found from the connector description, but there are common functionalities for all scheduled tasks which are described below.
Saving the task
In case mandatory information is missing from the task, hoovering mouse on top of the save button will show which attributes are still empty.

Top bar for edit scheduled task
- Run task manually - admin can run task manually out side of the defined scheduling
- Stop task - admin can stop scheduled-based task which is currently running. Task will be stopped and status is changed to be stopped. It waits in this state until the next timing occurs.
-
Clear data cache - Data cache for the next provisioning of Users and Groups will be cleared. It means that next run is run as first time run.
- By default, we clear the cache everyday at 00:00 UTC
- If you want to clear the cache at different time, then it has to specify some different value in host file 'custom.properties'.
-
EPE Cache is also cleared when EPE is restarted, whole environment is restarted, EPE mappings have been changed
Event task information
When clicking arrow at the beginning of the connector row, all related scheduled and event tasks are shown

Top bar for event tasks
- New task - opens configuration page for new event task
- Remove task(s) - removes selected task(s), pop-up window appears to confirm the removal
- Refresh - refreshes event tasks view
- Show workflow references - calculates task related workflow relations and statuses. This is very useful if you don't know from which workflows event-based tasks are used.
List view for event tasks
- Select task(s) - Select task to be deleted from the list view by ticking.
- Id - Unique ID of the task. Generated automatically and cannot be changed.
- Name - Task name added to task settings, unique name of the task.
-
Workflow relations
- Question mark shows pop-up window with detailed information about the reference
-
Workflow status
- Not used - No relations to workflow
- In use - Workflow(s) attached to task, task cannot be removed
-
Manage
- Pen icon - opens task settings
- Paper icon - copies the task
- Move icon - moves task under different connector, pop-up window opens to select target connector
- Stop icon - removes the task, pop-up window appears to confirm the removal
Edit window for event task
Configuration for event task can be opened by clicking pen icon or double-clicking the task row.
Left menu and attributes varies according to selected options and therefore more detailed instructions for editing tasks can be found from the connector description, but there are common functionalities for all event tasks which are described below.
- Task name - Descriptive name for task so you recognize it
- Task usage - Allow editing checkbox. When unchecked, the current task usage value is displayed in read-only form without edit indicators, so the configuration state is easy to read. Check the box to make the field editable, note that changing the task usage type on an existing task will break workflows
- Mappings type - Allow editing checkbox. When unchecked, the current mappings type value is displayed in read-only form without edit indicators. Check the box to make the field editable, note that changing the mappings type on an existing task will break workflows

Saving the task
In case mandatory information is missing from the task, hovering mouse on top of the save button will show which attributes are still empty.

Authentication tab
Authentication for Matrix42 Core, Pro and IGA solutions are configured from authentication tab, notice that only some of the connectors (directory connectors) are supporting authentication, so its not possible to create authentication tasks to all available connectors.

Top bar for authentication
- New connector - opens new window for configuring new connector (notice that not all connectors are supporting authentication)
- Remove connector(s) - removes selected task(s), pop-up window appears to confirm the removal
-
Export - user can export one or more tasks from the environment. Usually used for exporting tasks from test to prod. EPE connectors are password protected.
- Note that Realm for authentication tasks is not exported, you need to set that manually after importing
- Import - user can import one or more tasks to the environment. Usually used for importing task from test to prod.
- Refresh - refreshes authentication tasks view
List view for authentication overview
- Select connector(s) - Select one connector by clicking check box in front of the connector row or clicking check box in the header row will select all connectors
- Id - Automatically generated Unique ID of the connector. Cannot be edited or changed.
- Name - Connector name added to connector settings. Unique name of the connector holding configuration for one data source
- Type - indicates target / source system
- Count - informs how many authentication tasks are configured
-
Manage
- Pen icon - opens authentication task setting in own window
- Paper icon - copies the task
- Stop icon - removes selected task
Authentication task information
When clicking arrow at the beginning of the connector row, all related scheduled and event tasks are shown

Top bar for authentication overview
- Create new task - opens configuration page for new authentication task
- Remove task(s) - removes selected task(s), pop-up window appears to confirm the removal
- Refresh - refreshes authentication tasks view
List view for authentication overview,
- Select task(s) - Select task to be deleted from the list view by ticking.
- Id - Unique ID of the task. Generated automatically and cannot be changed.
- Name - Task name added to task settings, unique name of the task.
-
Manage
- Pen icon- opens task settings in own window (double-clicking the task row, also opens settings window)
- Paper icon - copies the task
- Stop icon - removes the task, pop-up window appears to confirm the removal
Logs tab
Logs tab is for downloading Native Connector and Secure Access logs from UI for detailed troubleshooting.

- epe-master logs - contains warning, debug and error level messages about Native Connectors and info how long task actions has been taken.
- epe-worker-ad logs - contains extract data status of Active Directory connector (what Native Connector is loading to to customers Matrix42 Pro and IGA solution). If selection is empty, it means that directory is not in use in this environment.
- epe-worker-azure logs - contains extract data status of Entra ID (what Native Connector is loading to to customers Matrix42 Pro and IGA solution). If selection is empty, it means that directory is not in use in this environment.
- epe-worker-ldap logs - contains extract data status of LDAP (what Native Connector is loading to to customers Matrix42 Pro and IGA solution). If selection is empty, it means that directory is not in use in this environment.
- epe-launcher logs - contains information about EPE launches
- datapump-itsm logs - Contains information about data export to customers Matrix42 Pro and IGA solution.
- esa logs - Contains information about Secure Access authentication.
Settings tab
Settings tabs is used for monitoring environments with connectors.

-
Environment type - is mandatory to be in selected and information is used for example defining alert critically.
- Test - select this when your environment is used as testing environment
- Prod - select this when your environment is used as production environment
- Demo - select this when your environment is used as demo or training environment
- Dev - select this when your environment is used as development environment
What we are monitoring?
- Failures in scheduled based provisioning (extracting data, exporting data to ESM, outdated certificates, incorrect passwords, incorrect search base/filter, incorrect mappings, etc.)
- Failures in event based provisioning (fail to write to AD/Azure, etc.)
- Event-based provisioning - which connectors are used for writing data towards applications/directories.
- ESA more than ten failed login attempts to one user in past 3 days
- Environment type - is mandatory to be in selected and information is used for example defining alert critically.
Show logs - when ON, logs can be seen from Logs tab on UI
Automate Secure Access Certificate reloading - when ON, Secure Access will automatically reboot at 03:00 UTC if there are new certificates that needs to be taken into use.
Data migrations - Do not click “Migrate attribute mappings” or “Migrate workflows”, if not requested to do so by Matrix42.
Python-skriptin luominen
Alla on esimerkki Python-skriptistä, mutta voit myös luoda oman.
#!/usr/bin/python3
import json
import os
import common_subroutines_efecte_library
# system_info_efecte_library.printOsName()
# system_info_efecte_library.printReleaseVersion()
arguments_dictionary = common_subroutines_efecte_library.initialize_script()
########################################
#
# put customer specific scripts under this
#
#
data_extraction_attributes_json = arguments_dictionary['data_extraction_attributes']
script_current_working_directory = arguments_dictionary['script_current_working_directory']
error_filename_full_path = arguments_dictionary['error_filename']
expected_output_filename_full_path = arguments_dictionary['expected_output_filename']
heartbeat_filename_full_path = arguments_dictionary['heartbeat_filename']
log_filename_full_path = arguments_dictionary['log_filename']
total_attributes_to_extract = len(data_extraction_attributes_json)
common_subroutines_efecte_library.log_line(log_filename_full_path, 'script started processing')
os.chdir(script_current_working_directory)
list = []
dictionary_data_extraction_attributes = {}
for n in range(total_attributes_to_extract):
attribute_name = common_subroutines_efecte_library.get_value_from_json(data_extraction_attributes_json[n],
'attributeName')
multivalue = common_subroutines_efecte_library.get_value_from_json(data_extraction_attributes_json[n], 'multivalue')
dictionary_data_extraction_attributes[attribute_name] = str(multivalue)
common_subroutines_efecte_library.log_line(log_filename_full_path, 'script will create json file with requested fields')
for n in range(1, 11):
values_dictionary = {}
for one_key in dictionary_data_extraction_attributes.keys():
values_dictionary[one_key] = 'this is a sample value for row = ' + str(n) + ' , key = ' + one_key
list.append(values_dictionary)
# print(json.dumps(list, indent=4, sort_keys=True))
f = open(expected_output_filename_full_path, "w")
f.write(json.dumps(list, indent=4, sort_keys=True))
f.close()
common_subroutines_efecte_library.log_line(log_filename_full_path, 'script completed successfully!')
# json_data = json.dumps(list)
# print('json_data = ' + json_data)
# heartbeat file must be updated at least once every 5 minutes
f = open(heartbeat_filename_full_path, "w+")
f.write('heartbeat updated: ' + common_subroutines_efecte_library.get_timestamp())
f.close()
Custom Backend -liittimen konfigurointi
Liittimien hallintaan pääsemiseksi käyttäjällä täytyy olla oikeudet Efecte Platform -konfiguraatioon.
1. Avaa Efecten hallintanäkymä (hammasrataskuvake).
2. Avaa connectors-näkymä.
3. Valitse uusi liitin

2. Valitse Data Source -tyypiksi Custom Backend

3. Täytä tiedot
- Anna liittimelle yksilöllinen nimi. Huomaa, ettei nimeä voi muuttaa jälkikäteen.
- Valitse [script_filename].py-skripti provisiointiskripti-kentästä.
- Parametrien salaussalasanaa tarvitaan parametrien piilottamiseen/paljastamiseen liittimen tallentamisen jälkeen
- WebAPI-käyttäjää tarvitaan, kun liitin kirjoittaa dataa asiakkaan Efecte-ratkaisuun
- WebAPI-salasanaa tarvitaan, kun liitin kirjoittaa dataa asiakkaan Efecte-ratkaisuun

4. Tallenna liitin Save-painikkeesta. Liitin on nyt konfiguroitu, ja voit siirtyä eteenpäin ajastetun tehtävän konfigurointiin.
Suositukset ftp-palvelimen kansiorakenteelle
Jos asiakas haluaa käyttää Custom backend -liitintä useiden erilaisten datatyyppien lataamiseen, on suositeltavaa käyttää yhtä Custom backend -liitintä per datatyyppi.
Esimerkiksi jos asiakas haluaa ladata Entitlements- ja Roles-tietoja, heillä tulisi olla 2 liitintä, kuten "Entitlements connector" ja "Roles connector".
Ja kun näiden kahden liittimen tiedostot ovat samalla ftp-palvelimella, kansiorakenne voisi olla esimerkiksi:
/sftp/iga/in/entitlements
/sftp/iga/in/entitlements/archive
/sftp/iga/in/roles
/sftp/iga/in/roles/archive
Datakansiossa tulisi olla vain yksi tiedosto kerrallaan.
Tällä kansiorakenteella voit käyttää näitä skriptiparametreja Entitlements-liittimessäsi:
“sftp_remote_path_data”:"/sftp/iga/in/entitlements",
“sftp_remote_path_archive”:"/sftp/iga/in/entitlements/archive",
“file_path”:"./entitlements/*.csv"
Ja vastaavasti eri skriptiparametrit Roles-liittimelle.
Yleisohjeet ajastetuille tehtäville
General guidance for scheduled tasks
How to Create New Scheduled Task to import data
For configuring scheduled-based provisioning task, you will need access to Administration / Connectors tab.
1. Open the Administration area (a cogwheel symbol).
2. Open Connectors view.
3. Choose Connector for Scheduled-based task and select New Task
Note! If connector is not created, you have to choose first New connector and after that New task.

4. Continue with connector specific instructions: Native Connectors
Should I use Incremental, Full or Both?
Scheduled task can be either Incremental or Full -type.
Do not import permissions with AD and LDAP incremental task
Incremental task has issue with permissions importing. At the moment it is recommended not to import group memberships with incremental scheduled task.
On Microsoft Active Directory and OpenLDAP connectors, remove this mapping on incremental task:

Setting on Scheduled tasks:

Incremental type is supported only for Microsoft Active Directory, LDAP and Microsoft Graph API (formerly known as Entra ID) Connectors.
Incremental type means, that Native Connectors (EPE) fetches data from source system, using changed timestamp information, so it fetches only data which is changed or added after previous incremental task run.
When Incremental type task is run for very first time, it does a full fetch (and it marks the current timestamp to EPE database), thereafter, task uses that timestamp to ask the data source for data that changed since that timestamp (and then EPE updates the timestamp to EPE database for next task run). Clearing task cache doesn't affect this timestamp, so Incremental task is always incremental after first run.
Full type is supported for all Connectors.
Full type import fetches always all data (it's configured to fetch) from source system, on every run.
Tasks internal cache
Both Full and Incremental type tasks use also Task cache in EPE, which makes certain imports faster and lighter for M42 system.
Beginning from version 2026.1.1
Tasks internal cache clean scheduling was moved from properties file to Task UI.
With that change you can now also decide per scheduled task when internal cache is cleared, or if it's not cleared at all. In normal situations cache is recommended to be cleared at some point to guarantee correct data on datacards. If template and imported data doesn't contain references, cache can be cleared quite rarely. With references, it's recommended to clear cache daily or weekly to guarantee correct data on datacards.

Versions before 2026.1.1
By default that task cache is cleared ad midnight UTC time. When cache is cleared, next import after that is run without caching used to reason if data fetched should be pushed to ESM, all fetched data is pushed to ESM. But after that, next task runs until next time cache is cleared, are using EPE cache to determine if fetched data needs to be pushed to ESM or not.
You can configure at what time of day task cache is emptied, by changing global setting in EPE datapump configuration:
/opt/epe/datapump-itsm/config/custom.properties
which is by default set to: clearCacheHours24HourFormat=0
You can also clear cache many times a day, but that needs to be thinked carefully, as it has impact on overall performance as EPE will push changes to ESM, that probably are already there, example(do not add spaces to attribute value): clearCacheHours24HourFormat=6,12
After changing this value, reboot EPE datapump container to take change into use.
Recommendations
Have always by default Full type scheduled task.
If you want to fetch changes to data fetched already by full task, more frequently than you can run full task, add also incremental task. Usually incremental task is not needed.
Recommended Scheduling Sequence
Recommended scheduling sequence, depends how much data is read from Customers system/directory to the Matrix42 Core, Pro or IGA solution and is import Incremental or Full.
Examples for scheduling,
| Total amount of users | Total amount of groups | Full load sequence | Incremental load sequence |
| < 500 | < 1000 |
Every 30 minutes if partial load is not used Four (4) times a day if partial load is used |
Every 10 minutes |
| < 2000 | < 2000 |
Every 60 minutes, if partial load is not used Four (4) times a day if partial load is used |
Every 15 minutes |
| < 5000 | < 3000 |
Every four (4) hours, if partial load is not used Twice a day if partial load is used |
Every 15 minutes |
| < 10 000 | < 5000 | Maximum imports twice a day, no matter if partial load is or is not used | Every 30 minutes |
| < 50 000 | < 7000 | Maximum import once a day, no matter if partial load is or is not used | Every 60 minutes |
| Over 50 000 | Over 7000 | There might be a need for another EPE-worker, please contact Product Owner | Separately evaluated |
Please note that if there are several tasks running at the same time you may need more EPE-workers. The tasks should be scheduled at different times and can be completed according to the table above. However, if there are more than 6 tasks running at the same time, the number of epeworkers should be increased. It's best practice not to schedule tasks to run at same time, if possible.
Recommendations related to performance
If the amount fo data to be imported is over 10000 concider these things:
Adjust log level of ESM and DATAPUMP to ERROR-level, to lowe the amount of logging during task run
Have as few as possible automations starting immediately for imported datacards (listeners, handlers, workflows), as those make ESM to take longer time handling new datacards.
Set removed accounts and entitlements status removed/disabled
With this functionality, you can mark account and entitlement status to e.g. Deleted or Disabled, when account or entitlement is removed from source system. Starting from version 2025.3 you can also set status to generic objects (not only to accounts/identities and entitlements/groups).
For version 2025.3 and newer
In version 2025.3 these settings are moved from properties files to Task UI. Also you can now set these settings for Generic objects, which have not been possible before this version.
There is separate configuration for each scheduled task, and for all mapping types. Here is example of this config on task:

Unique check added on 26.2 version
When this Set value for deleted objects option is enabled, at least one of the attributes mapped to the unique id must also be marked as Unique on the target template. If none of the mapped attributes are unique, the task cannot be saved and the message "Unique id must be mapped to at least one unique attribute of template" is shown.
For version 2025.2 and older
This functionality is available for “full” type scheduled tasks.
Settings are on datapump dockers configuration file. To change those parameter values, you need to set those in /opt/epe/datapump-itsm/config/custom.properties file.
Configuration
To enable disabling functionality, datapump config should have these parameters set to true:
disable.unknown.esm.users=truedisable.unknown.esm.groups=true
Those 2 parameters are false by default in 2024.2 and 2025.1 versions. In 2025.2 and newer version those are true by default.
Next are these parameters:
personTemplateStatusCodeAttributeKey=accountStatuspersonTemplateStatusAttributeDisabledValueKey=DeletedgroupTemplateStatusCodeAttributeKey=statusgroupTemplateStatusAttributeDisabledValueKey=5 - Removed
First two attributes should point to the DatacardHiddenState attribute in the User template, and tell which value should be send there when the user is deleted.
By default its accountStatus and Value 5 - Removed on IGA Account template.
All these needs to match with the attribute configuration:

Same thing applies for the next two paramaters, but its for Groups.'
If you need to change those parameters in properties file, do changes in Datapump container to file: /opt/epe/datapump-itsm/config/custom.properties and those changes will then survive over container reboot and will be copied on reboot to /opt/epe/datapump-itsm/config/application.properties.
Description
Tasks save their __taskid__ shown as Task Id mapping in the UI to the datacards, its then used to determine if the datacard was added by this task. In case there are multiple tasks with different sets of users.
This field was previously used as datasourceid, but since we moved to the model where connector can have multiple tasks its identifier cannot be used anymore, thats why the field was repurposed as taskid instead.
Taking users as an example, when task runs ESM is asked for the list of users that have its taskid in Task Id mapping field, and doesn't have a personTemplateStatusAttributeDisabledValueKey value in the personTemplateStatusCodeAttributeKey
This result is then compared to what the task fetched, and the datacards of users that were not fetched have their personTemplateStatusattribute set to value specified in the config - 5 - Removedby default.
Example log below shows described process and informs that one user was removed.

Same thing applies to groups but groupTemplateStatusattributes are used instead.
Notes
- Feature works only with full fetch scheduled tasks..
- No support for generic templates yet, only identity and access
- When migrating from the previous versions where datasourceid was still used it needs to run at least once to set its taskid’s in the datacards first.
- EPE identifies Disabled users or groups as the ones that were removed from the AD, at the present we do not support statuses related to the entity beign active or not.
- EPE does not enable users back on its own.
- If more than one tasks fetches the same users or groups it may overwrite the taskid in the datacard depending on which task ran last. It is suggested that many full type tasks are not fetching same user or group.
- Always do configuration file changes to custom.properties, do not change only application.properties as those changes are lost on container reboot if you have not done same changes to custom.properties.
Datan lukemisen ajastetun tehtävän konfigurointi
Huomio! Jos liitintä ei ole vielä luotu, sinun täytyy ensin luoda ”uusi liitin”, ja vasta sen jälkeen voit luoda uusia tehtäviä.
1. Avaa Efecten hallintanäkymä (hammasrataskuvake).
2. Avaa connectors-näkymä.
3. Valitse liitin, jolle ajastuspohjainen tehtävä konfiguroidaan
4. Valitse uusi tehtävä oikean liittimen alta

4. Määritä tehtävän ajastus (ajetaanko ajastettu tehtävä säännöllisesti, ja miten). Valitse ajastusväli sen mukaan, kuinka paljon dataa asiakkaan Efecte-ratkaisuun luetaan.

5. Täytä tehtävän tiedot
- Liittimelle yksilöllinen tehtävän nimi. Huomaa, ettei nimeä voi muuttaa jälkikäteen.
- Task usage asetetaan arvoon scheduled
- Mappings type asetetaan arvoon generic (yksi malli)

6. Täytä epäonnistumistiedot
Valinnaiset asetukset virhetilanteiden käsittelyyn: jos ajastettu tehtävä epäonnistuu, se voi luoda tietokortin Efecte ESM:ään, joka näyttää virheen. Jos epäonnistumisasetukset on määritetty, ylläpitäjän ei tarvitse manuaalisesti tarkistaa ajastettujen tehtävien tilaa.
- Failure template - Valitse tietokortin malli, joka luodaan mahdollisten virheiden yhteydessä provisioinnin aikana (yhteys tietolähteisiin, aikakatkaisut jne.)
- Failure folder - Valitse kansio, johon epäonnistumistietokortti tallennetaan.
- Failure attribute - Valitse attribuutti, johon virhetieto tallennetaan Failure Templatessa.

- Objectguid-attribuutin nimi. Kirjoita syöttödatasi sarakkeen/attribuutin nimi, joka sisältää rivin yksilöllisen tunnisteen. Esimerkiksi: objectGUID

7. Täytä geneerisen mallin mappaukset
Geneeristä dataa luetaan mihin tahansa malliin, jonka käyttäjä haluaa, ja on pakollista asettaa kohdekansio, datasourceid ja yksilölliset arvot, joita käytetään datan tunnistamiseen custom backendin ja Efecte-ratkaisun välillä.
-
Target template - Valitse malli, jolla määritetään attribuuttimappaukset
- Target folder - Valitse kansio kansioluettelosta. Luettelo rajautuu vastaamaan valitun mallin kanssa yhteensopivia kansioita.
- Data Source Type mapping - valinnainen. Jos se on asetettu, se kirjoittaa liittimen tyypin kyseiseen attribuuttiin.
- Task Id mapping - Tehtävän tunnistenumero kirjoitetaan tähän attribuuttiin. Tämän täytyy olla ei-yksilöllinen attribuutti.
- Set value to datacard fo object deleted from source system - Tämä toiminto aktivoidaan asettamalla valintaruutu päälle. Kun jokin objekti, joka on aiemmin luettu kolmannen osapuolen järjestelmästä ratkaisuun, poistetaan kolmannen osapuolen järjestelmästä (eli tämän tehtävän kysely ei enää palauta sitä). Tämä ajastettu tehtävä huomaa poistamisen ja merkitsee tietokortin valitun attribuutin haluamallasi arvolla. Tätä voidaan käyttää esimerkiksi Status-attribuutin asettamiseen arvoon Deleted (kuten alla olevassa esimerkkikuvakaappauksessa). Tämä toiminto toimii vain Full-tyyppisille tehtäville, ei Incremental-tehtäville.
-
Attribuuttimappaukset
- Efecte-mallin attribuutti - mihin Efecte-hakemiston attribuuttiin attribuutti mapataan.
- file attribute - mikä tiedoston attribuutti mapataan Efecteen

8. Jos varsinaista skriptiä täytyy muokata, se täytyy ladata asiakkaan host-koneelta, muokata ja ladata uudelleen.
- Jos sinulla ei ole pääsyä host-koneeseen, ota yhteyttä Efecten Service Deskiin saadaksesi apua.
9. Tallenna muutokset
10. Ennen kuin ajat Custom Backend -liittimen ajastetun tehtävän,
- Tarkista, että kaikki työnkulkuihin ja asetuksiin liittyvä konfiguraatio tietokorteissa on kunnossa.
- Kun ajat ensimmäistä kertaa, varmista, että provisiointi on poistettu käytöstä hakemistoihin ja sovelluksiin päin
- Jos käytät oletusarvoista IGAConnector.py-skriptiä ja csv-tyyppistä tuontitiedostoa, skriptin käyttämä kenttäerotin on ; (puolipiste).
11. Aja tehtävä manuaalisesti tai odota, kunnes ajastettu ajo käynnistyy.
12. Varmista, että data on luettu oikeille tietokorteille ja oikeat attribuutit ovat kunnossa.
Datan kirjoittamisen tapahtumatehtävän konfigurointi
- Avaa Efecte Platform -konfigurointinäkymä (hammasrataskuvake).
- Avaa connectors-näkymä
- Valitse liitin, joka käyttää tapahtumatehtävää
- Valitse ”new task” oikean liittimen alta

4. Täytä tehtävän tiedot
- Task name - Anna tehtävälle nimi, se näytetään connectors-näkymässä.
- Task usage kertoo, käytetäänkö tehtävää datan lukemiseen vai kirjoittamiseen. Voidaan muuttaa jälkikäteen, mutta sitä ei suositella, jos tapahtumatehtävä on käytössä. Se rikkoo työnkulkuja.
- Valitse Mappings type Generic

5. Määritä geneeriset mappaukset
-
Target template - Valitse malli, jolla määritetään attribuuttimappaukset
- Target folder - Valitse kansio kansioluettelosta. Luettelo rajautuu vastaamaan valitun mallin kanssa yhteensopivia kansioita.
-
Attribuuttimappaukset
- Efecte-mallin attribuutti - mihin Efecte-hakemiston attribuuttiin attribuutti mapataan.
- Backend attribute - mikä hakemiston attribuutti mapataan Efecteen
- Add new attribute - On mahdollista asettaa lisäattribuutteja, jotka luetaan backendistä, valitsemalla New attribute -painike

6. Tallenna provisiointitehtävä ”save”-painikkeesta
7. Seuraava vaihe on konfiguroida työnkulku käyttämään tätä tapahtumapohjaista tehtävää. Efecte Platformin työnkulkumoottorista on mahdollista suorittaa provisiointitoimintoja backendiä kohti. Tämä tarkoittaa, että mitä tahansa käytettävissä olevaa orkestrointinoodin toimintoa voidaan ajaa missä tahansa työnkulun vaiheessa.
Työnkulkuviittaukset näytetään liittimen yleiskatsausnäkymässä,

Työnkulun toiminnot (orkestrointinoodit)
Run provisioning task
Tätä toimintoa käytetään, kun kaikki hakemiston tieto tarvitaan välittömästi takaisin.

Yllä olevassa kuvassa ylläpitäjät voivat valita oikean Directory ”Target”-kohteen. Run provisioning task -orkestrointinoodi lukee attribuutteja backendistä Efecteen.
Jos attribuuttimappauksia täytyy muuttaa, kyseiset attribuutit täytyy määrittää provisiointitehtävän konfigurointinäkymässä, jotta ne voidaan muuttaa myös orkestrointinoodissa.
Provisioning exception on valinnainen ominaisuus tässä työnkulun noodissa. Ylläpitäjät voivat konfiguroida tämän ominaisuuden käyttöön, jolloin poikkeukset voidaan kirjata, jos provisiointitoimintojen aikana ilmenee poikkeuksia.
Execute Custom Backend Task
Tämä toiminto kutsuu Python-skriptiä. Siinä vaiheessa uusi tieto on saatavilla vain ulkoisessa järjestelmässä, ei vielä ESM:ssä.

Yllä olevassa kuvassa ylläpitäjät voivat valita oikean Directory ”Target”-kohteen. Jos attribuuttimappauksia täytyy muuttaa, kyseiset attribuutit täytyy määrittää provisiointitehtävän konfigurointinäkymässä, jotta ne voidaan muuttaa myös orkestrointinoodissa.
Provisioning exception on valinnainen ominaisuus tässä työnkulun noodissa. Ylläpitäjät voivat konfiguroida tämän ominaisuuden käyttöön, jolloin poikkeukset voidaan kirjata, jos provisiointitoimintojen aikana ilmenee poikkeuksia.
Liittimen mukauttaminen
How to create and modify custom Python scripts
General info
Generic Python Script connector comes with couple out-of-the box Python scripts. You should not modify those. Instead, if you need to make modifications to those, copy-paste those to new name and then do your modifications to newly named python script file. And as last step, modify your connector to use that script.
Work order:
- Create your custom scheduled or task-based script
- Take it into use to connector from Connectors UI
Scheduled scripts
How to take your custom python script into use for scheduled tasks, guidance for 1 host and 1 worker environment:
Note! Do not change "default" .py files which came with environment installation.
Copy your customly named (in this example mypythonscript.py) python script to these folders from HOST (remember to use correct tenant_name in path):
cp mypythonscript.py /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/only_scheduled
cp mypythonscript.py /var/lib/efecteone/tenant_files/{tenant_name}/epe-worker-1/files/custom-provisioning-scripts
cp mypythonscript.py /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts
Change your custom python script file permission to 755 on all those above locations where you copied your script(in this example mypythonscript.py) (remember to use correct tenant_name in path):
chmod 755 /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/only_scheduled/mypythonscript.py
chmod 755 /var/lib/efecteone/tenant_files/{tenant_name}/epe-worker-1/files/custom-provisioning-scripts/mypythonscript.py
chmod 755 /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/mypythonscript.py
If you have more hosts, repeat on every host.
If you have more workers, repeat to every worker(check that worker folder name is correct).
Event-based scripts
How to take your custom python script into use for event-based tasks, guidance for 1 host environment:
Note! Do not change "default" .py files which came with environment installation.
Copy your customly named (in this example mypythonscript.py) python script to these folders from HOST (remember to use correct tenant_name in path):
cp mypythonscript.py /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/only_event
cp mypythonscript.py /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts
Change your custom python script file permission to 755 on all those above locations where you copied your script(in this example mypythonscript.py) (remember to use correct tenant_name in path):
chmod 755 /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/only_event/mypythonscript.py
chmod 755 /var/lib/efecteone/tenant_files/{tenant_name}/epe-master/files/custom-provisioning-scripts/mypythonscript.py
If you have more hosts, repeat on every host.
Example/base for custom Event-based python script
This script reads attribute values from Connector and from Orchestration node. And prints values to logs. You can use this as a starting point for your own custom python script for Event-based tasks.
#!/usr/bin/python3
import json
import sys
import logging
def main():
# Configure logging, change log file name
logging.basicConfig(filename='python_event_task_abc.log', level=logging.INFO, format='%(asctime)s - %(message)s')
# Read inputs from stdin
lines = sys.stdin.read().splitlines()
if len(lines) != 2:
print("Error: Expected exactly two lines of input.")
raise Exception("Expected exactly two lines of input.")
# Parse the first line, this contains connector variables
try:
connector_parameters = json.loads(lines[0])
host = connector_parameters.get('host', None)
password = connector_parameters.get('password', None)
logging.info(f"Connector parameters, Host={host}")
# read custom connector parameters here
except json.JSONDecodeError:
raise Exception("Connector parameters is not a valid JSON string.")
# Parse the second line, this contains mappings data from template datacard
try:
task_mappings = json.loads(lines[1])
logging.info(f"Task mappings JSON: {task_mappings}")
#read task mappings data here
# Implement your logic here
except json.JSONDecodeError as e:
raise Exception("Task mappings is not a valid JSON string.") from e
# Exceptions raised are controlling workflow orchestration node flow, on exception it goes to Exception path, otherwise it goes to Completed path. Exception raised can be seen on Provisioning exception attribute value.
except Exception as e:
raise Exception("An unexpected error occurred") from e
if __name__ == "__main__":
main()
Take customly named script into use to connector
How to take your customly named Python script into use, by selecting it from Connectors UI. Select your script from connectors Provisioning script -dropdown:

Implementation and work estimations
Only Matrix42 has access to host, which is needed for these custom scripts to be installed.
These expansion possibilities always need Matrix42 consultants review, before implementation and work estimations can be agreed.
Vianmääritys
- Jos failure template on käytössä, tarkista virhetiedot oikealta tietokortilta
- Tarkista ajastetun tehtävän historia liittimien hallinnasta
- Tarkista Matrix42 Native Connectorsin lokit, ne löytyvät Connectors-välilehdeltä, Logs-osiosta
- Tarkista FAQ-dokumentit
Table of Contents

