{"id":116,"date":"2018-01-08T19:12:03","date_gmt":"2018-01-08T19:12:03","guid":{"rendered":"http:\/\/qlikwithfriends.com.temp.realssl.com\/?p=116"},"modified":"2018-11-27T22:56:58","modified_gmt":"2018-11-27T22:56:58","slug":"configuring-your-apps-across-environments-and-servers-with-a-keywords-file","status":"publish","type":"post","link":"https:\/\/qlikwithfriends.com\/index.php\/2018\/01\/08\/configuring-your-apps-across-environments-and-servers-with-a-keywords-file\/","title":{"rendered":"Configuring Your Apps Across Environments and Servers With a Keywords File"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"116\" class=\"elementor elementor-116 elementor-bc-flex-widget\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7493304 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7493304\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2e9e708\" data-id=\"2e9e708\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1951c6b elementor-widget elementor-widget-text-editor\" data-id=\"1951c6b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">In this post, I\u2019ll share a technique that I\u2019ve used for many years in my QlikView scripts and recently revised for use in Qlik Sense.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Most larger Qlik Sense development environments and many smaller ones follow a process before an App gets into a public (or production) stream. Usually, the app is developed and tested in a work stream, then published to a test stream, and finally, a public stream. All this activity might occur on the same server or it might span several servers. Even if this doesn\u2019t describe your Qlik environment, there are probably apps on your server that exist in several stream or as copies.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">If any of the above describes your Qlik Sense environment then you probably have to deal with different versions of data connections, configuration values, and other items that might change from environment to environment. If you use any third-party extensions that link apps to other apps or sheets within those apps then you have the added problem of keeping track of all the different app and sheet IDs.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">What\u2019s the best way to manage this? Qlik provides a good solution to one facet of this by providing externally defined Data Connections, but how can you keep track of, and properly define all of the other information. One simple way that I\u2019ve seen it done is to simply code it into the script and then edit that information in the script from stream-to-stream or environment-to-environment. That works, but it\u2019s really not a best practive. Another technique that I\u2019ve used in both QlikView and Qlik Sense Apps is to use an external configuration file that can be modified for each app instance. If you\u2019re an application developer who has coded in any major development language then you\u2019re probably very familiar with this concept.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Here\u2019s an example of the configuration approach that I\u2019ve used with Qlik Sense. It has four major pieces; a content folder to hold the configuration files; a configuration file\u2014I use an Excel file; a simple script; and a process for associating the configuration with a specific instance of the app.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><u><span style=\"font-family: Calibri, sans-serif;\">The Content Folder<\/span><\/u><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Create a Content Folder where you\u2019ll store configuration files. In the example script that follows, I\u2019ve called mine \u201cConfiguration Files\u201d.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><u><span style=\"font-family: Calibri, sans-serif;\">The Configuration File<\/span><\/u><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Each app that requires a configuration will have its own file. This is where you specify the specific items and their values, that need to change for each version of the app. Name this file with the ID of the specific App to which it applies\u2014you can look that up in the QMC. For example \u201cd5a57d9b-71e2-46c7-3b2a-f8bc82a12f27.xlsx\u201d. Upload the file to the Content Folder.<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">\u00a0<\/span><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">My spreadsheet usually has two columns; a Keyword and a Value. I renamed the tab name in my example to \u201cKeywords\u201d. For example:<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4a2f8ba elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4a2f8ba\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fc55414\" data-id=\"fc55414\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-64bd423 elementor-widget elementor-widget-image\" data-id=\"64bd423\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"408\" height=\"162\" src=\"https:\/\/qlikwithfriends.com\/wp-content\/uploads\/2018\/11\/Keywords-Sample-file.png\" class=\"attachment-large size-large wp-image-117\" alt=\"\" srcset=\"https:\/\/qlikwithfriends.com\/wp-content\/uploads\/2018\/11\/Keywords-Sample-file.png 408w, https:\/\/qlikwithfriends.com\/wp-content\/uploads\/2018\/11\/Keywords-Sample-file-300x119.png 300w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">File: d5a57d9b-71e2-46c7-3b2a-f8bc82a12f27.xlsx<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a5f03b7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a5f03b7\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f4b0f78\" data-id=\"f4b0f78\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5472f66 elementor-widget elementor-widget-text-editor\" data-id=\"5472f66\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-family: 'Times New Roman', serif; font-size: medium; font-style: normal; font-variant-caps: normal; text-indent: 0px; caret-color: #000000; color: #000000;\"><u><span style=\"font-family: Calibri, sans-serif;\">Keywords Script<\/span><\/u><\/p><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-family: 'Times New Roman', serif; font-size: medium; font-style: normal; font-variant-caps: normal; text-indent: 0px; caret-color: #000000; color: #000000;\"><span style=\"font-family: Calibri, sans-serif;\">The script segment below processes the configuration file and its contents. You would place this early in your script, before the point where you need to use the values that it retrieves.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-aa088fa elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"aa088fa\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-974db10\" data-id=\"974db10\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c67b52e elementor-widget elementor-widget-text-editor\" data-id=\"c67b52e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\/\/ Get the ID of the app that\u2019s executing this script.<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">Let AppID = DocumentName();\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica; min-height: 14px;\">\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\/\/ Make the file name of the configuration file for this App<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">Let KeywordFileName = &#8216;lib:\/\/Configuration Files\/&#8217; &amp; &#8216;$(vX.App.ID)&#8217; &amp; &#8216;.xlsx&#8217;;<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica; min-height: 14px;\">\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">If FileSize(&#8216;$(KeywordFileName)&#8217;) &gt; 0 then \u00a0 \/\/ Process the file only if it exists<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica; min-height: 14px;\">\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 Keywords:<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 Load<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 \u00a0 \u00a0 Keyword,<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 \u00a0 \u00a0 Value<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 From [$(KeywordFileName)]<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 (ooxml, embedded labels, table is Keywords);<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica; min-height: 14px;\">\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 For i = 0 to (NoOfRows(&#8216; KeywordFileName &#8216;) &#8211; 1)<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Let KeywordName = Peek(&#8216;Keyword&#8217;, i, &#8216;Keywords&#8217;);<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Let $(KeywordName) = Peek(&#8216;Value&#8217;, i, &#8216;Keywords&#8217;);<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 Next i<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica; min-height: 14px;\">\u00a0<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\">\u00a0 \u00a0 Drop Table Keywords;<\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\"><span style=\"font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; text-align: inherit; text-indent: 0em;\">\u00a0<\/span><\/p><p style=\"margin-bottom: 0px; font-style: normal; font-variant-caps: normal; font-stretch: normal; font-size: 12px; line-height: normal; font-family: Helvetica;\"><span style=\"font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; text-align: inherit; text-indent: 0em;\">End If;<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-feeb4bc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"feeb4bc\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-562c8f2\" data-id=\"562c8f2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8a3053f elementor-widget elementor-widget-text-editor\" data-id=\"8a3053f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"caret-color: #000000; color: #000000; font-size: 12pt; font-style: normal; font-variant-caps: normal; font-family: Calibri, sans-serif;\">After this script runs, I\u2019ll have actual variables in my App that were initialized from the spreadsheet with their respective values, equivalent to the script statements below.<\/span><\/p><p>1. Let myConnectionName = \u2018Sales Database\u2019;<br \/>2. Let\u00a0myEnvironment = \u2018TEST\u2019;<br \/>3. Let\u00a0mySomeOtherAppID = \u2018e3a13f5c-82d5-47a7-9a2c-b1ce34c82f32\u2019;<\/p><p><span style=\"caret-color: #000000; color: #000000; font-size: 12pt; font-style: normal; font-variant-caps: normal; font-family: Calibri, sans-serif;\">I might use #1 in a connection statement. For example:<\/span><\/p><p><span style=\"font-family: Roboto, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal;\">LIB CONNECT TO &#8216;$(myConnectionName)&#8217;;<\/span><span style=\"caret-color: #000000; color: #000000; font-size: 12pt; font-style: normal; font-variant-caps: normal; font-family: Calibri, sans-serif;\"><br \/><\/span><\/p><p style=\"font-family: Roboto, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif; font-size: 12pt; font-style: normal; font-variant-caps: normal; caret-color: #000000; color: #000000;\">I can use #2 to condition some of my script logic. For example:<\/span><\/p><p><span style=\"text-align: inherit;\">If &#8216;$(myEnvironment) = &#8216;TEST&#8217; then<\/span><\/p><p><span style=\"text-align: inherit;\">\u00a0 \u00a0 \u00a0 &#8230; do some logic<\/span><\/p><p><span style=\"text-align: inherit;\">Else<\/span><\/p><p><span style=\"text-align: inherit;\">\u00a0 \u00a0 \u00a0&#8230; do some other logic<\/span><\/p><p><span style=\"text-align: inherit;\">End If<\/span><\/p><p style=\"font-family: Roboto, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif; font-size: 12pt; font-style: normal; font-variant-caps: normal; caret-color: #000000; color: #000000;\">#3 could be used as a value in one of my visualization extensions that link to another App.<\/span><\/p><p style=\"font-family: Roboto, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif; font-size: 12pt; font-style: normal; font-variant-caps: normal; caret-color: #000000; color: #000000;\">\u00a0<\/span><u style=\"caret-color: #000000; color: #000000; font-family: 'Times New Roman', serif; font-style: normal; font-variant-caps: normal; text-align: inherit;\"><span style=\"font-family: Calibri, sans-serif;\">In Summary<\/span><\/u><\/p><ul><li class=\"MsoListParagraphCxSpFirst\" style=\"font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Create a content folder to store the Configuration files.<\/span><\/li><li class=\"MsoListParagraphCxSpMiddle\" style=\"font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Name each configuration file as the {ID}.xlsx and store it in the content folder.<\/span><\/li><li class=\"MsoListParagraphCxSpMiddle\" style=\"font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Use the script provided to read the configuration file into your app. You can keep the script in another content folder and \u201cInclude\u201d it so that you don\u2019t have to pate it into every script.<\/span><\/li><li class=\"MsoListParagraphCxSpLast\" style=\"font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">Reference the variables that got created wherever you need them in your App.<\/span><\/li><\/ul><p class=\"MsoNormal\" style=\"margin: 0in 0in 0.0001pt; font-size: medium; font-family: 'Times New Roman', serif; caret-color: #000000; color: #000000; font-style: normal; font-variant-caps: normal; text-indent: 0px;\"><span style=\"font-family: Calibri, sans-serif;\">This is a flexible way to standardize variables from environment to environment, or server to server, and not have to modify your App script.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>In this post, I\u2019ll share a technique that I\u2019ve used for many years in my QlikView scripts and recently revised for use in Qlik Sense. Most larger Qlik Sense development environments and many smaller ones follow a process before an App gets into a public (or production) stream. Usually, the &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[6,9],"tags":[],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-qliksense","category-scripting"],"_links":{"self":[{"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":3,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qlikwithfriends.com\/index.php\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}