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?
Solved! Go to Solution.
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
IF vLicenseProdB = 'Y' THEN
and so on...
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.
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)
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.
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.
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.
[Edit] spelling mistakes
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.
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?
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.
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.