ConnXL Docs

Construir

Referência de funções

Uma função tem dois eixos independentes — o seu tipo (a espécie de fonte de dados contra a qual corre, definido quando escolhes uma ligação) e a sua forma do resultado e modelo de execução, que escolhes no construtor. Esta página é o catálogo completo dos três.

6 min de leitura

Tipos de função

O tipo é inferido a partir da ligação sobre a qual constróis. Cada um mapeia para uma família de fonte de dados; o construtor mostra os campos de que esse tipo precisa (uma consulta SQL, um pedido HTTP, um filtro de coleção, e por aí fora).

  • http — um pedido REST/HTTP: método, template de URL, query, cabeçalhos e corpo, com parâmetros vinculados a partir dos argumentos da fórmula.
  • graphql — uma consulta GraphQL com variáveis contra um endpoint GraphQL.
  • database — uma consulta SQL parametrizada. O dialeto segue a ligação: Postgres, MySQL, SQL Server, Oracle, Azure Synapse ou AWS Athena.
  • mongo — um find, aggregate ou count de MongoDB sobre uma coleção (filtro, pipeline, ordenação, limite).
  • cosmos — uma consulta SQL de Azure Cosmos DB contra um contentor.
  • dynamodb — um get-item ou query de AWS DynamoDB por chave de partição/ordenação.
  • lambda — uma invocação de AWS Lambda com um payload JSON, opcionalmente lendo um campo da resposta.
  • azure_function — uma Azure Function acionada por HTTP.
  • gcp_function — uma Google Cloud Function acionada por HTTP.
  • file — lê um ficheiro remoto (por HTTP(S), S3, SFTP, FTP, Azure Blob ou Google Cloud Storage) analisado como CSV, JSON ou JSONL.
  • kv — uma leitura de uma cache chave-valor (get / mget / scan) contra um armazém compatível com Valkey ou Redis.

Quatro deles — database, mongo, dynamodb e cosmos — também sabem escrever; ver Operações de escrita mais abaixo.

Formas do resultado

A forma decide como o resultado chega à grelha.

  • single — um valor na célula que chama (número, string, booleano).
  • row — um registo ao longo de uma linha de células.
  • table — linhas × colunas que derramam para um intervalo, com cabeçalhos e formatos numéricos mapeados a partir da resposta.
  • json — a resposta JSON em bruto como texto.
  • entity — um tipo de dados ligado de Excel: um chip de célula cujas propriedades se tornam acessores de campo como =A2.Price. Apenas async; estes aparecem sob o separador Tipos de dados do painel de tarefas.

Modelos de execução

  • sync — calculado localmente no suplemento, sem chamada ao agent. Melhor para transformações leves.
  • async — o padrão. O agent obtém enquanto o Excel mostra #GETTING_DATA; o suplemento agrupa muitas chamadas de célula num só pedido.
  • streaming — a célula atualiza-se ao vivo à medida que chegam novos valores. Server-Sent Events no desktop, com um recurso a polling no Excel para a web.

Tipo não é forma do resultado

O tipo (fonte de dados) e a forma do resultado são independentes — uma função database pode devolver um valor único, uma tabela ou uma entidade, e uma função http também pode. Escolhes a fonte uma vez, e depois decides como o seu resultado aparece.

Detalhes do streaming

O bloco stream de uma função streaming controla exatamente como as atualizações chegam à célula:

  • Transportesse (Server-Sent Events) ou polling. SSE só está disponível quando a ligação da função é http — qualquer outro tipo de ligação transmite por polling, e o Excel para a web recorre sempre a polling, já que ligações SSE de longa duração não são fiáveis em todas as sandboxes de navegador. O polling tem o seu próprio intervalo, em segundos; o SSE não tem nenhum — o agent reencaminha os eventos à medida que chegam.
  • emitOnChangeOnly — quando ativo, o agent só envia um valor novo para a célula quando este realmente mudou, em vez de reemitir o mesmo valor a cada tick.
  • cancelUpstream — ativo por predefinição. Quando a célula é apagada ou o utilizador navega para outro sítio, o agent termina a sua subscrição upstream em vez de continuar a fazer polling ou a manter uma ligação aberta para ninguém.

Operações de escrita

Quatro tipos enviam dados no sentido inverso. A operação escolhe-se no construtor, e uma função tem exatamente uma.

FieldTypeDescription
databaseOptional
insertUm INSERT parametrizado de várias linhas numa única tabela. Indicas a tabela de destino e o parâmetro que leva as linhas — um array de objetos — e as colunas são a união das chaves das linhas, escrevendo NULL onde uma linha omite uma chave. Disponível nos nove motores SQL com pool: Postgres, MySQL, MariaDB, SQL Server, Oracle, Azure Synapse, Redshift, TimescaleDB e Supabase.
mongoOptional
insertOne · insertMany · updateMany · deleteManyEscritas de documentos contra uma coleção. Um deleteMany tem de levar filtro — um filtro vazio corresponderia a todos os documentos, por isso é recusado à partida.
dynamodbOptional
put_item · put_itemsput_item escreve um objeto; put_items escreve um array inteiro, em lotes de 25 elementos. Ambos são upserts pela chave da tabela, por isso reescrever uma linha cuja chave já existe substitui-a em vez de acrescentar uma segunda cópia.
cosmosOptional
upsertEscreve o parâmetro de linhas num contentor, indexado por id de documento. Aqui não há consulta — as linhas são o payload.

