Connect Database
Das Add-on Connect Database für KIX Pro ermöglicht die Nutzung von Datenbankverbindungen als Datenquelle zur weiteren Verwendung in KIX. Für den konkreten Einsatz bedarf es einer entsprechenden Konfiguration.
Unterstützt werden die Datenbank- Managementsysteme: PostgreSQL, MariaDB/MySQL oder MS SQL via ODBC.
Die Anbindung einer Datenbank-Datenquelle erfordert den direkten Zugriff auf die relevante Datenbank mittels Authentifizierung via Nutzername und Passwort. Das betreffende DBMS muss dabei via Datenbank- Socket-Verbindung erreichbar sein.
Die Einrichtung der Datenbankverbindungen und der Datenquellen erfolgt im Explorer des Admin-Moduls unter Connect .
Für die Nutzung einer externen Datenquelle muss beides eingerichtet sein.

Abb.: Menü zur Einrichtung einer Datenbankverbindung

Abb.: Menü zur Einrichtung der benötigten Datenbank-Datenquellen
Die Einrichtung und Konfiguration von Datenbankverbindungen erfolgt schrittweise im Menü
. Hinterlegen Sie hier die Verbindungsparameter zur Datenbank. Beim Speichern versucht KIX die Datenbankverbindung aufzubauen. Gelingt dies nicht, werden Sie darauf hingewiesen und können die Einstellungen korrigieren.Eine Datenbankverbindung benötigt für den Zugang zur Datenbank die Angaben zum Host, den Datenbank- Namen sowie den Nutzernamen und das Passwort, mit dem die Datenbank geschützt sind. Diese Angaben müssen bereitgestellt und im DSN-Feld eingetragen werden. Halten Sie diese Informationen bereit.

Abb.: Einrichten einer Datenbankverbindung - Schritt 1

Abb.: Einrichten einer Datenbankverbindung - Schritt 2
Parameter | Beschreibung |
---|---|
Name | Der Name der Datenverbindung z. B.: SimpleERP (Database) |
Typ | Typ der Datenverbindung z. B.: DB Definiert, wie der Zugriff auf die Datenquelle erfolgt. Die zur Verfügung stehende Auswahl ist abhängig von den installierten Zusatzmodulen. |
Kommentar | Optionaler Kommentar Beispiel ERP Datenbank; enthält Daten zu: - Kunden und Kontakten - Produktkategorien, Produktverfügbarkeit im Lager - Bestellungen, Artikelbestellungen - Rechnungen |
Gültigkeit | de-/aktiviert Datenquelle für weitere Nutzung Mögliche Parameter: valid | invalid |
DB Typ | Datenbanktyp, zu dem verbunden werden soll. Diese Angabe ist relevant, wenn der Typ nicht aus DSN ersichtlich ist. z. B.: postgresql | mysql | mssql |
DSN | Für den Datenbankzugriff hinterlegen Sie hier:
Beispiel: DBI:Pg:dbname=erp;host=192.168.130.107; DBI:Pg:dbname=kix;host=db; DBI:ODBC:Driver={ODBC Driver 17 for SQL Server};Server=<FQDN/IP>,<Port>;Database=<Database>;UID=<login>;PWD=<password> Ersetzen Sie im Beispiel die folgenden Parameter durch Ihre Werte:
HinweisDer Zugriff auf einen MS SQL-Server erfolgt mittels ODBC. Achten Sie im DSN auf die Angabe von Nutzername und Passwort. Beide Angaben werden bei ODBC-Verbindung direkt im DSN definiert. Die Einzelparameter "DB-Nutzer" und "DB-Password" sind dann nicht relevant. |
DB-Nutzer | Nutzername/Login mit dem der Datenbank- Zugriff erfolgt. Diese Angabe kann bei Zugriff auf einen MS SQL-Server entfallen, da der Nutzername bereits im DSN angegeben wird. z. B.: erpuser | kix |
DB-Passwort | Passwort des Nutzers mit dem der Datenbank-Zugriff erfolgt. Diese Angabe kann bei Zugriff auf einen MS SQL-Server entfallen, da das Passwort bereits im DSN angegeben wird. z. B.: SuperSecretPassword | kix |
Eine Datenbank-Datenquelle besteht aus allgemeinen Angaben und zwei parametrisierbaren SELECT- Statements, welche einer Datenbankverbindung zugeordnet sind. Beide Abfragen sind dabei nicht auf eine einzelne Datenbanktabelle/View begrenzt, sondern können alle verfügbaren Datenbanktabellen/Views einbinden. Spezielle Einschränkungen, Bedingungen oder Vereinigungen ("JOIN") können direkt in den Abfragen definiert werden.
Die Einrichtung und Konfiguration von Datenbank-Datenquellen erfolgt im Explorer des Admin-Moduls unter
.Für die nachfolgende Beschreibung wird angenommen, dass eine einfache Datenbank mit der Tabelle "Servicequotas (DB)" als Datenquelle dient und die Tabelle folgende Struktur aufweist:
erp=> \d servicequotas; View "public.servicequotas" Column | Type | Collation | Nullable | Default ---------------+--------------------------+-----------+----------+--------- id | integer | | | customer_no | character varying(32) | | | customer_name | character varying(255) | | | comments | character varying(512) | | | quota | integer | | | startdate | timestamp with time zone | | | enddate | timestamp with time zone | | | erp=>
Schritt 1 - Kopfdaten

