3 Replies Latest reply: May 3, 2013 11:55 AM by Micael Leal RSS

    OCX Reloading time issue



      I want to avoid the reloading after setting variables inside my report via C#


      The reason is when I generate customer reports with huge amount of data flow, this take for each reload about 5-10minutes.


      And now, if I want to filter those variables for 500 customers, this takes 5x500=2500minutes to 10x500=5000minutes, which actually takes around 8-16hours of export because the report is being reloaded everytime.


      I'm using following code to set the variables.


      public void SetVariables(IDictionary<string, object> parameters)


                  foreach (KeyValuePair<string, object> p in parameters)


                      Variable v = qvReport.Variables(p.Key);

                      if (v != null)


                              //Console.WriteLine("Before modification content : " + v.GetContent().String);

                              v.SetContent(p.Value.ToString(), true);

                              //Console.WriteLine("Current content : " + v.GetContent().String);

                              variables = null;



                  qvReport.Reload(0);  // don't reload it but change only selection



      And for retrieving variables:


      public IList<QlikViewVariable> GetVariables()


                  if (qvReport == null)

                      throw new Exception("Load a QlikView Report before accessing Shapes");

                  if (variables == null)


                      IList<QlikViewVariable> list = new List<QlikViewVariable>();

                      for (int i = 0; i < qvReport.GetVariableDescriptions().Count; i++)


                          IVariableDescription v = qvReport.GetVariableDescriptions()[i];

                          //Console.WriteLine("Variable name : "+v.Name);

                          if (!(v.Name.Contains("filter")))



                              list.Add(new QlikViewVariable(v.Name, qvReport.GetVariable(v.Name).GetRawContent()));



                      variables = list;


                  return variables;



      I didn't find anything in the QlikView OCX reference manual to avoid the reloading process, but only change the variables in real time.


      Because, in the Editor Script, when I open the document, I set


      Set listbox=ActiveDocument.GetSheetObject("LB01")



      And in my sheet I create a listbox with following expression




      Means, my variable v_Load_ID will be changed while injection process. It will automatically change my reports charts according to the variable on document opening.


      So global idea:


      Change variable with C# -> open document -> avoid reload process if the reload was already done today -> update charts -> I export them -> close document


      The process I want to be done in better way is


      *avoid reload process if the reload was already done today


      Any idea?



        • Re: OCX Reloading time issue


          • Re: OCX Reloading time issue
            John-Paul Della Putta

            Perhaps a hack...

            Have 2 documents, one that does the data load and then do a binary load in your report document. That should be really fast.

            • Re: OCX Reloading time issue

              Found out how to skip it in an easier way.


                  DateTime dt = File.GetLastWriteTime(qvReport.GetPathName());

                  if (dt.Date!=DateTime.Today)


                      Console.WriteLine("Fetching newest information from database");

                      qvReport.Reload(0); // Reloading the document with new variables




                       Console.WriteLine("File has been opened today and doesn't require to be reloaded");



              I defined that, if it has been launched once the same day, it won't be launched again and I save it in order to get a new modification time. Since, the report will be created once and never modified again, I can suppose that nobody will work on it anymore.