Executar FileMaker Data API

Executa uma solicitação do FileMaker Data API.

Opções

  • Selecionar todo o conteúdo substitui o conteúdo de um campo ou uma variável. Se você não selecionar essa opção:

    • Para um campo, substitui somente a parte selecionada do campo ativo ou insere os dados no ponto de inserção. O ponto de inserção padrão está após os dados do campo.

    • Para uma variável que não tem dados de container, insere os dados no fim do valor atual da variável. Para uma variável que tem dados de container, substitui o conteúdo da variável.

  • Target especifica o campo no qual inserir o resultado ou a variável que será definida. Se não existir uma variável, essa etapa de script criará uma (consulte Utilização de variáveis).

  • Request é um cálculo que especifica a solicitação como texto. O texto é um objeto JSON no formato descrito abaixo.

Compatibilidade

Produto Compatível

FileMaker Pro

Sim

FileMaker Go

Sim

FileMaker WebDirect

Sim

FileMaker Server

Sim

FileMaker Cloud

Sim

FileMaker Data API

Sim

Publicação na Web personalizada

Sim

Originada na versão

19.0

Descrição

O FileMaker Data API é uma API REST disponível como um serviço da Web para o FileMaker Server e o FileMaker Cloud. Os aplicativos da Web podem usar essa API para enviar solicitações e receber dados no formato JSON dos arquivos hospedados do FileMaker Pro.

Ao usar a mesma funcionalidade subjacente que o FileMaker Data API nos hosts do FileMaker, essa etapa de script permite que um script executado por qualquer produto FileMaker solicite dados no arquivo atual, esteja hospedado ou não, e receba dados no formato JSON. Esta etapa de script não faz uma chamada de serviço Web para um host usando a FileMaker Data API, nem depende de a API estar habilitada em um host. A única semelhança entre esta etapa de script e a FileMaker Data API é que o formato JSON dos dados retornados é o mesmo. A solicitação é um simples objeto JSON, e não a combinação de URL, cabeçalho e corpo de solicitação, exigida pelo FileMaker Data API para usar um serviço da Web do host do FileMaker. O resultado retornado em Target fica no mesmo formato JSON de quando a solicitação é feita, a partir de um host, por meio do FileMaker Data API.

Formato de solicitação

Esta etapa de script é compatível com os seguintes pares chave-valor no objeto JSON especificado pela opção Request . Se uma destas chaves não for especificada na solicitação, o valor padrão será usado.

Chave Valor padrão Descrição

ação

"read"

read, metaData, create, update, delete e duplicate são os valores suportados. Use metaData para recuperar informações sobre tabelas e layouts. Use os outros valores para agir sobre os dados do registro.

versão

"v1"

v1, v2 e vLatest são os valores permitidos. O comportamento e os resultados gerados podem variar de acordo com a versão da API.

layouts

Escolha o nome do layout.

tabelas

Nome da ocorrência de tabela. Obrigatório para as ações metaData de ocorrência de tabela. Funciona como a chavelayouts. Se a ocorrência de tabela for especificada, os metadados para essa tabela serão retornados. Se nenhum nome for especificado, a lista de ocorrências de tabela será retornada.

consulta

todos os registros

Uma matriz de objetos JSON, cada um especificando um campo e os critérios de busca.

recordId

O número de ID exclusivo de um registro. Você não pode especificar uma chave query e uma chave recordId.

classificar

Um objeto JSON que especifica a ordem de classificação dos registros na tabela do layout atual.

desvio

1

O número do primeiro registro em um intervalo de registros na tabela do layout atual.

limite

100

O número máximo de registros que deve ser retornado da tabela do layout atual.

layout.response

valor de layouts

Para recuperar os dados no contexto de um layout diferente, especifique um nome de layout.

portal

todos os portais

Um objeto JSON que especifica um portal.

offset.portal-name

1

O número do primeiro registro em um intervalo de registros em uma gama de registros relacionados. Para portal-name, você precisa especificar o nome do objeto do portal se ele existir. Caso contrário, o nome da tabela relacionada.

limit.portal-name

50

O número máximo de registros relacionados que deve ser retornado. Para portal-name, você precisa especificar o nome do objeto do portal se ele existir. Caso contrário, o nome da tabela relacionada.

fieldData

Um objeto JSON que especifica dados de registro para criar ou atualizar.

portalData

Um objeto JSON que especifica dados de registro relacionados para criar ou atualizar.

modId

(Opcional) Para uma ação de atualização, o ID de modificação do registro a ser atualizado. Se não corresponder ao modId atual do registro, o registro não será modificado.

"options":
{"entrymode":"value"}

"user"

(Opcional) Ao gravar dados, esta etapa de script ignora se a opção Permitir que o usuário ignore durante entrada de dados de um campo está selecionada e usa o valor entrymode. Para valor, use:

  • script: ignore os requisitos de validação de dados de um campo

  • user: siga os requisitos de validação de dados de um campo

