Python: Métodos Nativos

Esta é uma lista de métodos nativos e como usá-los em gatilhos Low-code.

Variáveis Comuns e Dicionários

Antes de chegar aos próprios métodos nativos, há uma informação importante a ser observada ao criar gatilhos de Low-code: o uso de currentData, beforeSave e afterSave.

Esses quatro dicionários contêm informações úteis sobre as informações enviadas pelo usuário e sobre o próprio banco de dados.

  • currentData: é o dicionário que contém as informações que o usuário enviou ao realizar uma ação. Por exemplo, se um usuário arrastar um cartão em um kanban para o estágio "Em andamento", o currentData['stage'] conterá "In Progress".
  • beforeSave: este é o dicionário que contém as informações sobre o registro antes de ser alterado (ou seja, antes de currentData ser salvo no banco de dados). Por exemplo, se um usuário arrastar um cartão em um kanban de "Novo" para o estágio "Em andamento", o currentData['stage'] conterá "In Progress" e beforeSave["stage"] conterá "New" . Bônus: se você alterar o beforeData em um gatilho síncrono, antes de criar/atualizar, essa nova informação será salva no registro.
  • afterSave: este é o dicionário que contém as informações sobre o registro depois que ele é alterado (ou seja, depois que currentData é salvo no banco de dados). Por exemplo, se um usuário arrastar um cartão em um kanban de "Novo" para o estágio "Em andamento", então currentData['stage'] conterá "In Progress", assim como afterSave["stage"]. Bônus: algumas informações só estarão disponíveis no afterSave. Por exemplo, em uma trigger Depois que um registro é criado, o id do registro só estará contido em afterSave, pois o id só é registrado depois que o registro é salvo no banco de dados.
  • currentUser: este é o dicionário que contém as informações sobre o usuário que disparou a automação. É particularmente útil para identificação, já que contém id_user, email, e name.

Tambem existem dois outros dicionários que só estão presentes quando são usadas Funções ao invés de Gatilhos:

  • recordData: contém a informação de um registro quando a Função é ativada através de uma combinação Botão + Executar uma função. Nesse cenário, também deve ser notado que campos de conexão N:1 trarão o primeiro nível de informação conectada. Por exemplo, se vocÊ tem o campo "cliente" que aponta para a tabela "Clientes", você pode acessas informação como recordData['cliente']['name'] sem necessidade de executar uma busca separada.
  • params: contém a informação que você recebe quando ativa uma Função através de um webhook. Por exemplo, se você mandar o payload JSON {"status":"New"} para o webhook, você pode acessar essa informação através de params['status'] na Função.

Métodos Nativos

Esta é uma lista de métodos nativos e como usá-los em gatilhos Low-code.

Criar Registro

Para criar um registro, use o método table usando o nome da tabela como parâmetro, depois o método insert usando um dicionário como parâmetro. Exemplo:

result = jestor.table('table_name').insert({'name': 'test'})
#result will be a python array with the created record's values

Editar Registro

Para editar um registro use o método table usando o nome da tabela como parâmetro, depois o método update usando o id do registro que será alterado e um Dicionário como parâmetro. Exemplo:

recordId = 1
result = jestor.table('table_name').update(recordId, {'name': 'test'})
#result will be a python array with the updated record's values

Deletar Registro

Para excluir um registro, use o método table usando o nome da tabela como parâmetro, depois o método delete usando o id do registro como parâmetro. Exemplo:

recordId = 1
jestor.table('table_name').delete(recordId)

Listar Registros

Para listar os registros, use o método table usando o nome da tabela como parâmetro e, em seguida, o método get. Exemplo:

result = jestor.table('table_name').get()
#result will be a python array with the fetched records' values

## To apply filters use the Filter object:

filters = [
	Filter('name', 'test', Operators.CONTAINS, 'string'),
]
#instead of the Operators class, you can also pass an operator string such as "=="

result = jestor.table('table_name').get(filters)
#result will be a python array with the fetched records' values

O objeto Filter recebe os seguintes parâmetros:

  • campo: str (nome do campo).
  • valor: str (valor do campo).
  • operador: str (os operadores podem ser encontrados na classe Operadores).
  • tipo: str (tipo de campo).

Criar Usuário

Para criar um usuário utilize o método user(), depois o método createUser() passando uma lista como parâmetro. Esta lista deve conter os campos na ordem [email, password, profile_id, name]. Exemplo:

