<?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 Parse GraphQL queries with DQL in Open Q&amp;A</title>
    <link>https://community.dynatrace.com/t5/Open-Q-A/Parse-GraphQL-queries-with-DQL/m-p/255366#M33710</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Does anyone know if there's a way to dynamically parse graphQL queries with DQL with the idea to extract the fields that is requested in the query?&lt;BR /&gt;I'm trying to use the request payload, but also extract the fields from response would be possible.&lt;/P&gt;&lt;P&gt;The problem is that, there's no pattern, the query can come with differents fields and orders. Bellow I have some examples:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;{ clientePorConta(numeroConta: \"1234\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }

{ cliente(cpf: "1234") { dadosSociais { numeroConta, statusConta } } }


{ cliente(cpf: "12345") { contaCartao { contratos { numeroConta, statusConta, cartoes { id, numeroCartao, numeroCartaoCompleto, statusCartao, ehPrimario, nomeCartao, nomePortador } } } } }


{ cliente(cpf: "12345") { cpf, dadosSociais { numeroConta, dataDeNascimento, nomeCompleto, nomePrimeiro, nomeMeio, nomeUltimo, nomeSocial, nomeMae, genero }, contaCartao { contratos { statusConta, unidadeNegocio, numeroConta, tipoEnvioFatura } } } }

{ cliente(cpf: "1234") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, ehPrimario, idProduto } } } } }


{ cliente(cpf: "1234") { cpf, dadosSociais { nomeCompleto, numeroConta, tipoEnvioFatura, funcao, dataDeNascimento }, contato { dadosContato { numeroConta, emails { endereco }, telefones { ddd, numero, celularSeguro, tipo }, enderecos { uF, cidade, tipoEndereco } } }, contaCartao { contratos { codigoProdutoCurto, numeroConta, unidadeNegocio, statusConta, dataAberturaConta, valorLimiteTotal, cartoes { id, nomePortador, statusCartao, numeroCartao, numeroCartaoCompleto, ehPrimario, ehAtivo, tipoTitularidade, ehVirtual } } } } }&lt;/LI-CODE&gt;&lt;P&gt;&lt;BR /&gt;I was able to extract some fileds but from one case:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;data 
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }")
| parse text, "DATA 'numeroConta: ' DQS:numero_conta"
| parse text, "DATA 'valorLimiteTotal: ' DQS:valorLimiteTotal"
| fieldsAdd  new_text=replaceString(text, "{", "&amp;lt;")
| fieldsAdd  new_text=replaceString(new_text, "}", "&amp;gt;")
| fieldsAdd  new_text=replaceString(new_text, " ", "")
| parse new_text, "DATA 'contratos&amp;lt;' [^&amp;lt;]*:contratos_arr"
| fieldsAdd contratos_arr=splitString(contratos_arr, ",")
| expand contratos_arr&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If anyone has a better DQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 10 Sep 2024 17:08:53 GMT</pubDate>
    <dc:creator>mmsz</dc:creator>
    <dc:date>2024-09-10T17:08:53Z</dc:date>
    <item>
      <title>Parse GraphQL queries with DQL</title>
      <link>https://community.dynatrace.com/t5/Open-Q-A/Parse-GraphQL-queries-with-DQL/m-p/255366#M33710</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Does anyone know if there's a way to dynamically parse graphQL queries with DQL with the idea to extract the fields that is requested in the query?&lt;BR /&gt;I'm trying to use the request payload, but also extract the fields from response would be possible.&lt;/P&gt;&lt;P&gt;The problem is that, there's no pattern, the query can come with differents fields and orders. Bellow I have some examples:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;{ clientePorConta(numeroConta: \"1234\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }

{ cliente(cpf: "1234") { dadosSociais { numeroConta, statusConta } } }


{ cliente(cpf: "12345") { contaCartao { contratos { numeroConta, statusConta, cartoes { id, numeroCartao, numeroCartaoCompleto, statusCartao, ehPrimario, nomeCartao, nomePortador } } } } }


{ cliente(cpf: "12345") { cpf, dadosSociais { numeroConta, dataDeNascimento, nomeCompleto, nomePrimeiro, nomeMeio, nomeUltimo, nomeSocial, nomeMae, genero }, contaCartao { contratos { statusConta, unidadeNegocio, numeroConta, tipoEnvioFatura } } } }