Consulte Definição de validação do campo.

"options":
{"prohibitmode":"value"}

"user"

(Opcional) Ao gravar dados, esta etapa de script ignora se a opção Proibir modificação do valor durante a entrada de dados de um campo é selecionada e usa o valor prohibitmode. Para valor, use:

  • script: ignore os requisitos de entrada automática de dados de um campo

  • usuário: siga os requisitos de entrada automática de dados de um campo

Consulte Definição da entrada de dados automática.

Para obter mais informações sobre as chaves listadas acima, consulte os tópicos em "Trabalhar com registros", "Obter metadados" e "Efetuar uma solicitação de pesquisa" no Guia da API do FileMaker Data.

As seguintes chaves são ignoradas:

  • A chave databases é ignorada porque o banco de dados é sempre o que pertence à janela na qual o script está sendo executado.

  • A chave Authorization é ignorada porque os privilégios do script são os do usuário ou de acesso total, caso o script tenha concedido privilégios de acesso total.

  • A chave Content-Type é ignorada porque a solicitação precisa estar no formato JSON.

  • A chavescript e qualquer outra chave que comece com script. são ignoradas. Para executar outro script, use a Etapa de script Realizar script.

Como lidar com erros

O resultado JSON em Destino contém pelo menos uma chave de mensagens com um objeto que contém chaves de message e code. Os valores de code são aqueles definidos em Códigos de erro do FileMaker. A maioria dos valores de message e code são os mesmos que os retornados pelo FileMaker Data API disponível como um serviço da web nos hosts do FileMaker. Alguns erros adicionais são exclusivos para essa etapa de script e ajudam a identificar os problemas ao analisar a opção Request. Esses erros adicionais usam os valores 3, 1708 e 1710 de código, mas usam diversos valores de message diferentes para fornecer mais detalhes sobre o erro.

As funções Get(LastError) e Get(LastErrorDetail) retornam os mesmos valores que nas chaves de código e mensagem, respectivamente. Get(LastErrorLocation) retorna onde o erro ocorreu no script.

Notas

  • Essa etapa de script é executada em sua própria sessão não relacionada ao contexto de qualquer janela ou de um script que possa estar em execução, incluindo o script que executa esta etapa de script. Portanto, use esta etapa de script como se estivesse fazendo uma chamada da API do FileMaker Data para um host pela rede. Como tal, os gatilhos de script e as caixas de diálogo de relatório de erro são desativados enquanto essa etapa de script é executada.

  • Se o arquivo for hospedado pelo FileMaker Server ou pelo FileMaker Cloud, os valores retornados dos campos de container serão URLs que podem ser usadas para buscar o conteúdo dos campos. Se o arquivo for aberto localmente, somente o nome do arquivo no campo de container será retornado.

Exemplo 1

Retorna metadados de todas as ocorrências de tabela não especificando valores na chave tables. Nesse caso, há uma tabela (Products) de origens (ou bases) e duas ocorrências de tabelas (Products e Products_InStock). Este exemplo usa a Função JSONSetElement para criar o objeto JSON na opção Request.

Copiar
Executar FileMaker Data API [ Select ; Target: $$result ; 
JSONSetElement ( "{}" ; 
    [ "action" ; "metaData" ; JSONString ] ; 
    [ "tables" ; "" ; JSONString ] 
) ] 
Definir variável [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "tables"
        [
            {
                "baseTable" : "Products",
                "name" : "Products"
            },
            {
                "baseTable" : "Products",
                "name" : "Products_InStock"
            }
        ]
    }
}

Exemplo 2

Com base no layout de Products, retorna o primeiro registro no conjunto atual encontrado.

Copiar
Executar FileMaker Data API [ Select ; Target: $$result ; 
JSONSetElement ( "{}" ; 
    [ "layouts" ; "Products" ; JSONString ] ;
    [ "limit" ; 1 ; JSONNumber ]
 ) ] 
Definir variável [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB1",
                    "Name" : "Donuts",
                    "Stock" : 43
                },
                "modId" : "6",
                "portalData" : {},
                "recordId" : "1"
            }
        ],
        "dataInfo"
        {
            "database" : "Favorite Bakery",
            "foundCount" : 3,
            "layout" : "Products",
            "returnedCount" : 1,
            "table" : "Products",
            "totalRecordCount" : 3
        }
    }
}

Exemplo 3

Com base no layout de Products, realiza uma busca por registros em que o campo Stock seja menor do que 40 e retorna o conjunto encontrado, organizado em ordem decrescente no campo Stock.