O caminho SQL nunca monta uma instrução a partir de texto livre: o nome da tabela e cada nome de coluna têm de ser um identificador simples — uma letra ou _ seguida de letras, dígitos e _ — e os valores viajam como parâmetros vinculados. Um cabeçalho do livro não consegue infiltrar SQL numa instrução.

Uma função de escrita é só de taskpane

Toda a função de escrita tem de estar marcada como taskpaneOnly, com a cache de resultados e volatile desligadas — caso contrário a publicação falha. O Excel volta a correr uma função personalizada registada a cada recálculo do livro, por isso uma escrita alcançável a partir de uma célula dispararia outra vez em silêncio e multiplicaria as suas linhas; e um acerto de cache saltaria a escrita por completo. As escritas invocam-se a partir do taskpane — um botão de função, ou um bloco Upload range.

Os carregamentos são seguros de repetir por construção. Cada bloco de um mesmo carregamento leva a mesma identidade (as variáveis ${upload.*} mais abaixo): o insert SQL carimba _upload_id e _chunk em cada linha e substitui esse bloco dentro de uma única transação, o Cosmos deriva os seus ids de documento da identidade do carregamento, e o DynamoDB sobrescreve pela chave da tabela. Voltar a clicar depois de uma falha parcial substitui, portanto, o que já tinha sido escrito em vez de o duplicar.

Sinalizadores de função

Três interruptores independentes, disponíveis seja qual for o tipo:

FieldTypeDescription
volatileOptional
booleanRecalcula sempre que o livro recalcula, não só quando as suas próprias entradas mudam. Mutuamente exclusivo com persistent.
persistentOptional
booleanGuarda em cache o último resultado e reutiliza-o entre recálculos em vez de voltar a correr. Forçado a desativado nas funções streaming.
batchSizeApenas async
integerQuando maior que zero, permite ao agent receber muitas invocações de célula simultâneas como uma única chamada agrupada em vez de um pedido por célula — mais útil para uma coluna de chamadas semelhantes contra uma fonte com limite de taxa.

Variáveis de modelo

Em qualquer texto livre de uma função que seja enviado à fonte de dados — o caminho de um endpoint HTTP, valores de cabeçalhos ou de query, o modelo do body, uma instrução SQL ou o valor predefinido de um parâmetro — podes referenciar variáveis predefinidas com ${...}. O agent resolve-as em cada chamada, do lado do servidor; o workbook nunca vê nem fornece os valores, pelo que não podem ser falsificados a partir de uma célula. Uma referência ${...} desconhecida fica intacta em vez de ser esvaziada.

Integradas — sempre disponíveis

FieldTypeDescription
${today}Optional
stringA data da chamada como YYYY-MM-DD, no fuso horário local do host do agent.
${now}Optional
stringO instante da chamada como carimbo temporal RFC 3339 em UTC (p. ex. 2026-07-10T14:30:00Z).
${timestamp}Optional
stringO instante da chamada em segundos Unix.
${uuid}Optional
stringUm UUID aleatório novo, diferente em cada chamada.

O utilizador com sessão iniciada — ${auth.*}

Resolvidas a partir do token de início de sessão validado do utilizador final. Cada uma é uma cadeia vazia quando ninguém tem sessão iniciada — combina-as com uma ligação user_token ou com o controlo de acesso quando o valor tiver de estar presente.

FieldTypeDescription
${auth.sub}Optional
stringO identificador de sujeito estável do fornecedor para o utilizador — a chave certa para atribuição por utilizador, porque nunca muda mesmo que o email mude.
${auth.email}Optional
stringO endereço de email do utilizador.
${auth.name}Optional
stringO nome de exibição do utilizador.
${auth.picture}Optional
stringO URL do avatar do utilizador, quando o fornecedor o disponibiliza.
${auth.provider}Optional
stringO fornecedor de identidade com que o utilizador iniciou sessão.

Identidade do carregamento — ${upload.*}

Preenchidas apenas quando a chamada vem de um bloco Upload range do taskpane; cadeias vazias caso contrário. Os carregamentos grandes são enviados em blocos, e um clique repetido reenvia a mesma identidade — assim a tua API pode desduplicar por (id, chunk) em vez de armazenar duplicados.

FieldTypeDescription
${upload.id}Optional
stringUm UUID por clique de carregamento, partilhado por todos os blocos desse carregamento.
${upload.chunk}Optional
stringO índice (a partir de 0) deste bloco dentro do carregamento.
${upload.chunks}Optional
stringO número total de blocos do carregamento.
${upload.rows}Optional
stringO número total de linhas de todo o carregamento.

Os valores são escapados conforme o contexto onde aterram (uma instrução SQL escapa de forma diferente de um body JSON), pelo que um nome com aspas não consegue quebrar o pedido.

Nesta página