Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
cbushey1
Creator III
Creator III

How to "license" parts of an application

Hey all,

I am looking to integrate two applications into a single QVW but I want to control them based on what a client would have licensed.

For example, let's say that each application has 20 tabs. I want the ability to say if the client has only licensed application 1 show the first 20 tabs, if they licensed application 2 only show the last 20 tabs, and if they licensed both show all 40 tabs.

I know I can control that with a variable set in a configuration file but let me complicate things more.

Each application has a series of QVS files that run to create the QVDs and then another set that run to create the data model. I would like to apply the same logic here as well so that I can control what scripts are being run based on what they have "licensed" from me.

I guess in general I am looking for best practices from others who have designed applications and licensed them out to their clients. What is the best practice here?

Thoughts?

Tips?

Thanks.

1 Solution

Accepted Solutions
rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

I've seen this done before and it's not heavy at all, assuming that each customer has similar data structure. There is a "common" folder and a folder for each customer.  At the start of each batch update, copy the template into the customer directory.  Each customer directory has a permanent "config.txt" file that sets the license variables and the connection string. So the template script looks something like this:

$(include=config.txt);  // This customer configuration

IF vLicenseProdA = 'Y' THEN

$(include=..\common\proda.qvs)

ENDIF

IF vLicenseProdB = 'Y' THEN

$(include=..\common\prodb.qvs)

ENDIF

and so on...

-Rob

http://masterssummit.com

http://qlikviewcookbook.com

View solution in original post

14 Replies
Digvijay_Singh

Not sure but you may think if Section Access can help here. Use OMIT system field to remove access of columns based on Users group.

Also I saw this detailed post o sheet level security access but haven't used it yet.

Sheet or App Object Level Security Qlik Sense

Peter_Cammaert
Partner - Champion III
Partner - Champion III

Wow, you got some challenges on you plate.

Before discussing any practical implementations, one question:

how do you plan to restrict script execution to a licensed code set if it's sufficiently circumvented by copying the unlicensed code in the licensed script file at the end? Or aren't you planning to ship a self-contained application to your customers, just planning to provide access to it (e.g. in an AP in the cloud)

cbushey1
Creator III
Creator III
Author

Thanks for the quick response.

I plan to deliver an app through a hosted accesspoint. The users will only see the final qvw and will not be able to access the code in anyway.

cbushey1
Creator III
Creator III
Author

SA wont help me here as I dont want to limit on fields but more tables.

Think of it like partitioning out the data model so that if a client licenses the full suite they get the full data model but if they only license certain parts the data model is only for those parts.

Peter_Cammaert
Partner - Champion III
Partner - Champion III

OK.

  • Either you load (really) everything in your document and let Data Reduction filter out what a particular user shouldn't be able to view. This affects all data, sheets and objects (the latter two by disabling them),
  • Or you create three different documents from the same base (requires a Publisher) and grant access to the correct one depending on what license a particular user has paid for.

The latter is way simpler to maintain and use.

Regular QlikView security will help in making sure that a user cannot circumvent or accidentally enable unlicensed stuff.

Peter

[Edit] spelling mistakes

cbushey1
Creator III
Creator III
Author

Interesting.

Well I dont have publisher so that option is out but I am not sure it would have helped in the way I would like. You see we take one client's data and run it through the application. If they have licensed both parts then they would get the full application however if they only licensed one part then I need to create the data model and visual layers that are only relevant to that one part. Since my application contains client data, each client gets their own installation of the app. I am trying to find a way to integrate essentially a 2nd stand alone application into their existing application. It should work fine, I just need to find a way to control when to build what tables based on what app they have purchased.

Peter_Cammaert
Partner - Champion III
Partner - Champion III

There are a number of supporting features in QlikView that make life a lot easier when dealing with such a situation. It's a pity that you either don't want to use them or you're not considering an extension to your current QlikView setup. They would take a lot of work off your hands.

Anyway, you plan to create a new document copy for every other customer? QlikView cannot do that by itself, so you need to devise a strategy to do some meta-programming to correctly configure a document for a new customer. The document itself will then do as told when performing a reload and refresh the data for this customer only, skip all tables that are unlicensed and use a pre-configured template document for display purposes that doesn't have any unlicensed objects (one of three versions). Is that what you want?

cbushey1
Creator III
Creator III
Author

I am interested to learn about these supporting features as if I can prove a use case we can probably add them to our setup. I was simply saying that we dont currently have publisher so I need to find a solution that works without it.

The reason we have separate documents for each user is that their data needs to be saved in separate databases. I have to contend with privacy laws etc. So we store each client's data in separate databases and then we have what you could call a template app that is setup for the client. We handle where to get the data from by using database strings etc. So really each client has the same version of the application, we just cant put all client's data together into a single application. When an application is reloaded, it only pulls that clients data from and only from their database.

So what I have done is created a second application that will use the same client's data and perform a totally different analysis, although some tables would be shared across the two data models (which is why it will integrate well).

So now I want to put these two applications together and offer it to clients as additional analysis that they can then license. Each application has a set of script files (qvs) that run in tiers 1 and 2 of our 3 tiered setup (QVD generator, Date model, visual layer). I am trying to control running all scripts if the client has only licensed 1 of the 2 applications. No need to perform all the extra analysis if they haven't licensed it.

rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

You can use variables for each client to control IF THEN blocks in the script ton conditionaly execute blocks of script. It's pretty straightforward.  You can use those same variables to control visibility of licensed sheets.

-Rob