{ cliente(cpf: "1234") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, ehPrimario, idProduto } } } } }


{ cliente(cpf: "1234") { cpf, dadosSociais { nomeCompleto, numeroConta, tipoEnvioFatura, funcao, dataDeNascimento }, contato { dadosContato { numeroConta, emails { endereco }, telefones { ddd, numero, celularSeguro, tipo }, enderecos { uF, cidade, tipoEndereco } } }, contaCartao { contratos { codigoProdutoCurto, numeroConta, unidadeNegocio, statusConta, dataAberturaConta, valorLimiteTotal, cartoes { id, nomePortador, statusCartao, numeroCartao, numeroCartaoCompleto, ehPrimario, ehAtivo, tipoTitularidade, ehVirtual } } } } }&lt;/LI-CODE&gt;&lt;P&gt;&lt;BR /&gt;I was able to extract some fileds but from one case:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;data 
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }"),
record (text="{ clientePorConta(numeroConta: \"37000075921\") { contaCartao { contratos { numeroConta, valorFaturaAberta, valorLimiteDisponivel, valorLimiteTotal, dataVencimento, cartoes { id, numeroCartao, tipoTitularidade, nomePortador, ehPrimario, ehVirtual, idProduto } } } } }")
| parse text, "DATA 'numeroConta: ' DQS:numero_conta"
| parse text, "DATA 'valorLimiteTotal: ' DQS:valorLimiteTotal"
| fieldsAdd  new_text=replaceString(text, "{", "&amp;lt;")
| fieldsAdd  new_text=replaceString(new_text, "}", "&amp;gt;")
| fieldsAdd  new_text=replaceString(new_text, " ", "")
| parse new_text, "DATA 'contratos&amp;lt;' [^&amp;lt;]*:contratos_arr"
| fieldsAdd contratos_arr=splitString(contratos_arr, ",")
| expand contratos_arr&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If anyone has a better DQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 10 Sep 2024 17:08:53 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Open-Q-A/Parse-GraphQL-queries-with-DQL/m-p/255366#M33710</guid>
      <dc:creator>mmsz</dc:creator>
      <dc:date>2024-09-10T17:08:53Z</dc:date>
    </item>
    <item>
      <title>Re: Parse GraphQL queries with DQL</title>
      <link>https://community.dynatrace.com/t5/Open-Q-A/Parse-GraphQL-queries-with-DQL/m-p/255382#M33711</link>
      <description>&lt;P&gt;I'd suggest you go straight to the response, since there's the actual data you want, and we have support to parse JSON objects fairly easy with just a simple:&lt;/P&gt;&lt;LI-CODE lang="java"&gt;| parse json_data, "JSON:data"&lt;/LI-CODE&gt;&lt;P&gt;And you can explore all the fields you have from there. Example:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Eric_Yu_0-1726005449137.png" style="width: 854px;"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/22291i296B604ECA1401C9/image-dimensions/854x365?v=v2" width="854" height="365" role="button" title="Eric_Yu_0-1726005449137.png" alt="Eric_Yu_0-1726005449137.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;If you really need to get the identifier of the user from the request from the graphql query structure, you can use &lt;A href="https://docs.dynatrace.com/docs/shortlink/dpl-alternatives-group" target="_self"&gt;alternative groups&lt;/A&gt; to cover multiple scenarios. Following your example, this might work:&lt;/P&gt;&lt;LI-CODE lang="java"&gt;| parse text, "'{ ' ('cliente'|'clientePorConta') '(' LDATA:identifierType ': \"' LDATA:identifier '\"' DATA"&lt;/LI-CODE&gt;&lt;P&gt;I tried it with 3 of your scenarios and it worked decently:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Eric_Yu_1-1726005688146.png" style="width: 847px;"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/22292iE593767B86892E7D/image-dimensions/847x235?v=v2" width="847" height="235" role="button" title="Eric_Yu_1-1726005688146.png" alt="Eric_Yu_1-1726005688146.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Let me know if it helps&lt;/P&gt;</description>
      <pubDate>Tue, 10 Sep 2024 22:03:24 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Open-Q-A/Parse-GraphQL-queries-with-DQL/m-p/255382#M33711</guid>
      <dc:creator>Eric_Yu</dc:creator>
      <dc:date>2024-09-10T22:03:24Z</dc:date>
    </item>
  </channel>
</rss>

