Solved

Atualizar as opções de um campo de select

  • 10 November 2021
  • 2 replies
  • 317 views

Userlevel 2

Pessoal, tudo bem?

 

Preciso de uma ajuda, nao estou entendendo como posso fazer o que preciso.

 

Tenho uma lista de possíveis clientes e quero que ao iniciar um novo card, meu cliente selecione seu nome dentre as opções.

Porem, como tenho clientes novos toda semana, gostaria de atualizar essa lista de possibilidades atraves da API.

 

Pelo que entendi, tenho que usar uam estrutura desse tipo:

 

mutation { updatePhaseField( input: { id: "id_lista_clientes" uuid: "uuid_lista_clientes" label: "Lista de Clientes" } ) { phase_field { id uuid label phase{ [Nome1, Nome2, Nome3] } } } }

 

Alguem pode me dizer se é isso mesmo?

E também, onde eu descubro o id e o uuid do campo que eu quero editar?

icon

Best answer by davi-fontenele 10 November 2021, 07:03

View original

2 replies

Userlevel 2

Olhando o forum em ingles entendi como fazer (nesse topico) e segue para quem estiver com a mesma dúvida:

 

Primeiro, no python, quando for mandar o payload, precisa identificar que é uma query antes:

payload = '{"query":"{ pipe(id: seu_id) { start_form_fields{ id uuid label type required } }}"}'

url = "https://api.pipefy.com/graphql"
headers = {
    "authorization": f"Bearer {seu_token}",
    "content-type": "application/json"
}

response = requests.request("POST", url, data=payload, headers=headers)

 

sua response vai te dar algo assim:

[{'id': 'clientes',  'uuid': 'e03e7118-bb44-41f4-aa23-448a39b5fb84',  'label': 'Clientes',  'type': 'select',  'required': True}]

 

Com esses valores de id e uuid voce faz um novo request, que no https://app.pipefy.com/graphiql é assim:

 

mutation {
      updatePhaseField(input:{
        id:"clientes",
        uuid:"e03e7118-bb44-41f4-aa23-448a39b5fb84",
        label:"Clientes",
        required: true,
        options: [“Primeiro Cliente”, “Segundo Cliente”]
      }){
        phase_field{
          id
          uuid
          label
          required
        }
      }
    }

 

mas no python, dentro do mutation, você tem que se atentar a colocar \ antes de cada “, alem de indicar que é uma r string:

payload = r'{"query":"mutation { updatePhaseField(input:{ id:\"clientes\", uuid:\"e03e7118-bb44-41f4-aa23-448a39b5fb84\", label:\"Clientes\", required: true, options: [\"Primeiro Cliente\",\"Segundo Cliente\" ] }}{ phase_field{ id uuid label required } } }"}'

 

Como eu vou precisar fazer update dinamico de varios campos e me perdi pra caramba nesse negocio de /”, tentei encapsular numa função, mas ainda tem muito espaço pra melhoria:

 

def update_field_options(field_id, field_uuid, field_label, options_array):
    
    options_value  =  r",".join(['\\"'+option+'\\"' for option in options_array])
    options_value = r"["+options_value+"]"


    mutation = fr"""mutation (
          updatePhaseField#input:(
            id:\"{field_id}\",
            uuid:\"{field_uuid}\",
            label:\"{field_label}\",
            required: true,
            options: {options_value}
          )$(
            phase_field(
              id
              uuid
              label
              required
            )
          )
        )
    """

    adjusted_mutation= mutation.replace('\n','').replace('(','{').replace(')','}').replace('#','(').replace("$",")")

    payload = '{"query":"'+adjusted_mutation+'"}'

    response = requests.request("POST", url, data=payload, headers=headers)

 

 

Com isso funcionou aqui \o/

Userlevel 7
Badge +6

Boa! Sempre tem alguma coisa no fórum em inglês. 

Reply