BigBear.ai
  • Home
  • Industries
    • Government
    • Manufacturing
    • Healthcare
  • Solutions
    • Data Analytics
    • Modeling Solutions
    • Enterprise Planning and Logistics
    • Professional Services
  • Company
    • About
    • Investor Relations
    • Partners
    • Team
    • Newsroom
  • Careers
    • Explore Jobs
  • Resources
    • Resource Library
    • Blog
  • Contact
Search
Home Blog Moving app GUIDs across Qlik Environments
Blog

Moving app GUIDs across Qlik Environments

Paul Pirolli
June 4, 2020
  • Share
  • Share

App GUIDs in Qlik Sense are unique for each environment. Different environment, different GUID. Different URL for the app. That is life in Qlik Sense. This setup, while frustrating for developers, generally is a non-issue that we accept and accommodate in our design. However, this limitation can become challenging or even an obstacle in several instances:

  1. There is a custom app navigation bar (bypassing the Qlik Sense Hub & App Overview)
  2. URL links in a chart/object in one app to navigate a sheet in a different app
  3. ETL processes that may be centralized/optimized by having a model app & binary load into one or several Qlik Sense apps (this is a pain-point for those of us who are accustomed to QlikView development)
  4. Testers/Quality control department pushes back against the URL differences beyond the domain changing from Dev / Test / Prod environments
  5. The developer in charge of the Qlik environments (or deployment) is OCD & cannot stand having differences on the Qlik front end

The first two use cases can be bypassed without issue with conscientious design (that is why we are paid, after all). Writing a customized extension & referencing the Qlik API to populate the custom sidebar is a solution, and setting the app ID as a variable using Peek() and the app list from the Qlik Postgres database can solve the second. However, the third case (binary load) is where those innovations come to a complete stop.

Binary [Lib://AppRepository/cc750977-e01c-4c4a-8112-b3ce98b420db];

What makes this case different? It has to do with the Binary command in Qlik and the restrictions around using it. The binary load must be the first executed command in the Load Script. I am not sure what the reason for that is; my theory is that the binary load executes a Copy command and replaces sections of the app running the script, and so to avoid catastrophe Qlik added restrictions around the command. The Binary load was much more useful in QlikView since a failed load in the front-end app would drop triggers and generally wreak havoc on the developed app (I do not recall what else, but there were several items and could set a developer back several hours of work). I have found binary loads useful in Qlik Sense when sharing data models between apps or needing to refresh apps with hourly data but also refreshing the historic data nightly (which could take 45+ minutes to load). Qlik Sense does not support an easy method to execute a partial reload in the QMC, and the binary load method helps keep the task management in the Qlik QMC. Binaries can also be made to QlikView models, so do not break up / duplicate the data pipeline if there is a dual environment in production.

But how is a binary load referenced? The name of apps in Qlik Sense are stored as GUIDs, so the binary must reference the GUID of the target app. Since it must be the first executed command in the load script, there is no opportunity to set a variable to the GUID of the app. There are two solutions: either change the GUID in the binary load command of the load script when moving it to the test/production environment (automation of this process would be preferred) or move apps into the new environment and assign the GUID from the previous environment as the GUID in the new one.

Another reason to move the GUID (and one most of us find ourselves in) is that there is a requirement of having the production environment match the development environment as much as possible. URL in production matching the URL in development with an exception for the domain can be a sticking point in your SDLC.

OK, let’s say one or two of those points above convinced me. Now how can I migrate the GUIDs in Qlik Sense?

I was convinced they could be because that is the whole reason the GUID was invented in the first place: to make DB mergers possible without key collision. If you have poked around enough on the Qlik Sense server, the first spot that comes to mind is the PostGres database that Qlik uses to save all of its information about various apps. After reading dozens of blogs & Qlik Help files that cautioned emphatically against tampering with the database as it is always unsupported & could hopelessly corrupt it, I moved away from pgAdmin & started studying the APIs which is the supported endpoint for manipulating the database. After many fruitless internet searches, I reached out to some very helpful Qlik representatives (Thank you, Dustin Baxa). After several iterations of troubleshooting where apps would not upload, or they would upload, but without a Script object, the import worked with the assigned GUID (see code below).

The solution uses Powershell Qlik CLI to make the API calls (note: Qlik does not support the Powershell Qlik CLI, but the API calls it uses are supported). Some of the API endpoints used can only be hit if the script is run on the central node of your Qlik cluster. I hope this helps if you find the need to change the GUIDs in your environments.

BigBear.ai
  • Home
  • Industries
  • Solutions
  • Company
  • Careers
  • Resources
  • News & Insights
  • Blog
  • Investor Relations
  • Contact
  • Twitter
  • Facebook
  • Linkedin
  • Privacy Policy
  • Terms of Use
  • Accessibility
  • Site Map
© BigBear.ai 2022
We value your privacy
We use cookies to enhance your browsing experience, serve personalized ads or content, and analyze our traffic. Click “Accept All”, to consent to the use of ALL the cookies or you may visit "Cookie Settings" to provide a controlled consent. Privacy Policy
Cookie SettingsAccept All
Manage Consent

Cookies Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
CookieDurationDescription
cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
JSESSIONIDsessionThe JSESSIONID cookie is used by New Relic to store a session identifier so that New Relic can monitor session counts for an application.
viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
CookieDurationDescription
__atuvc1 year 1 monthAddThis sets this cookie to ensure that the updated count is seen when one shares a page and returns to it, before the share count cache is updated.
__atuvs30 minutesAddThis sets this cookie to ensure that the updated count is seen when one shares a page and returns to it, before the share count cache is updated.
Analytics
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
CookieDurationDescription
_ga2 yearsThe _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
_ga_NK4L4Q320Q2 yearsThis cookie is installed by Google Analytics.
_gat_gtag_UA_163894009_21 minuteSet by Google to distinguish users.
_gid1 dayInstalled by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
at-randneverAddThis sets this cookie to track page visits, sources of traffic and share counts.
CONSENT2 yearsYouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
uvc1 year 1 monthSet by addthis.com to determine the usage of addthis.com service.
Advertisement
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
CookieDurationDescription
f5avraaaaaaaaaaaaaaaa_session_sessionbusinesswire.com cookie
loc1 year 1 monthAddThis sets this geolocation cookie to help understand the location of users who share the information.
VISITOR_INFO1_LIVE5 months 27 daysA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
YSCsessionYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
yt-remote-connected-devicesneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
yt-remote-device-idneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
SAVE & ACCEPT
Powered by CookieYes Logo