<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: HowTo implement subversion revision details in your QV app in Archived Groups</title>
    <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492872#M1676</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Great work Frank! Btw, have you read my IDE development environment document?&lt;A href="https://community.qlik.com/docs/DOC-8157"&gt;Qlik IDE Development environment.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt; Magnus&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 31 Aug 2015 12:35:11 GMT</pubDate>
    <dc:creator>Magnus_Berg</dc:creator>
    <dc:date>2015-08-31T12:35:11Z</dc:date>
    <item>
      <title>HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492871#M1675</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;H1&gt;&lt;IMG __jive_macro_name="toc" class="jive_macro jive_macro_toc" src="https://community.qlik.com/7.0.3.5dfcca9/images/tiny_mce3/plugins/jiveemoticons/images/spacer.gif" /&gt;&lt;/H1&gt;&lt;H1&gt;The problem to solve&lt;/H1&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In order to get better information from your customers in case of support it is good to know the exact version of an app, the customer uses, even if you are not the only developer in your company and if there are many apps under development.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This HowTo will show, how to implement subversion revision details &lt;STRONG&gt;of&lt;/STRONG&gt; your app &lt;STRONG&gt;in&lt;/STRONG&gt; your app that you have version controlled. So the customer can tell you, what version it is, our you can see it by yourself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This HowTo is for people that are familiar with the version control system "subversion" and it's client implementation named "TortoiseSVN". But the solution shown here can be adapted to other SVN clients and perhaps other version control systems as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you have a continuous integration system (ok, QV apps do not need to be compiled) or you have installed your version control system on your QV Server it might be possible to adapt this solution for server side use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;First proofread this HowTo and test it before you use it for production.&lt;/STRONG&gt; There is no warranty that it will work as described here. The code this HowTo contains is not bulletproofed and is just for demonstration. So it is simplified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H1&gt;The solution&lt;/H1&gt;&lt;H2&gt;Prerequisites&lt;/H2&gt;&lt;H3&gt;TortoiseSVN&lt;/H3&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you might know, it is possible to implement subversion as an version control system into the QV Client. But as you might also know, this implementation does not support a lot subversion features and commands. So myself and many others decided to use a full subversion client to have all the commands you need.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The client this HowTO uses is TortoiseSVN so it is possible to use client side post-commit hooks and if you installed the svn binaries as well, your system should know the SubWCRev command as well. To check this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Open a command window&lt;/LI&gt;&lt;LI&gt;Execute the SubWCRev command without parameter&lt;/LI&gt;&lt;LI&gt;The command output should displays a full description of what the command is for (see figure 1)&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="97415" alt="a.SubWCRev Command.png" class="jive-image image-1" height="644" src="/legacyfs/online/97415_a.SubWCRev Command.png" style="height: 644px; width: 432.589px;" width="433" /&gt;&lt;/P&gt;&lt;P&gt;Figure 1: Output of SubWCRev command&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I you get something like "Command not found" verify that the command location is in your path. In a standard 64 bit installation the default location is "C:\Program Files\TortoiseSVN\bin\". Be sure to work with the 64 bit command interpreter, if you have 64 bit TortoiseSVN installed and with the 32 bit command interpreter if 32 bit TortoiseSVN.&lt;/P&gt;&lt;H3&gt;&lt;/H3&gt;&lt;H3&gt;Qlik Deployment Framework preparation&lt;/H3&gt;&lt;P&gt;The solution assumes that you have got a 99.Shared Folder and within your other container(s) you should have apps under version control so that folders with "-prj" suffix exists belonging to the apps.&lt;/P&gt;&lt;H4&gt;&lt;/H4&gt;&lt;P&gt;In order to get this feature you first have to create two folders and place three files in there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the .\QDF\99.Shared_Folders\6.Script\ folder create a folder named "3.VersionControl"&lt;/P&gt;&lt;P&gt;Within the subfolder "3.VersionControl" create another folder named "1.Subversion" so you end up with this folder: ".\QDF\99.Shared_Folders\6.Script\3.VersionControl\1.Subversion"&lt;/P&gt;&lt;P&gt;Within this new created folder place the three files contained in the attachment SVNRevision.zip of this HowTo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The files in SVNRevision.zip are:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;SVNRevision: This is the command, we will call in the post-commit client side hook later on. It does some "magic" things and ends up with calling the SubWCRev command with some parameters&lt;/LI&gt;&lt;LI&gt;SVNRevisionDefault.tmpl: This is a qlik view code template that contains all keywords that are documented in subversion documentation and could be substituted by SubWCRev command. I also put it there in case I accidentally destroy the third file...&lt;/LI&gt;&lt;LI&gt;SVNRevision.tmpl: This file contains the qlik view code template with the subversion keywords that should be replaced by the SubWVRev command in my use case. The SVNRevsion command uses this file&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At a final step you have to edit the AppPath in SVNRevision.cmd file to point to the root folder containing your apps under version control. ( You also could edit the value of SVN.RepositoryRootOfProject in SVNRevsion.tmpl so that evaluating SVN.Path in your case will work later on)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That's it. Now you are prepared to implement the solution.&lt;/P&gt;&lt;H2&gt;Implementation&lt;/H2&gt;&lt;H3&gt;Manual execution&lt;/H3&gt;&lt;P&gt;You just have to double click the file SVNRevision.cmd. So what has happened? First of all a SVNRevision.log file is generated. (If you want, you could have a look inside later on).&lt;/P&gt;&lt;P&gt;I will describe more details now and finally you can have a look at figure 2, the big picture.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you take a look into your App folder and navigate to your app, let us name it "SVNTest.qvw" you will see your folder "SVNTest-prj" and an new created file SVNTest.qvw.svn.revision.qvs. If you use TortoiseSVN diff tool or any other diff tool and compare the file SVNRevision.tmpl with the new created file you will see, that each keyword is substituted by an exact value.&lt;/P&gt;&lt;P&gt;It must be clear to everyone that this new file should not be added to version control. You have to add this in your ignore list or you add a general pattern *.svn.revsion.qvs to your ignore list. Read subversion documentation for detailed explanation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Notice that the name of the new created file is created with the name of the QVW file followed by the suffix ".svn.revision.qvs".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To implement information of this file in your app while reloading, you simply have to copy two lines in the comment of the new file and paste it in your LoadScript. Simply copy&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;let SVN.DocumentName=DocumentName();&lt;/P&gt;&lt;P&gt;$(Include=$(QvWorkPath)\$(SVN.DocumentName).svn.revision.qvs);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and paste it into your app. Then simply reload and you have the information in your app.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can see all this in figure 2.&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="97416" alt="b BigPicture.PNG" class="jive-image image-2" src="/legacyfs/online/97416_b BigPicture.PNG" style="height: 481px; width: 620px;" /&gt;&lt;/P&gt;&lt;P&gt;Figure2: Implementation within you app&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On the upper right hand side of this picture you see the file browser showing the SVNTest.qvw, its "-prj" folder for version control and the new created ".qvs"-file.&lt;/P&gt;&lt;P&gt;On the upper left hand side you see the reload code. On the lower left hand side you see the table viewer. The table you see has been created by the included file. On the lower right hand side you see the content of the SVN_Revsion table.&lt;/P&gt;&lt;P&gt;If you want you can display this table in your app.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H3&gt;Customizing for a single app&lt;/H3&gt;&lt;P&gt;If the command SVNRevision.cmd is executed, the template file SVNRevsion.tmpl is used for keyword substitution so that you have a standard generation of the ...svn.revision.qvs files.&lt;/P&gt;&lt;P&gt;If for some reason you want a special template for one of you apps, you can place a template file beside the QVW file named "&amp;lt;QVW-Filename&amp;gt;.svn.revision.tmpl". So in my example I just copied the file SVNRevisionDefault.tmpl beside SVNTest.qvw, named it SVNTest.qvw.svn.revision.tmpl and did the SVNRevsion.cmd command again (see figure 3).&lt;/P&gt;&lt;P&gt;It's a good practice to add this special template to version control.&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="97418" alt="c BigPicture Custom.PNG" class="jive-image image-3" height="649" src="/legacyfs/online/97418_c BigPicture Custom.PNG" style="height: 649px; width: 481.316px;" width="481" /&gt;&lt;/P&gt;&lt;P&gt;Figure 3: Customizing the generation for a single app&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After reloading I found all keywords that are documented in the subversion documentation as variables in the app (figure 4).&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="97419" alt="d VariableOverview.PNG" class="image-4 jive-image" height="352" src="/legacyfs/online/97419_d VariableOverview.PNG" style="height: 352px; width: 461.812px;" width="462" /&gt;&lt;/P&gt;&lt;P&gt;Figure 4: Revision details as SVN variables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H2&gt;Implement as a post-commit hook&lt;/H2&gt;&lt;P&gt;So as I told at the beginning, we will implement this feature as a post-commit hook so that the included qvs-files reflect the actual version information. So to do this (in TortoiseSVN) you just have to configure the hook.&lt;/P&gt;&lt;P&gt;In my case I decided to use relative path based on the repository root. So I first added and committed the SVNRevsion.cmd and template file SVNRevsion.tmpl to the version control system.&lt;/P&gt;&lt;P&gt;Then on the Application Root folder ( You have set the path in the SVNRevsion.cmd file before) I added the hook as you could see in figure 5 as a property on the Application Root folder ( not recursively!).&lt;/P&gt;&lt;P&gt;&lt;IMG __jive_id="97420" alt="e TSVN Project Property Local Hook 2.png" class="image-5 jive-image" src="/legacyfs/online/97420_e TSVN Project Property Local Hook 2.png" style="height: 295px; width: 620px;" /&gt;&lt;/P&gt;&lt;P&gt;Figure 5: Settings of the post-commit client side hook&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So if you do changes to your app now and commit the "-prj" folder, this hook is fired and the SVNRevision Command is executed. The "...svn.revsion.qvs" files get updated and after reload of the app you have "up to date" revision information in you app.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you what to move your app and deploy it, you have to move/copy the qvs file as well. Don't forget this as a final step.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;H1&gt;Conclusion&lt;/H1&gt;&lt;P&gt;With the solution shown here you have a easy and configurable way of implementing detailed revision information in your app. You can define default code for your include files using the SVNRevsion.tmpl or even define special code for special apps using a template for this app.&lt;/P&gt;&lt;P&gt;You can implement this as a command that you simply execute manually or implement it as a client side hook. It should also be possible to implement it in a continuous integration server like cruisecontrol, if subversion is installed on that server as well.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Jul 2025 17:59:49 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492871#M1675</guid>
      <dc:creator />
      <dc:date>2025-07-22T17:59:49Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492872#M1676</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Great work Frank! Btw, have you read my IDE development environment document?&lt;A href="https://community.qlik.com/docs/DOC-8157"&gt;Qlik IDE Development environment.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt; Magnus&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 31 Aug 2015 12:35:11 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492872#M1676</guid>
      <dc:creator>Magnus_Berg</dc:creator>
      <dc:date>2015-08-31T12:35:11Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492873#M1677</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo Magnus,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thx for your positive reply. I hope my English in that document is not so bad.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your document I have not known until now and have just scanned&amp;nbsp; it. Great work as well. The editor Sublime is new to me but as you would guess, Tortoise and VisualSVNServer are tools I use as well. As an editor I use Notepad++ because&amp;nbsp; we have to use that one in our team. There is a language definition for QlikView Scripts by&amp;nbsp; &lt;A href="https://community.qlik.com/qlik-users/142896"&gt;João Dias de Carvalho Neto&lt;/A&gt; and you have a project plug in as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you know &lt;A href="http://blogg.sigma.se/en/The-Business-Intelligence-blog/Jonas-Wiklander/Dates/2014/3/Qlikview-and-version-control-part-1/"&gt;Jonas Wiklander's blog about version control&lt;/A&gt;? It has 5 parts. Part 1 shows a solution for creating the prj folder (You should thing about implementing his script in QDF). This script does not only create a prj folder, it creates the files in it by simply open and store the document automatic.&lt;/P&gt;&lt;P&gt;He also describes very good, in which case version control does not work or has a crazy behaviour.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Summing it all up one can say, that many solutions in this community have to do with a lag of&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;a good version control integration&lt;/LI&gt;&lt;LI&gt;a good editor with autocompletion, replacement with regular expression feature and so on as modern IDEs have&lt;/LI&gt;&lt;LI&gt;project management integration&lt;/LI&gt;&lt;LI&gt;full integration of all code into version control&lt;/LI&gt;&lt;LI&gt;dependency view of included files&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;within QV client. So my wish to future versions of QV is to fill this lags with a good solution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Frank&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 31 Aug 2015 13:27:38 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492873#M1677</guid>
      <dc:creator />
      <dc:date>2015-08-31T13:27:38Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492874#M1678</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;@ Frank: Had some wish as Frank in 2008.... developed in 2009 QQversioner for that... (with DIFF results available directly in Qlik dynamic associative interface ...),&amp;nbsp; but got tired after a while... &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@ Magnus: As you can see, Notepad++ is perhaps even more popular than Sublime in Qlik community.... Since it also has Qlik language definitions, I would like to ask you if the Qlik IDE environment you have created has major benefits from Sublime that Notepad++ cannot cover ? Do you recommend the switch from N++ to sublime ?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 31 Aug 2015 16:34:17 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492874#M1678</guid>
      <dc:creator>cotiso_hanganu</dc:creator>
      <dc:date>2015-08-31T16:34:17Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492875#M1679</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Forgot the essential, to thank you both for your work !&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 31 Aug 2015 16:49:18 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492875#M1679</guid>
      <dc:creator>cotiso_hanganu</dc:creator>
      <dc:date>2015-08-31T16:49:18Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492876#M1680</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hallo Cotiso,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thx for your input. So I am a bit confused about so many Frank's. Do you know the film "Calamari Union" by Aki Kaurismäki? There are so many Frank's. I love that film &lt;IMG src="https://community.qlik.com/legacyfs/online/emoticons/laugh.png" /&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I searched for QQversioner. I was not able to get it to have a look.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 01 Sep 2015 06:18:52 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492876#M1680</guid>
      <dc:creator />
      <dc:date>2015-09-01T06:18:52Z</dc:date>
    </item>
    <item>
      <title>Re: HowTo implement subversion revision details in your QV app</title>
      <link>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492877#M1681</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You couldn't, because we've discontinued it for some years... Just wanted to underline that I understand and agree with your wish... &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Sep 2015 17:52:59 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Archived-Groups/HowTo-implement-subversion-revision-details-in-your-QV-app/m-p/1492877#M1681</guid>
      <dc:creator>cotiso_hanganu</dc:creator>
      <dc:date>2015-09-02T17:52:59Z</dc:date>
    </item>
  </channel>
</rss>

