Como integrar Protheus com JotForms

Hoje vou mostrar como fazer uma integração com JotForms utilizando FWRest e JSON.

Para quem não conhece, JotForms é um sistema online de formulários, similar ao Google Forms. Nesse link tem toda a documentação – https://api.jotform.com/docs/#user-forms

Na integração, usaremos a classe FWRest, e é necessário no header informar a chave da API que o pessoal do JotForms disponibiliza para a empresa contratante.

Depois disso conseguimos usar o Get ou Set dos métodos citados na documentação.

Por último, é retornado um JSON, e conseguimos fazer as tratativas de informação com FWJsonDeserialize ou com JsonObject.

Abaixo o exemplo desenvolvido conforme as explicações acima:

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} zJotTst
Exemplo de GET em uma integração com JotForms
@author Atilio
@since 01/11/2020
@version 1.0
@type function
@obs No exemplo abaixo é usado o /user/forms com Get, mas é possível usar Set e outros métodos conforme documentação disponível - https://api.jotform.com/docs/#user-forms
/*/

User Function zJotTst()
    Local aArea := GetArea()
    Local cURL := "api.jotform.com"
    Local aHeaderStr   := {}
    Local oRestClient  := FwRest():New(cUrl)
    Local cAPIKey := "Seu Token de Acesso"
    Local oJSON
	Local cDtIni := "2020-11-01"
	Local cResult

	//Se o token tiver preenchido
	If !Empty(cAPIKey)
		//No cabeçalho define o Token usado
		aAdd(aHeaderStr, 'APIKEY: ' + cAPIKey)

		//Iremos definir a integração como /user/forms e iremos filtrar criações a partir da data 01/11/2020
		oRestClient:SetPath('/user/forms?filter={%22created_at:gt%22:%22' + cDtIni + '%2000:00:00%22}%20')
		
		//Chama o método Get do FWRest, armazena o resultado em uma variável
		If oRestClient:Get( aHeaderStr )
            cResult := oRestClient:GetResult()

			//Se o JSON for deserializado, significa que deu certo, e aí basta pegar os atributos dentro do oJSON e fazer as tratativas
            If (FWJsonDeserialize(cResult, @oJSON))
                Alert('Json foi deserializado')
            EndIf
			
		//Senão, pega os erros, e se quiser exibir, basta adicionar um Alert
		Else
			cLastError := oRestClient:GetLastError()
			cErrorDetail := oRestClient:GetResult()
		EndIf
	EndIf

    RestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação