Skip to main content
Announcements
YOUR OPINION MATTERS! Please take the Qlik Experience survey you received via email. Survey ends June 14.
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

EDX with delay

Hi all.

I have several EDX solutions up and running.

Works like a charm.

When I hit the button it uses about 10 seconds to do the reload.

During this period I want the relevant tables and graphs to be hidden, and only to appear when the new result is being loaded.

I have created a variable called vShow, it is default set to 0.

When the user hits the button it is set to 1.

My tables have a conditional layout that says vShow = 1

Obivously the button will set the vShow to 1 as soon as I hit it. Thus showing the tables and graphs premature.

Any idea on how to create a delay or make it show when the result from the load is done?

Thanks in advance

BR

Dan

1 Solution

Accepted Solutions
Not applicable
Author

I mean you should place the re-initial code in the loading script, not Macro.

View solution in original post

4 Replies
Not applicable
Author

I have done a similar thing with you.

I have a text object which will show 'Reloading....' during reload process.

The text object is shown conditionally when variable, vShown = 0.

For the button, which trigger the EDX, add a action to change the vShown = 0.

In the loading script, add

let vShown = 1

at the last line of the script.

Anonymous
Not applicable
Author

I assumed that would be one solution, but I have not been able to figure out where in the script I should place the line.

Here is my code:

'Macro for EDX

Sub TriggerEDX()

Dim objHttp

Dim strUrl

Dim strData

Dim strKeyRequest

Dim strKeyAwnser

'Dim varSQL

Dim stringSQL

Dim vShow

SET varSQL = ActiveDocument.Variables("vSQL")'.GetContent.STRING

'stringSQL = varSQL.GetContent.String

'MSGBOX(varSQL)

    'Task Name from QEMC

    Dim strTaskName

    strTaskName = "EDX"

    Dim strTaskPassword

    strTaskPassword = inputbox("Please enter task password")

    ' Create a HTTP instance

    Set objHttp = CreateObject("Microsoft.XMLHTTP")

   

    strUrl = "http://localhost:4720/qtxs.asmx"

   

    'Get key for HTTP call

    strKeyRequest ="<Global method=""GetTimeLimitedRequestKey"" />"

   

    'Do HTTP call to server

    objHttp.open "POST",strUrl,false

    objHttp.setRequestHeader "Content-Type","text/xml"

    objHttp.setRequestHeader "Content-Length", Len(strKeyRequest)

    objHttp.Send strKeyRequest

   

    'Parse the awnser

    'Store reply from HTTP

    Dim strKey

    strKey = ParseKeyAwnser(objHttp.ResponseText)

       

    'Get the string to send in the request that triggers the task

    Dim strEDXRequest

       

    'Store the result

    strEDXRequest = GetEDXRequestString(strKey,strTaskName,strTaskPassword,varSQL.GetContent.String)

   

    'Do the actual request to trigger the task

    objHttp.open "POST",strUrl,false

    objHttp.setRequestHeader "Content-Type","text/xml"

    objHttp.setRequestHeader "Content-Length", Len(strKeyRequest)

    objHttp.Send strEDXRequest

   

    'Get the awnser, the awnser can contain different things but for now I only care to see if we find success

    dim strAwnser

    strAwnser = objHttp.ResponseText

   

    'The awnser if success looks like this

    '<RequestEDX>

    '  <RequestEDXResult>

    '    <TaskStartResult>Success</TaskStartResult>

    '    <Log />

    '  </RequestEDXResult>

    '</RequestEDX>       

   

    if(Instr(strAwnser,"<TaskStartResult>Success</TaskStartResult>") > 0) then

        msgbox("Loading data! This may take a few seconds!")

    else

        msgbox(strAwnser)

    end if

   

End Sub

Function ParseKeyAwnser(strKeyAwnser)

'The Awnser should look something like this

'<GetTimeLimitedRequestKey>

'  <GetTimeLimitedRequestKeyResult></GetTimeLimitedRequestKeyResult>

'</GetTimeLimitedRequestKey>

Dim intStartPos

Dim IntKeyLen

'Get the starting and the end position of the key

intStartPos = InStr(strKeyAwnser,"<GetTimeLimitedRequestKeyResult>")+Len("<GetTimeLimitedRequestKeyResult>")

intKeyLen = InStrRev(strKeyAwnser,"</GetTimeLimitedRequestKeyResult>") - intStartPos

'Get and return the key

ParseKeyAwnser = Mid(strKeyAwnser,intStartPos,intKeyLen)

End Function

Function GetEDXRequestString(strRequestKey,strTaskName,strTaskPassword,stringSQL)

'The request to send look like this

'<Global method="RequestEDX" key="RJtp/">

  '<i_TaskIDOrTaskName>MyTaskName</i_TaskIDOrTaskName>

  '<i_Password>MyTaskPassword</i_Password>

  '<i_VariableName /><i_VariableName />

  '<i_VariableValueList /><i_VariableValueList />

  '</Global>

'Make the string and insert the key

GetEDXRequestString = "<Global method=""RequestEDX"" key=""" & strRequestKey &  """><i_TaskIDOrTaskName>" & strTaskName & "</i_TaskIDOrTaskName><i_Password>" & strTaskPassword & "</i_Password><i_VariableName >vSQL</i_VariableName ><i_VariableValueList ><string>" & stringSQL & "</string></i_VariableValueList ></Global>"

End Function

Not applicable
Author

I mean you should place the re-initial code in the loading script, not Macro.

Anonymous
Not applicable
Author

Thanks.

Simpler is better!

BR

Dan