result = jestor.user().createUser(['[email protected]', 'passworda@123', '1','Test']);
#result will be a python array with the created user's values

Listar Usuários

Para listar os usuários, use o método user() e, em seguida, o método get. O método get aceita os seguintes parâmetros:

  • filtros: Lista[Filtro] = Nenhum,
  • limite: int = 100,
  • página: int = 1,
  • sort: str = Nenhum

Exemplo:

result = jestor.user().get();
#result will be a python array with the fetched users' values

## To apply filters use the Filter object:

filters = [
	Filter('name', 'test', Operators.CONTAINS, 'string'),
]
#instead of the Operators class, you can also pass an operator string such as "=="

result = jestor.user().get(filters=filters,sort='name asc')
#result will be a python array with the fetched users' values

Listar Tarefas

Para listar as tarefas, use o método fetchTasks. O método fetchTasks aceita um tipo de lista de parâmetros, que pode conter os campos na ordem [[Filter], limit, page]. Exemplo:

result = jestor.fetchTasks();
#result will be a python array with the fetched tasks' values

## To apply filters use the Filter object:

filters = [
	Filter('description', 'test', Operators.CONTAINS, 'string'),
]
#instead of the Operators class, you can also pass an operator string such as "=="

limit = 10
page = 1
result = jestor.fetchTasks([filters, limit, page])
#result will be a python array with the fetched tasks' values

Arquivos

Para manipular arquivos, use o objeto File. Leva os seguintes parâmetros:

  • tabela: str
  • recordId: int = Nenhum
  • campo: str = Nenhum
tableName = 'table_name'
recordId = 1
field = 'file_field'
files = jestor.file(tableName, recordId, field)

Adicionando, removendo e editando arquivos em um registro existente:

tableName = 'table_name'
recordId = 1
field = 'file_field'
files = jestor.file(tableName, recordId, field)

files.add({'name': 'file_test', 'content': '<content string>', 'contentType': 'pdf'})

idFile = 'A1CVwLAxzjjYprO5Bjdfi-5'
files.remove(idFile)

idFile = 'E0DOdSKgvkkMncI8Fnhst-2'
files.update(idFile, {'name': 'file_update_name'})


result = jestor.table('table_teste').update(recordId, {field: files.toJson()})

#result will be a python array with the updated record's values

Adicionando arquivos a um novo registro:

tableName = 'table_name'
files = jestor.file(tableName)

files.add({'name': 'file_test', 'content': '<content string>', 'contentType': 'pdf'})

result = jestor.table(tableName).insert({'name': 'create new record', 'files': files.toJson()})

#result will be a python array with the created record's values

POST

Você pode POST dados em um terminal externo usando o método post.

url = "htpps://url.com"

headers = {
	"Content-Type":"application/json"  
}

body = {
	"name":"example"  
}

result = jestor.post([url,headers,body])
#result will contain the call's response

GET

Você pode fazer chamadas GET para um terminal externo usando o método get.

url = "htpps://url.com"

headers = {
	"Content-Type":"application/json"  
}

result = jestor.post([url,headers])
#result will contain the call's response

stopCodeExecution()

Durante os gatilhos síncronos, você pode interromper a execução do código, reverter todas as alterações e mostrar ao usuário uma mensagem com stopCodeExecution().

if currentData["stage"] == "Done" and currentData["amount"] == 0:
  stopCodeExecution("You can't close deals with no $ amount!")

Generate PDF

Esse método permite que você crie um PDF personalizado a partir de uma string contendo um HTML personalizado, salvando esse arquivo localmente no Jestor. O exemplo abaixo é um gatilho que cria um arquivo PDF e atualiza um registro, adicionando o arquivo em um campo de arquivos.

tableName = 'table'
files = jestor.file(tableName)

html = '''
<body>
    <div class="container">
        <div class="card" id="makepdf"> 
            <h2>Welcome to Jestor</h2>
            <ul>
                <li><h4>We are going to generate a pdf from the area inside the box</h4></li>
                <li><h4>This is an example of generating pdf from HTML during runtime</h4></li>
            </ul>
        </div>
        </div>
</body>
''' 

pdf = jestor.generatePDF([html, "A4", "portrait"])
files.add({'name': 'file_test', 'localFile': pdf})

result = jestor.table(tableName).update(afterSave['id_table'],{'name': 'new record', 'attachments': files.toJson()})