Abb.: Datenquelle einrichten - Schritt 1
Hinweis
Der apiResourceName wird aus dem vergebenen Namen erstellt. Dieser ist erforderlich für die Ansprache der Datenquelle via der Backend-REST-API von KIX oder für die Einbindung der Datenquelle in Widget- oder Sidebartabellen. Die Bildung des apiResourceName erfolgt durch:
Ersetzung der Großbuchstaben durch Kleinbuchstaben
Ersetzung der Leerzeichen durch Unterstrich ("_")
Entfernung von ungültigen Zeichen wie Ziffern oder Sonderzeichen.
Unterstrich ("_") wird akzeptiert.
Die Datenquelle ist in der Rest-API via /datasources/<apiResourceName>
erreichbar.
Parameter | Beschreibung |
---|---|
Name | Der Name der Datenquelle. z. B.: "Servicequotas (DB)" → apiResourceName: servicequotas_DB |
Typ | Typ der Datenquelle z. B.: DB Die Auswahlliste ist abhängig von den installierten Zusatzmodulen. |
Verbindung | Name der zu nutzenden Datenquelle (Auswahlliste) z. B.: "Simple ERP (Database)" |
Rollen | Schränkt die Verwendung der Datenquelle auf Basis von KIX-Berechtigungsrollen ein. Nur Nutzer mit den hier gewählten Rollenzuordnungen können die Daten aus der KIX-Datenquelle einsehen und im Rahmen ihrer Berechtigungen nutzen. z. B.: Customer Manager, Customer Reader, Ticket Agent, Ticket Reade |
Kommentar | Optionaler Kommentar z. B.: "Diese Datenquelle liefert beliebige Leistungskontingente aus der ERP- Datenquelle." |
Gültigkeit |
|
Schritt 2 - Datenbankabfragen

