<?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: Pipefy and Qlik Sense Integration in App Development</title>
    <link>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1802217#M65075</link>
    <description>&lt;P&gt;Just so you know I pressed like 3 times. Extra credit for using Emojis in your visuals to make things really engaging.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 23 Apr 2021 14:48:30 GMT</pubDate>
    <dc:creator>Dalton_Ruer</dc:creator>
    <dc:date>2021-04-23T14:48:30Z</dc:date>
    <item>
      <title>Pipefy and Qlik Sense Integration</title>
      <link>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1801971#M65046</link>
      <description>&lt;P&gt;Here at our company NTech, we have developed Analytics projects for customers using Pipefy (&lt;A href="https://www.pipefy.com" target="_blank" rel="noopener"&gt;https://www.pipefy.com&lt;/A&gt;) and Qlik Sense.&amp;nbsp; I didn't find any reading on the topic, so I decided to talk here a little about the use of Qlik Sense to build analytical panels with Pipefy data through GraphQL based APIs.&lt;/P&gt;&lt;P&gt;Qlik Sense has the ability to access data from a wide list of data sources, whether structured or unstructured. To access Pipefy data via the GraphQL API, we use a REST connector, native to the tool. I even wrote an article some time ago called "&lt;A href="http://community.qlik.com/t5/Brasil/GraphQL-Como-usar-no-Qlik-Sense-a-Evolu%C3%A7%C3%A3o-das-APIs-Web/td-p/1599581" target="_blank" rel="nofollow noreferrer noopener"&gt;&lt;EM&gt;GraphQL: How to use the Evolution of Web APIs in Qlik Sense&lt;/EM&gt;&lt;/A&gt;" (written in Portuguese).&lt;/P&gt;&lt;P&gt;In this article we will cover the basic concepts, since in Pipefy we have a series of objects such as Pipes, Cards, Phases, Phases History, Labels, Tables, Records, Cards Fields, among others, as well as issues such as data pagination.&lt;/P&gt;&lt;P&gt;A nice thing about Qlik Sense is that we can read all these objects individually and then store them in QVD format (data file in Qlik format) and from these QVDs build the desired views integrating all objects.&lt;/P&gt;&lt;P&gt;Initially we need to define our data loads and logically have the access token already in hand.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1st Load: List of Pipes&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;We built our GraphyQL Query, according to Pipefy documentation:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;{"query":"{ organizations { id name created_at pipes(include_publics: true) { id name } } }"}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then we created a REST connection, parameterizing it according to the images below:&lt;/P&gt;&lt;P&gt;Inserting API&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;URL&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and our GraphQL query into the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Request Body&lt;/STRONG&gt;:&lt;/P&gt;&lt;DIV class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="f33f6805-9e22-48a0-a62f-70eb6ae84567" style="width: 932px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/53519i14767F398E6C2AD7/image-size/large?v=v2&amp;amp;px=999" role="button" title="f33f6805-9e22-48a0-a62f-70eb6ae84567" alt="f33f6805-9e22-48a0-a62f-70eb6ae84567" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And Inserting you Token in&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Query Headers&lt;/STRONG&gt;:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="a668a2e1-e7e4-4185-bdf9-42813d3a1056" style="width: 736px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/53520iBC7B56D7F77A7487/image-size/large?v=v2&amp;amp;px=999" role="button" title="a668a2e1-e7e4-4185-bdf9-42813d3a1056" alt="a668a2e1-e7e4-4185-bdf9-42813d3a1056" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Then give your connection a name (like "pipes") and save.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Then, create another REST connection, this time to consult the Cards of our Pipe "Gestão de Trabalho Remoto". It is important to know the Pipe ID.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;2nd Load: List of Pipe Cards "Gestão de Trabalho Remoto" ID 301532736&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Again, we built our new GraphyQL Query, according to Pipefy documentation:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;{"query":"{allCards(pipeId:301532736){ edges { node { id title due_date current_phase {name} pipe {id} } } } } "}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In this case, follow all the procedures of the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;1st Load&lt;/STRONG&gt;, changing only the GraphQL query in the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Request Body&lt;/STRONG&gt;, and save as the connection with another name (like "cards").&lt;/P&gt;&lt;P&gt;We can make several loads using only a single REST connection, dynamically changing the parameters in the load script, using the WITH CONNECTION statement. However, we will not cover the use of WITH CONNECTION in this article.&lt;/P&gt;&lt;P&gt;Then build the script for the two loads (pipes and cards), through the automatic generation of the connectors (Select Data).&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="4bf375f7-c427-4ab8-ab4f-e29d348bbb63" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/53521i3AB2A7DA98DAEB62/image-size/large?v=v2&amp;amp;px=999" role="button" title="4bf375f7-c427-4ab8-ab4f-e29d348bbb63" alt="4bf375f7-c427-4ab8-ab4f-e29d348bbb63" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;It is necessary to adjust the names of the fields so that the data model does not have conflicts and to generate the associative model correctly.&lt;/P&gt;&lt;P&gt;Here are the scripts for the 2 loads:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Pipe Script:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;/*
'
LIB CONNECT TO 'Pipes';

RestConnectorMasterTable:
SQL SELECT 
    "__KEY_data",
    (SELECT 
        "id" AS "id_u0",
        "name" AS "name_u0",
        "created_at",
        "__KEY_organizations",
        "__FK_organizations",
        (SELECT 
            "id",
            "name",
            "__FK_pipes"
        FROM "pipes" FK "__FK_pipes")
    FROM "organizations" PK "__KEY_organizations" FK "__FK_organizations")
FROM JSON (wrap off) "data" PK "__KEY_data";

[organizations]:
LOAD    
    [id_u0] AS organization_id,
    [name_u0] AS organization_name,
    [created_at] AS organization_created_at,
    [__KEY_organizations],
    [__FK_organizations] AS [__KEY_data]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_organizations]);

