In QlikView war es einfach zu ermitteln auf welchem Environment die App ist, dafür war der Pfad der QVW Datei ausgelesen worden und an hand des Pfades kann dann das Environment ermittelt werden. Das geht in Qlik Sense nicht mehr.
Multi Server Environment
In Qlik Sense können wir das Environment nur bestimmen, wenn wir verschiedene Sites (Server, Nodes) haben für Dev / Test / Prod. Dann kann der Servername für das Ermitteln des Environments verwendet werden (Vorsicht bei einer Multi-Node-Site)
=Computername()
Mit dem Servernamen kann bestimmt werden auf welcher Site (Server, Node) die App neu geladen wird. So kann das Environment bestimmt werden. Hier hilft auch wieder das die IT die Server gleich benennt. In einem Multi-Node Environment müssen alle Servernamen der Site die einen Reload machen können geprüft werden.
Singel Server Environment
Falls aber nur ein Environment (Server, Node, Site) betrieben wird, ist das schwerer. Dann kann nicht der Servername verwendet werden. Dann müssen wir etwas mehr triksen. Am einfachsten geht es, wenn wir die Metadaten der App auslesen über die von Qlik Sense bereitgestellten «REST-Schnittstelle». In den Metadaten steht drin in welchem Stream die App ist. Anhand des Stream-Namens kann ermittelt werden in welchem Environment die App aktuell ist und die dem entsprechenden Daten geladen werden.
Damit das klappt, müssen die Daten pro Environment einzeln gespeichert werden. Das wäre auch gut damit in der DEV und TEST Umgebung andere Daten geladen werden können als Produktion.
Falls kein Stream für Test und Produktion erstellt wurde, kann eventuell auch mit einem Tag oder Custom-Property gesteuert werden. Am Besten einfach ein Wert der via REST-Api gelesen werden kann.
Hier noch ein Code Beispiel für das Ermitteln der Daten via REST-API.
Let vL.AppId = DocumentName();
Trace $(vL.AppId);
LIB CONNECT TO 'monitor_apps_REST_app';
RestConnectorMasterTable:
SQL SELECT
"id" AS "id_u1",
"createdDate",
"modifiedDate",
"modifiedByUserName",
"name" AS "name_u1",
"appId",
"sourceAppId",
"targetAppId",
"publishTime",
"published",
"description",
"stream",
"fileSize",
"lastReloadTime",
"thumbnail",
"savedInProductVersion",
"migrationHash",
"dynamicColor",
"availabilityStatus",
"privileges" AS "privileges_u1",
"schemaPath",
"__KEY_root",
(SELECT
"@Value",
"__FK_customProperties"
FROM "customProperties" FK "__FK_customProperties" ArrayValueAlias "@Value"),
(SELECT
"id",
"userId",
"userDirectory",
"userDirectoryConnectorName",
"name",
"privileges",
"__FK_owner"
FROM "owner" FK "__FK_owner"),
(SELECT
"@Value" AS "@Value_u0",
"__FK_tags"
FROM "tags" FK "__FK_tags" ArrayValueAlias "@Value_u0"),
(SELECT
"id" AS "id_u0",
"name" AS "name_u0",
"privileges" AS "privileges_u0",
"__FK_stream"
FROM "stream" FK "__FK_stream")
FROM JSON (wrap on) "root" PK "__KEY_root"
;
/*
[customProperties]:
LOAD [@Value],
[__FK_customProperties] AS [__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_customProperties]);
[owner]:
LOAD [id],
[userId],
[userDirectory],
[userDirectoryConnectorName],
[name],
[privileges],
[__FK_owner] AS [__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_owner]);
[tags]:
LOAD [@Value_u0] AS [@Value_u0],
[__FK_tags] AS [__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_tags]);
[stream]:
LOAD [id_u0] AS [id_u0],
[name_u0] AS [name_u0],
[privileges_u0] AS [privileges_u0],
[__FK_stream] AS [__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_stream]);
*/
[root]:
LOAD [id_u1] AS [id_u1],
[createdDate],
[modifiedDate],
[modifiedByUserName],
[name_u1] AS [name_u1],
[appId],
[sourceAppId],
[targetAppId],
[publishTime],
[published],
[description],
[stream],
[fileSize],
[lastReloadTime],
[thumbnail],
[savedInProductVersion],
[migrationHash],
[dynamicColor],
[availabilityStatus],
[privileges_u1] AS [privileges_u1],
[schemaPath],
[__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__KEY_root])
and [id_u1] = '$(vL.AppId)';
DROP TABLE RestConnectorMasterTable;