Abb.: Beispiel-Einrichtung Datenquelle - Schritt 2
Bei der Einrichtung von Datenbankabfragen/ SELECT-Statements wird zwischen Listenanfrage ("List Select Statement") und Detailanfrage ("Item Select Statement") unterschieden. Für beide werden separate Abfragen eingerichtet.
Das System unterstützt mit Vorgabewerten, die angepasst werden müssen. Für eine Datenbank- Datenquelle sind beide Angaben erforderlich.
Parameter | Beschreibung | Beispiel |
---|---|---|
List Select Statement | Listenanfragen dienen der Ermittlung einer Reihe von Einträgen, die bspw. in einer Feldeingabe zur Auswahl angeboten werden. Typischerweise sind diese kurz gehalten, beinhalten kleinere Ergebnismengen (z.B. nur ID, Name, Erklärung) und haben weiter gefasste Bedingungen, die eine Nutzereingabe für Suchbegriffe (sogenannte Suchkriterien) zulassen. Das Ergebnis einer Listenanfrage wird für die Anzeige von Auswahlwerten in Eingabefeldern oder zur Anzeige eines Einzelwerts genutzt. Wichtig: Der Alias "ID" muss immer vorhanden sein! Beispiel SELECT id as "ID", customer_no AS "cno", customer_name AS "cname", quota FROM servicequotas WHERE ${Parameters.Search?1=1}, AND startdate > '${Parameters.StartDate?2020-01-01 00:00:00}'; Die Notation Die Bedingung | SELECT id as "ID", customer_no AS "cno", customer_name AS "cname", quota FROM servicequotas WHERE ${Parameters.Search?1=1} AND startdate > '$ {Parameters.StartDate?2020-01-01 00:00:00}'; |
Item Select Statement | Detailanfragen dienen der Anzeige eines konkreten Eintrags aus der Datenquelle. Sie sind relevant, wenn alle Angaben eines konkreten Eintrags benötigt werden. Dabei werden i. d. R. mehrere Spalten bezogen und z. B. in einer Sidebar als Tabelleneinträge oder an einem Feldwert als Info-Popup dargestellt. Beispiel SELECT id as "ID", customer_no AS "cno", customer_name AS "cname", quota, comments, startdate, enddate FROM servicequotas WHERE id = ${Parameters.ID?0}; Im Beispiel umfasst die Detailanfrage zusätzlich den konkreten Wert der Quota und in welchem Zeitbereich sie gilt. Entsprechend werden mehr Spalten in der Abfrage zurück geliefert. Ein Einzeleintrag wird immer auf Basis der ID-Spalte identifiziert. Entsprechend ist die Bedingung Sollte kein Schlüsselwert zur Abfrage übermittelt werden wird ein Eintrag mit |
Das Umbenennen von Datenquellen ist jederzeit möglich. Alle bestehenden Verwendungen erfordern daraufhin manuelle Anpassungen. Dies betrifft insbesondere die Konfiguration der GUI (SysConfig), Ticketvorlagen und Aktionen. Der alte apiResourceName muss dann durch den neuen apiResourceName ersetzt werden.
![]() |
Abb.: Schema der Verwendung von Datenquellen
Szenario:
An einem Ticket soll erfasst werden, welche Quota gilt. Dazu wird ein dynamisches Feld eingerichtet, welches von Agenten gesetzt und in Detailansichten mit der Darstellung von Einzelangaben zur Quota eingesehen werden soll.
Um dies zu erreichen, ist im KIX folgendes zu konfigurieren:
Einrichtung von Datenbankverbindung und Datenquelle
Es wird vorausgesetzt, dass eine Datenbankverbindung (bspw. SimpleERP) sowie eine Datenquelle (bspw. Servicequotas (DB) ) bereits eingerichtet wurden.
(s. auch: Einrichten von Datenbank-Datenquellen und Einrichten von Datenbankverbindungen
Anlegen des Dynamischen Feldes ServiceQuota im Menü
Konfigurationsparameter des Dynamischen Feldes:
Name: ServiceQuota
Label: Service Quota
Feldtyp: Data Source
Objekttyp: Ticket
SSP-Sichtbar: nein
Konfiguration:
Data Source: Servicequotas (DB)
Display Pattern: <quota> (<cname>)
Default Display Columns
1: quota / Quota
2: cname/Org.-name
3: comments/Comments
4: startdate/From
5: enddate/Until
Cache TTL: 0
Count Min: 1
Count Max: 1
Einrichten der Ticketaktion (Setze) Service Quota im Menü
Schritt 1 - Aktionsinformationen
Referenz Objekt: Ticket
Name: ServiceQuota
Label: Service Quota
Nutzungskontext: Agent
Nutzereingabe erforderlich: ja
Schritt 2 - Filter
Rollen: Ticket Agent
Schritt 3 - Pre Actions
leer
Schritt 4 - Eingabefelder
Service Quota - set in mask
Für Beschränkung der offerierten Auswahlen durch eine Suche nach dem Organisations-Namen werden Erweiterte Optionen definiert:
Ergänzung des Abschnitts
LOADINGOPTIONS
um Angaben zumfilter
.<SEARCH_VALUE>
dient als Platzhalter für das Suchmuster, welches später vom Anwender eingegeben wird.Ergänzung des Abschnitts
LOADINGOPTIONS
um Angaben zumquery
.Es werden dadurch nur die Einträge offeriert, deren Startdatum nicht vor dem 23.04.2022 liegt.
Es können Platzhalter wie <KIX_TICKET_DynamicField_SomeDateTimeField> oder auch <SEARCH_VALUE> verwendet werden.
Die
LOADINGOPTIONS
sind nur zur Einschränkung/Aufbereitung der Listenanfragen zu verwenden. Für die Detailanfragen muss die von der Listenanfrage gelieferte ID als eindeutiger Kenner für den abzurufenden Eintrag genügen.
{ "option": "LOADINGOPTIONS", "value": { "expands": [], "filter": [ { "filterType": "OR", "operator": "LIKE", "property": "cname", "type": "STRING", "value": "<SEARCH_VALUE>" } ], "query": [ [ "StartDate" , "2022-04-23 00:00:00"] ], "includes": [], "limit": null, "sortOrder": null } },
Schritt 5 - Post Actions
leer
Darstellung des Dynamischen Feldes in den Ticketdetails
Navigieren Sie im Explorer zu
Suchen und öffnen Sie den Schlüssel
(Ticket Details)Binden Sie im SysConfig-Schlüssel das Dynamische Feld ServiceQuota ein
(s. auch Werte Dynamischer Felder anzeigen).
Sie können nachfolgenden Codeblock verwenden:
{ "componentId": "dynamic-field-value", "componentData": { "name": "ServiceQuota" }, "conditions": [ { "property": "DynamicFields.ServiceQuota", "operator": "NE", "value": null } ]
Klicken Sie nach dem Speichern Ihrer Änderungen am Konfigurationsschlüssel auf
.
Das Dynamische Feld ServiceQuota ist nun in den Ticketdetails enthalten, sodass dessen Wert angezeigt werden kann.
Abb.: Anzeige des Dynamischen Feldes "ServiceQuota" in den Ticketdetails
Alternativ dazu können Sie das Dynamische Feld auch in andere Ansichten einbinden.
![]() |
Abb.: Schema der Verwendung von Datenquellen in KIX
Szenario:
Zu einer Organisation sollen an jedem Ticket der Organisation alle Bestellungen eingesehen werden können. In KIX sind die Kundennummern bekannt, die auch im ERP für Kundenorganisationen verwendet werden. Um dies zu erreichen, ist im KIX folgendes zu konfigurieren:
Einrichtung der Datenbankverbindung
Einrichtung der Datenquelle (= Datenbank-Tabelle)
Einrichtung Dynamisches Feld OrderListSidebar
Einrichtung des Sidebar-Widgets Order List in den Ticketdetails
Für die nachfolgende Beschreibung wird angenommen, dass eine einfache Datenbank mit den Tabellen "orders" und "customers" als Datenquelle dient. Es wird ferner angenommen, dass die Tabellen folgende Struktur aufweisen:
erp=> \d orders; Table "public.orders" Column | Type | Collation | Nullable | Default --------------+------------------------+-----------+----------+------------------------------ id | integer | | not null | generated always as identity customer_id | integer | | | order_number | character varying(255) | | not null | description | character varying(512) | | not null | order_date | date | | not null | ... erp=> \d customers; Table "public.customers" Column | Type | Collation | Nullable | Default ---------------+------------------------+-----------+----------+------------------------------ id | integer | | not null | generated always as identity customer_name | character varying(255) | | not null | customer_no | character varying(32) | | not null | addr_street | character varying(255) | | | addr_city | character varying(128) | | | addr_zip | character varying(16) | | | addr_country | character varying(128) | | | url | character varying(255) | | not null | comments | character varying(512) | | not null | ... erp=>
Einrichtung der Datenbankverbindung
Es wird vorausgesetzt, dass eine Datenbankverbindung (bspw. SimpleERP) bereits eingerichtet wurde.
(s. auch: Einrichten von Datenbankverbindungen)
Einrichtung der Datenquelle
Zum Einrichten der Datenquelle navigieren Sie zu
und nehmen Sie folgende Konfiguration zur Einrichtung der Datenquelle vor:Name: OrderList (DB)
Typ: DB
Verbindung: SimpleERP (DB)
Rollen: Customer Manager, Customer Reader, Ticket Agent, Ticket Reader
Kommentar: kann entfallen
Gültigkeit: gültig
List Select Statement:
SELECT o.id as "ID", c.customer_no, o.order_number AS "OrderNumber", o.order_date AS "Date" FROM orders o LEFT JOIN customers c ON (o.customer_id = c.id) WHERE ${Parameters.Search?1=0};
Die Fallback-WHERE-Bedingung
1=0
hat zur Folge, dass keine Einträge gelistet werden, wenn keine gültige Suchanfrage übergeben wird.Item Select Statement:
SELECT o.id as "ID", c.customer_no, o.order_number AS "OrderNumber", o.description AS "Description", o.order_date AS "Date" FROM orders o LEFT JOIN customers c ON (o.customer_id = c.id) WHERE o.id = ${Parameters.ID?0};
Einrichtung Dynamisches Feld OrderListSidebar im Menü
Das Feld dient lediglich zum Tragen der Konfiguration der Datenquelle und der Vorgabespalten in der Sidebar, sofern diese nicht weitere oder weniger Spalten definiert.
Das Feld muss nicht eingesetzt werden um einen Wert am Ticket zu hinterlegen.
Name: OrderListSidebar
Label: Order List Sidebar
Feldtyp: Data Source
Objekttyp: Ticket
SSP-Sichtbar: nein
Konfiguration:
Data Source: OrderList (DB)
Display Pattern: <quota> (<cname>)
Default Display Columns
1: OrderNumber/ OrderNumber
2: Date/Date
3: Description/Description
4: c.customer_no/Customer Number
Cache TTL: 0
Count Min: 1
Count Max: 1
Einrichtung Sidebarwidget Order List in den Ticketdetails
Tipp
Dieses Beispiel zeigt die Verwendung von festen Parametern zur Einschränkung einer Listenanfrage.
Als Parameter können auch variable (durch den Nutzer änderbare) Eingabewerte in Dialogen dienen. Damit können abhängige Eingaben über mehrere Felder abgebildet werden, z.B. "Produktlinie → Produkt → Model" oder "Auftrag → Auftragsposition".
Abb.: Sidebarwidget "Order List" in den Ticketdetails
Navigieren Sie im Explorer zu
Suchen und öffnen Sie den Schlüssel
(Ticket Details)Ergänzen Sie den nachfolgenden Codeblock im Array
sidebars
:{ "instanceId": "ticket-details-datasource-orderlist", "configuration": { "id": "ticket-details-datasource-orderlist", "name": "Order List from DataSource", "type": "Widget", "widgetId": "table-widget", "title": "Translatable#Order List", "actions": [], "subConfigurationDefinition": null, "configuration": { "id": "ticket-details-datasource-orderlist-widget", "name": "orders from data source", "type": "TableWidget", "objectType": "DataSourceRequestItem", "sort": [], "subConfigurationDefinition": null, "configuration": { "id": "ticket-details-datasource-orderlist-table", "name": "orders from datasource", "type": "Table", "objectType": "DataSourceRequestItem", "loadingOptions": { "filter": [ { "filterType": "OR", "operator": "LIKE", "property": "c.customer_no", "type": "STRING", "value": "<KIX_ORG_Number>" } ], "sortOrder": null, "query": null, "limit": 35 }, "specificLoadingOptions": { "dfName": "OrderListSidebar" }, "displayLimit": 15, "tableColumns": [ { "name": null, "property": "OrderNumber", "showText": true, "showIcon": true, "showColumnTitle": true, "showColumnIcon": false, "size": 250, "sortable": true, "filterable": true, "hasListFilter": false, "dataType": "STRING", "resizable": true, "defaultText": "", "translatable": true, "titleTranslatable": true, "useObjectServiceForFilter": false }, { "name": null, "property": "Date", "showText": true, "showIcon": true, "showColumnTitle": true, "showColumnIcon": false, "size": 100, "sortable": true, "filterable": true, "hasListFilter": true, "dataType": "STRING", "resizable": true, "defaultText": "", "translatable": true, "titleTranslatable": true, "useObjectServiceForFilter": false } ], "headerHeight": 1.75, "rowHeight": 1.75, "emptyResultHint": "Translatable#0 orders found.", "fixedFirstColumn": false }, "showFilter": false, "shortTable": false, "predefinedTableFilters": [], "cache": false, "resetFilterOnReload": true }, "minimized": false, "minimizable": true, "icon": "fas fa-shopping-cart", "contextDependent": false }, "size": "large", "permissions": [] },
Speichern Sie die Änderung.
Klicken Sie im Header der SysConfig auf
, um die Ansicht im Frontend zu aktualisieren.
Danach wird das Widget in der rechten Seitenleiste angezeigt.
![]() |
Abb.: Schema der Verwendung von Datenquellen
Szenario: Inventarisierung Asset Management
In der KIX Asset-Datenbank gibt es eine Assetklasse Quota, in deren Einträgen die Anzahl der pro Kunde und Servicevertrag inkludierten Service-Calls beschrieben wird. Die Informationen wie viele Calls zulässig sind, liegen im ERP in einer einfachen Datenbanktabelle mit den Spalten Kundennummer, Kundenname, Calls u. a. vor. Diese Daten sollen aus der ERP-Datenbank in die KIX-Asset-Datenbank importiert und aktuell gehalten werden.
Um dies zu erreichen, ist im KIX folgendes zu konfigurieren:
Erstellung der Assetklasse Quota
Einrichtung der Datenbankverbindung
Einrichtung der Datenquelle (= Datenbank-Tabelle)
Einrichtung des Automatisierungsjobs
Ausschnitt Quelldaten:
kix=# SELECT * FROM servicequotas; id | number | name | comments | quota | startdate | enddate ----+---------+--------------------------+----------+-------+------------------------+------------------------ 1 | MY_ORGA | My Organisation | | 100 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 3 | MAMU | Mustermann GmbH | | 60 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 4 | TWD | Torchwood Ltd. | | 39 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 5 | FKLHZ | Fackelholz AG | | 36 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 6 | capeIT | c.a.p.e. IT GmbH | | 71 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 7 | HRMSHL | Harmony Shoal | | 45 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 8 | ITKOM | IT Kommunikations GmbH | | 43 | 2021-01-01 00:00:00+00 | 2022-01-01 00:00:00+00 ...
Erstellung der Asset-Klasse Quota
Als Voraussetzung muss eine Assetklasse Quota eingerichtet sein. Dazu wird die nachfolgende, einfache Assetklassen-Definition angenommen (s. auch: Eine Asset-Klasse anlegen oder bearbeiten):
[ { Key => 'OrgNumber', Name => 'Org. Number', Searchable => 1, CustomerVisible => 1, Input => { Type => 'Text', }, }, { Key => 'Quota', Name => 'Quota', Searchable => 1, CustomerVisible => 1, Input => { Type => 'Text', }, } ];
Einrichtung von Datenbankverbindung und Datenquelle
Es wird vorausgesetzt, dass eine Datenbankverbindung (SimpleERP) sowie eine Datenquelle (Servicequotas (DB) ) bereits eingerichtet wurden.
(s. auch: Einrichten von Datenbank-Datenquellen und Einrichten von Datenbankverbindungen
Einrichtung Automatisierungs-Job
Navigieren Sie im Explorer zu
.Konfigurieren Sie den Job wie folgt:
Schritt 1 - Job Informationen
Job Typ: Synchronisation
Name: Synchronize Service Quotas from ERP
Optionaler Kommentar:
Holt alle Servicekontingente der Kundenorganisationen aus der ERP-Datenbank und erstellt/aktualisiert für jedes ein Asset der Klasse "Quota".
Gültigkeit: gültig
Ausführungsplan
Wochentag(e): Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
Zeit: 4:00
Aktionen
Die Aufgabe des Automatisierungsjobs ist es, alle Servicequotas abzufragen und für jeden Eintrag ein Asset in der Asset-Datenbank zu erstellen oder dieses zu aktualisieren, wenn vorhanden.
Damit geprüft werden kann, ob ein Asset bereits existiert, wird der Name einer Servicequota als eindeutig innerhalb der Assetklasse vorausgesetzt.
Da die Angaben der ERP-Datenbank nicht direkt in eine Asset-Struktur eingefügt werden können, müssen diese zuvor aufbereitet werden.
Es ergibt sich die folgende Liste an Macro Actions:
Action: Get List Of Items From Data Source
(Konfigurationsparameter der Macro Action s.: Get Item List From Data Source )
ItemList: CompanyList
Data Source: Servicequotas (DB)
Search:
{ "Item": { "AND": [ { "Field": "customer_no", "Operator": "LIKE", "Type": "STRING", "Value": "%" } ] } }
Parameters:
{}
(leer/keine Angaben)
Action: Loop
(Konfigurationsparameter der Macro Action s. Schleife )
Values: ${CompanyList}
Loop Variable: CurrCompany
Macro: Synchronisation
Aktion: Get Item From Data Source
Achtung: Struktur beachten! Gehört zu Macro unter Loop
(Konfigurationsparameter der Macro Action s.: Get Item From Data Source )
Item: CurrCompanyData
Data SourceServicequotas (DB)
Item ID: ${CurrCompany.ID}
Aktion: XSL Transformation
Achtung: Struktur beachten! Gehört zu Macro unter Loop
(Konfigurationsparameter der Macro Action s.: XSL Transformation)
TransformedData: CurrQuotaAssetData
Data: ${CurrCompanyData}
XSL Template:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:KIX="urn:KIX"> <xsl:output method="xml" encoding="utf-8" indent="yes"/> <xsl:template match="RootElement"> <root> <xsl:variable name="AssetName"><xsl:value-of select="cname"/></xsl:variable> <AssetID><xsl:value-of select="KIX:AssetGetIDByClassAndName('Quota', $AssetName )"/></AssetID> <ClassID>93</ClassID> <!-- AssetClassID for "Quota" +++ check ID before flight !!! --> <Version> <DeplStateID>16</DeplStateID> <!-- Production --> <InciStateID>1</InciStateID> <!-- Operational --> <Name><xsl:value-of select="$AssetName"/></Name> <Data> <OrgNumber><xsl:value-of select="cno"/></OrgNumber> <Quota><xsl:value-of select="quota"/></Quota> </Data> </Version> </root> </xsl:template> </xsl:stylesheet>
Force Array Tags: [leer]
Suppress Empty: Undefined
Debug: no
Aktion: Create or update an asset
Achtung: Struktur beachten! Gehört zu Macro unter Loop
(Konfigurationsparameter der Macro Action s.: Asset erstellen oder aktualisieren
AssetID: ResultAssetID (oder leer)
VersionID: ResultVersionID (oder leer)
Asset JSON Object: ${CurrQuotaAssetData|JSON}
Ergebnis:
Nach einer manuellen oder automatischen Ausführung des Jobs werden Assets angelegt bzw. aktualisiert:
Sie können auch die KIX-eigene Datenbank anbinden. Die dafür erforderlichen Zugangsdaten können - ausgehend vom Docker Host - aus der Backend-Konfiguration ermittelt werden:
# access KIX backend service... user@dockerhost:/opt/kix-on-premise/deploy/linux$ docker exec -it kixpro-backend-1 bash # check currently used database setting in KIX configuration... I have no name!@4be1ec32c580:/opt/kix$ cat /opt/kix/config/01main | grep Database 'DatabaseHost' => 'db', 'Database' => 'kix', 'DatabaseUser' => 'kix', 'DatabasePw' => 'Password', 'Database::Type' => 'postgresql', 'DatabaseDSN' => "DBI:Pg:dbname=<KIX_CONFIG_Database>;host=<KIX_CONFIG_DatabaseHost>;", I have no name!@4be1ec32c580:/opt/kix$ # resulting DSN... DBI:Pg:dbname=kix;host=db;
Achtung
Beachten Sie, dass die Verwendung von KIX-eigenen Strukturen von Updates beeinflusst werden kann.
Sollten eigene DB-Strukturen angelegt werden (z. B. Views), versehen Sie diese konsequent mit einem spezifischem Präfix, z. B. "acme_orderlists".