[pipes]:
LOAD    
    [id] as pipe_id,
    [name] as pipe_name,
    [__FK_pipes] AS [__KEY_organizations]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_pipes]);
Left Join(pipes)
LOAD 
    organization_id,
    organization_name,
    [__KEY_organizations]
RESIDENT [organizations];

DROP TABLE RestConnectorMasterTable;
DROP TABLE [organizations];
DROP Field [__KEY_organizations] From [pipes];
'
*/&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Cards Script:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;/*
LIB CONNECT TO 'Cards';

RestConnectorMasterTable:
SQL SELECT 
    "__KEY_data",
    (SELECT 
        "__KEY_allCards",
        "__FK_allCards",
        (SELECT 
            "__KEY_edges",
            "__FK_edges",
            (SELECT 
                "id" AS "id_u0",
                "title",
                "due_date",
                "__KEY_node",
                "__FK_node",
                (SELECT 
                    "name",
                    "__FK_current_phase"
                FROM "current_phase" FK "__FK_current_phase"),
                (SELECT 
                    "id",
                    "__FK_pipe"
                FROM "pipe" FK "__FK_pipe")
            FROM "node" PK "__KEY_node" FK "__FK_node")
        FROM "edges" PK "__KEY_edges" FK "__FK_edges")
    FROM "allCards" PK "__KEY_allCards" FK "__FK_allCards")
FROM JSON (wrap off) "data" PK "__KEY_data";

[cardpipe]:
LOAD    
    [id] as pipe_id,
    [__FK_pipe] AS [__KEY_node]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_pipe]);

[current_phase]:
LOAD    
    [name] as current_phase_name,
    [__FK_current_phase] AS [__KEY_node]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_current_phase]);


[cards]:
LOAD    
    [id_u0] as card_id,
    [title] as card_title,
    [due_date] as card_due_date,
    [__KEY_node]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_node]);
Left Join(cards)
LOAD 
    current_phase_name,
    [__KEY_node]
RESIDENT [current_phase];
Left Join(cards)
LOAD 
    pipe_id,
     [__KEY_node]
RESIDENT [cardpipe];

DROP TABLE RestConnectorMasterTable;
DROP Table [cardpipe];
DROP TABLE [current_phase];
DROP Field  [__KEY_node]from cards;
*/&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Once the data model is loaded, it will look like this:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="167b6a6f-6ed9-42ae-a37e-1761275f80c4" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/53522iA51D3F3760B7206D/image-size/large?v=v2&amp;amp;px=999" role="button" title="167b6a6f-6ed9-42ae-a37e-1761275f80c4" alt="167b6a6f-6ed9-42ae-a37e-1761275f80c4" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;And finally we can make our panels, like the example below:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="14408d7a-5b20-4d24-a001-3c195a7cc809" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/53523iC824FA4BF11DAD52/image-size/large?v=v2&amp;amp;px=999" role="button" title="14408d7a-5b20-4d24-a001-3c195a7cc809" alt="14408d7a-5b20-4d24-a001-3c195a7cc809" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;That's it! See you the next!&lt;/P&gt;</description>
      <pubDate>Tue, 21 Dec 2021 21:56:36 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1801971#M65046</guid>
      <dc:creator>jptneumann</dc:creator>
      <dc:date>2021-12-21T21:56:36Z</dc:date>
    </item>
    <item>
      <title>Re: Pipefy and Qlik Sense Integration</title>
      <link>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1802217#M65075</link>
      <description>&lt;P&gt;Just so you know I pressed like 3 times. Extra credit for using Emojis in your visuals to make things really engaging.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 23 Apr 2021 14:48:30 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1802217#M65075</guid>
      <dc:creator>Dalton_Ruer</dc:creator>
      <dc:date>2021-04-23T14:48:30Z</dc:date>
    </item>
    <item>
      <title>Re: Pipefy and Qlik Sense Integration</title>
      <link>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1814606#M66612</link>
      <description>&lt;P&gt;Thaks for the information, do you have any example using&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;WITH CONNECTION&amp;nbsp;??&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jun 2021 19:44:54 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/Pipefy-and-Qlik-Sense-Integration/m-p/1814606#M66612</guid>
      <dc:creator>sandra_romero</dc:creator>
      <dc:date>2021-06-11T19:44:54Z</dc:date>
    </item>
  </channel>
</rss>

