30 Replies Latest reply: Dec 2, 2011 8:42 AM by Arthur Lee RSS

Power Tools for QlikView

Stefan Bäckstrand

Dear Community members!

 

On Monday, November 7th, the Power Tools for QlikView is released to the general public!

 

This is the main thread to discuss the Power Tools, share ideas and report bugs. It will work as an interim solution until we get the Power Tools section up and running.

 

We will update this thread with all necessary information as soon as the package is released, so stay tuned!

 

 

 

Best regards,


The Power (Tools) team

  • Re: Power Tools for QlikView
    Stefan Bäckstrand

    Today, the Power Tools for QlikView is released to the general public!

     

    What are the Power Tools for QlikView?

     

    • The Power Tools for QlikView is a package of small utilities designed to help use, troubleshoot, or extend QlikView functionality
    • Documentation of the tools are confined in the tools themselves or in readme’s supplied with them
    • For bug reports, suggestions and collaboration; comment in this thread! (http://community.qlik.com/thread/38461). More tools will come – and we are looking for input – help collaborate in the QlikCommunity thread!
    • Have a look in the Readme file provided here: Power Tools1.0 Readme
    • Power Tools for QlikView are not supported, and QlikTech gives no warranties on the usage of the tools. QlikView Support will not answer support issues for the Power Tools.
    • Power Tools version is currently 1.0. The different tools have their own version numbers. Tools version list:
      • QlikView Server Agent – 1.1
      • QMS API Client – 1.0
      • QvsDetector – 0.9
      • Qv User Manager – 1.0
      • Reload Schedule Migration – 1.0.4321
      • Server Object Handler – 1.0
      • Server Object Handler Batch – 1.0
      • Shared File Viewer – 0.7
      • XMLDbViewer – 1.0.4321

     

    You can download the Power Tools from here: Power Tools 1.0

    • Re: Power Tools for QlikView
      Daniel Rozental

      Excellent, sounds really interesting.

       

      Thanks Stefan!

    • Re: Power Tools for QlikView
      rva

      interesting.

      are there any plans to publish the source code, so one can enhance the tools? I mean I can look at the code with Reflector.NET/ILSpy anyway, so why hiding?

      • Power Tools for QlikView
        Stefan Walther

        I absolutely agree!

         

        I'd prefer if these tools would be based on some general APIs which are open and documented.

        This would it make easier to

         

        • understand what's going on in these tools and
        • expand these tools

         

         

        So the community of all QlikView developers would be able to give more feedback on required enhancements and further power tools ...

         

        What do you think?

         

        Regards
        Stefan

        • Re: Power Tools for QlikView
          Stefan Bäckstrand

          Stefan: As I said, it is something that will need to be discussed. Making all tools open source requires that we have ways to handle and nurture the feedback from the field, like deciding how we handle contributions to the source, as well.

           

           

          Stefan Bäckstrand

          Senior Technical Expert, PM

          Email: Support@qlik.com<mailto:Support@qlik.com>

           

          qlik.com<http://www.qlik.com/>

           

          The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.

    • Power Tools for QlikView
      Brent Nichol

      The meta and shared files were always impossible for me to understand, so the SharedFileViewer will be very useful.

       

      I was dissappointed that it didn't have the ability to extract a high level object list, but the ServerObjectHandler will help there.

       

      Lastly, the XMLDBViewer helped me simplify the creation of a task list spreadsheet.

       

      Thanks for the tools,

      B

  • Re: Power Tools for QlikView
    David VASSEUR

    Very interesting !

     

    Source code would indeed be great!

  • Power Tools for QlikView
    David VASSEUR

    Some feedback for the Shared File Viewer and Server Object Handler tool:

    • Use .NET framework 3.5 instead of 4.0 please (winXP and Win2003 users)
    • I do agree with bnichol, having some key fields (name, title...) would be great, and even better, the ability to define which field would be displayed on a specific column
    • Ability to filter objects per Owner (filter on other fields may be useful too)

     

    A strange thing I've discovered with these tools: it seems that deleted objects (clone an existing object and then delete it) are not really deleted in the .Shared file, at least they are still displayed in Server Object Handler. I don't know if it's a bug or not but if not a status column with 'ACTIVE' or 'DELETED' would be useful

  • Power Tools for QlikView
    Christer Andersson

    Hi...this is something GREAT!.

    Actually requested exactly the possibillity to export "current license users".

     

    Just a little problem for me...when I try to put the export example in a QV application...the command window doesn't automatically close.

    When I manually close command window, the file is exported and is just perfect.

    What do I need to do?

     

    Current script in application is:

    EXECUTE cmd /c "D:\QlikView Storage\Private Data\Cmd Files\Power Tools\qv-user-manager.exe" --list cal > cals.csv;

     

     

     

     

    Br

    Christer

    • Power Tools for QlikView
      Rikard Braathen

      Christer,

       

      You need to execute the application including the parameters surrounded by the quotes as it's the complete parameter to cmd.exe. Like this... notice the quotation.

       

      EXECUTE cmd /c "D:\QlikView Storage\Private Data\Cmd Files\Power Tools\qv-user-manager.exe --list cal > cals.csv";

       

       

      I would however recommend to put the command(s) in a batch file and execute the batch file instead. If you download the binary package from the GitHub link in the README file it will include an example app and batch file.

      • Power Tools for QlikView
        Christer Andersson

        Thanks Rikard

         

        That just made it perfect...but I also changed it to a bat file...so it work even better.

         

        I have combined this with the script fetching AD info from the tool "QV10SystemMonitor.qvw" so now I have a updated user list with latest usage and from what department etc, totally automated every morning.

        And then I also have added the possibillity to run it on demand with a "little button".

         

        THIS IS GREAT!!!

  • Power Tools for QlikView
    Jeffrey Vermeire

    Is it possible to use a "join" in a query with the XMLDBViewer tool?

    If not, it would be great to be able to query tables much like in SQL.

    Nothing too fancy, just the basic SELECT..FROM..JOIN...WHERE,

    INSERT, DELETE, UPDATE, etc...

  • Power Tools for QlikView
    Regis Gluzman

    Hello,

     

    I''ve tried Powertools QMSCLIENT tool and works fine (if command line version exists it will be great)

    I need to launch an EDX task with QV11 so I've made a script with Visual C# .Net 2010.

    It does'nt work neither with .Net 3.5 or 4.0 console application version

     

    Everything's ok to call service key and have a look in QVS service launch and method related

    But I can't work with Distribution Service and I don't know why (it works with powertool QMSAPI but not with my script). Is there something's special with Distribution Service ?

     

    Here are my scripts:

     

    program.cs

    using System;

    using System.Linq;

    using System.Threading;

    using System.Collections.Generic;

    using System.ServiceModel;

    using System.ServiceModel.Channels;

    using System.ServiceModel.Configuration;

    using System.ServiceModel.Description;

    using System.ServiceModel.Dispatcher;

    using MyTestApplication.QMSAPI;

     

    namespace MyTestApplication

    {

        class ServiceKeyBehaviorExtensionElement : BehaviorExtensionElement

        {

            public override Type BehaviorType

            {

                get { return typeof(ServiceKeyEndpointBehavior); }

            }

     

            protected override object CreateBehavior()

            {

                return new ServiceKeyEndpointBehavior();

            }

        }

     

        class ServiceKeyEndpointBehavior : IEndpointBehavior

        {

            public void Validate(ServiceEndpoint endpoint) { }

     

            public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { }

     

            public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { }

     

            public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)

            {

                clientRuntime.MessageInspectors.Add(new ServiceKeyClientMessageInspector());

            }

        }

     

        class ServiceKeyClientMessageInspector : IClientMessageInspector

        {

            private const string SERVICE_KEY_HTTP_HEADER = "X-Service-Key";

     

            public static string ServiceKey { get; set; }

     

            public object BeforeSendRequest(ref Message request, IClientChannel channel)

            {

                object httpRequestMessageObject;

                if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))

                {

                    HttpRequestMessageProperty httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;

                    if (httpRequestMessage != null)

                    {

                        httpRequestMessage.Headers[SERVICE_KEY_HTTP_HEADER] = (ServiceKey ?? string.Empty);

                    }

                    else

                    {

                        httpRequestMessage = new HttpRequestMessageProperty();

                        httpRequestMessage.Headers.Add(SERVICE_KEY_HTTP_HEADER, (ServiceKey ?? string.Empty));

                        request.Properties[HttpRequestMessageProperty.Name] = httpRequestMessage;

                    }

                }

                else

                {

                    HttpRequestMessageProperty httpRequestMessage = new HttpRequestMessageProperty();

                    httpRequestMessage.Headers.Add(SERVICE_KEY_HTTP_HEADER, (ServiceKey ?? string.Empty));

                    request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);

                }

                return null;

            }

     

            public void AfterReceiveReply(ref Message reply, object correlationState) { }

        }

     

        class Program

        {

            static void Main(string[] args)

            {

                try

                {

                    // create a QMS API client

                    IQMS apiClient = new QMSClient();

                    // retrieve a time limited service key

     

                    //apiClient.ClientCredentials.Windows.AllowNtlm = true;

     

                    //var ws = new QMSAPI.IQMS.Handler("BasicHttpBinding_IQMS");

                    //ws.ClientCredentials.UserName.UserName = "administrator";

                    //ws.ClientCredentials.UserName.Password = "@dm!nQLIK";

                    //var result = ws.executeMyMethod();             

     

                    ServiceKeyClientMessageInspector.ServiceKey = apiClient.GetTimeLimitedServiceKey();

                    // get a list of QVS services

     

     

                    //Console.WriteLine(apiClient.GetAlertText());

     

                    ServiceInfo qdsService = apiClient.GetServices(ServiceTypes.QlikViewDistributionService).FirstOrDefault();

     

                  

                    if (qdsService != null)

                    {

                        Console.WriteLine("in1");

                        TriggerEDXTaskResult result = apiClient.TriggerEDXTask(qdsService.ID, args[0], args[1], "", null);

                        Console.WriteLine("in2");

                        EDXStatus executionStatus = null;

     

                        //Wait until the task is completed or 60 seconds has passed.

                        //SpinWait.SpinUntil(() =>

                        //{

                        System.Threading.Thread.Sleep(1000);

                        Console.WriteLine("Checking the task...");

     

                        //Get the current state of the task.

                        executionStatus = apiClient.GetEDXTaskStatus(qdsService.ID, result.ExecId);

     

                        //Return true if the task has completed.

                        //executionStatus != null && executionStatus.TaskStatus == TaskStatusValue.Completed;

                        //}, 60 * 1000);

     

                        //Write the result

                        if (executionStatus != null)

                            Console.WriteLine(executionStatus.TaskStatus);

                        else

                            Console.WriteLine("Failed to get execution status.");

                    } //else

     

                    Console.WriteLine("test");

     

                }

                catch (System.Exception ex)

                {

                    Console.WriteLine("exception:"+ex);

                }

            }

        }

    }

     

     

     

    app.config

     

    <?xml version="1.0"?>

    <configuration>

    <startup>

      </startup><system.serviceModel>

            <bindings>

                <basicHttpBinding>

                    <binding name="BasicHttpBinding_IQMS" closeTimeout="00:01:00"

                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

                        useDefaultWebProxy="true">

                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />

                        <security mode="TransportCredentialOnly">

                            <transport clientCredentialType="Ntlm" proxyCredentialType="None"

                                realm="" />

                            <message clientCredentialType="UserName" algorithmSuite="Default" />

                        </security>

                    </binding>

                    <binding name="BasicHttpBinding_IQTService" closeTimeout="00:01:00"

                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

                        useDefaultWebProxy="true">

                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />

                        <security mode="TransportCredentialOnly">

                            <transport clientCredentialType="Ntlm" proxyCredentialType="None"

                                realm="" />

                            <message clientCredentialType="UserName" algorithmSuite="Default" />

                        </security>

                    </binding>

                </basicHttpBinding>

            </bindings>

            <client>

                <endpoint address="http://rg-pc:4799/QMS/Service" binding="basicHttpBinding"

                    bindingConfiguration="BasicHttpBinding_IQMS" contract="QMSAPI.IQMS"

                    name="BasicHttpBinding_IQMS" behaviorConfiguration="ServiceKeyEndpointBehavior"/>

                <endpoint address="http://rg-pc:4799/ANY/Service" binding="basicHttpBinding"

                    bindingConfiguration="BasicHttpBinding_IQTService" contract="QMSAPI.IQTService"

                    name="BasicHttpBinding_IQTService" behaviorConfiguration="ServiceKeyEndpointBehavior"/>

            </client>

        <extensions>

          <behaviorExtensions>

            <add name="serviceKeyBehavior" type="MyTestApplication.ServiceKeyBehaviorExtensionElement, MyTestApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

          </behaviorExtensions>

        </extensions>

        <behaviors>

          <endpointBehaviors>

            <behavior name="ServiceKeyEndpointBehavior">

              <serviceKeyBehavior/>

            </behavior>

          </endpointBehaviors>

        </behaviors>

        </system.serviceModel>

    </configuration>

     

    QMSAPI update works fine, QVS call works, service key too but  qdsService stay nulls

     

    Coudl you help me please ?

     

    Best regards

     

    Regis

  • Re: Power Tools for QlikView
    prh

    Does "QlikView Server Agent" work on 64 Bit machines, as I got the following error?

     

    Failed to interact with service , Exception call stack: System.InvalidOperationException: Cannot open QlikviewServer service on computer 'PAUL-QLIKTECH'. ---> System.ComponentModel.Win32Exception: Access is denied   --- End of inner exception stack trace ---   at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)   at System.ServiceProcess.ServiceController.Stop()   at QlikView_Server_Agent.Main.InteractWithService(ServiceController Svc)

     

    • Re: Power Tools for QlikView
      Stefan Bäckstrand

      prh: Yes, it should work just fine. The error in the stack suggest that you don’t have access to the services with the user – if you have UAC on the machine, make sure to run QlikView Server Agent by right-clicking the exe and selecting “Run as Administrator..”. It will also require you to have administrative privileges on the target machine.

       

      /s

       

       

      Stefan Bäckstrand

      Senior Technical Expert, PM

      Email: Support@qlik.com<mailto:Support@qlik.com>

       

      qlik.com<http://www.qlik.com/>

       

      The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.

  • Power Tools for QlikView
    lixiaowei

    cmd.exe

    EXECUTE

    C:\PowerTools\qv-user-manager\qv-user-manager.exe  --list=CAL

    error:没有终结点在侦听可以接收信息的http://sesth-rfn1:4799/QMS/Service。通常是由于不正确的地址或者SOAP操作导致的。

     

    please help me!thanks

  • Re: Power Tools for QlikView
    lixiaowei

    cmd.exe

    EXECUTE

    C:\PowerTools\qv-user-manager\qv-user-manager.exe  --list=CAL

    error:没有终结点在侦听可以接收信息的http://sesth-rfn1:4799/QMS/Service。通常是由于不正确的地址或者SOAP操作导致的。

     

    please help me!thanks

    • Power Tools for QlikView
      Rikard Braathen

      lixiaowei,

       

      This text below is from the documentation... you need to change the server address.

      Configuration

      Add the user that is executing the tool to the "QlikView Management API" Windows group. This group does not exist by default and must be created. Restart the computer or log out and back in again to let Windows update the groups.

      Change the line below in qv-user-manager.exe.config file to reflect the server address of your QlikView Management Service.

      <endpoint address="http://sesth-rfn1:4799/QMS/Service" binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_IQMSBackend" contract="QMSBackendService.IQMSBackend"name="BasicHttpBinding_IQMSBackend" behaviorConfiguration="ServiceKeyEndpointBehavior" />