Copiar
Executar FileMaker Data API [ Select ; Target: $$result ; 
JSONSetElement ( "{}" ; 
    [ "layouts" ; "Products" ; JSONString ] ;
    [ "query" ; "[ { \"Stock\":\"<40\" } ]" ; JSONArray ] ; 
    [ "sort" ; "[ { \"fieldName\":\"Stock\" ,                                       
                    \"sortOrder\":\"descend\" } ]" ; JSONArray ]
) ] 
Definir variável [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB3",
                    "Name" : "Baguette",
                    "Stock" : 34
                },
                "modId" : "1",
                "portalData" : {},
                "recordId" : "7"
            },
            {
                "fieldData"
                {
                    "ID" : "FB2",
                    "Name" : "Chocolate Cake",
                    "Stock" : 23
                },
                "modId" : "1",
                "portalData" : {},
                "recordId" : "6"
            }
        ],
        "dataInfo"
        {
            "database" : "Favorite Bakery",
            "foundCount" : 2,
            "layout" : "Products",
            "returnedCount" : 2,
            "table" : "Products",
            "totalRecordCount" : 3
        }
    }
}

Exemplo 4

Com base no layout de Products, retorna o primeiro registro na tabela associada ao layout de Products e, se houver linhas do portal, retorna os primeiros 2 registros depois de pular os 2 primeiros.

Copiar
Executar FileMaker Data API [ Selecionar ; Destino: $$result ; 
JSONSetElement ( "{}" ; 
    [ "layouts" ; "Products" ; JSONString ] ;
    [ "limit" ; 1 ; JSONNumber ] ;
    [ "['limit.RelatedProducts']" ; 2; JSONNumber ] ; 
    [ "['offset.RelatedProducts']" ; 2 ; JSONNumber ]
) ]
Definir variável [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB1",
                    "Name" : "Donuts",
                    "Stock" : 43
                },
                "modId" : "6",
                "portalData" : {
                    "RelatedProducts" :
                    [
                        {
                            "ID" : "FB4",
                            "Name" : "Donut Holes",
                            "Stock" : 53
                        },
                        {
                            "ID" : "FB5",
                            "Name" : "Short Cake",
                            "Stock" : 15
                        }
                    ]
                },
                "recordId" : "1"
            }
        ],
        "dataInfo"
        {
            "database" : "Favorite Bakery",
            "foundCount" : 3,
            "layout" : "Products",
            "returnedCount" : 1,
            "table" : "Products",
            "totalRecordCount" : 6
        }
    }
}

Exemplo 5

Com base no layout Produtos, modifica o registro especificado por recordId, atualizando os valores dos campos Estoque e Nome.

Copiar
Execute FileMaker Data API [ Select ; Target: $$result ; 
JSONSetElement ( "{}" ; 
    [ "action" ; "update" ; JSONString ] ;
    [ "layouts" ; "Products" ; JSONString ] ;
    [ "recordId" ; "4" ; JSONString ] ;
    [ "fieldData" ; "{ \"Estoque\" : 14 , 
       \"Nome\" : \"Bolo de baunilha, grande\" }" ; JSONObject ] 
) ]
Set Variable [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
    "mensagens"
    [
        {
            "código" : "0",
            "mensagem" : "OK"
        }
    ],
    "resposta"
    {
        "modId" : "6"
    }
}

Se o registro especificado por recordId não existisse, Get(LastError) retornaria 101 e Get(LastErrorDetail) retornaria "Registro ausente", que seria o mesmo que código e mensagem em $$result.

Exemplo 6

Com base no layout Produtos, cria um registro e define os valores dos campos Estoque, ID e Nome. Como o campo ID está definido para inserir automaticamente um número de série e a opção Proibir modificação do valor durante a entrada de dados está ativada, definir a chave prohibitmode como script no objeto options substitui esse requisito de entrada automática e define o campo de ID conforme especificado.

Copiar
Executar FileMaker Data API [ Selecionar ; Destino: $$result ; 
        JSONSetElement ( "{}" ; 
        [ "action" ; "create" ; JSONString ] ;
        [ "layouts" ; “Products" ; JSONString ] ;
        [ "options" ; "{ \"prohibitmode\" : \"script\" }" ; JSONObject ] ;
        [ "fieldData" ; "{ \”Estoque\" : 14 , 
           \"ID\" : \"FB42\" ,
           \”Nome\" : \"Croissants\" }" ; JSONObject ] 
        ) ]
        Definir variável [ $$result ; JSONFormatElements ( $$result ) ]

Os dados JSON retornados na variável global $$result têm este formato.

Copiar
{
        "messages"
        [
           {
               "code" : "0",
               "message" : "OK"
           }
        ],
        "response"
        {
           "modId" : "0",
           "recordId" : "7"
        }
        }

Se o campo ID também tivesse uma validação definida para exigir um valor exclusivo e um registro com o valor de ID de "FB42" já existisse, então Get(LastError) retornaria 504 e Get(LastErrorDetail) retornaria "O valor no campo não é exclusivo, conforme exigido nas opções de entrada de validação", o que seria o mesmo que code e message em $$result.