Exécuter FileMaker Data API

Exécute une requête FileMaker Data API.

Options 

  • Sélectionner tout le contenu remplace l'intégralité du contenu d'une rubrique ou d'une variable. Si vous ne sélectionnez pas cette option :

    • Dans le cas d'une rubrique, cette action remplace uniquement la partie sélectionnée de la rubrique active ou insère des données au point d'insertion. Par défaut, le point d'insertion se situe à la fin des données de la rubrique.

    • Dans le cas d'une variable qui ne contient aucune donnée de type Conteneur, cette action insère des données à la fin de la valeur actuelle de la variable. Dans le cas d'une variable qui contient des données de type Conteneur, cette action remplace son contenu.

  • Cible indique la rubrique dans laquelle insérer le résultat ou la variable à définir. Si la variable n'existe pas, cette action de script en crée une (consultez la section Utilisation de variables).

  • Requête est un calcul qui indique la requête sous forme de texte. Le texte est un objet JSON au format décrit ci-dessous.

Compatibilité 

Produit Prise en charge

FileMaker Pro

Oui

FileMaker Go

Oui

FileMaker WebDirect

Oui

FileMaker Server

Oui

FileMaker Cloud

Oui

FileMaker Data API

Oui

Publication Web personnalisée

Oui

Provient de la version 

19.0

Description 

FileMaker Data API est une API REST disponible sous forme de service Web pour FileMaker Server et FileMaker Cloud. Les applications Web peuvent utiliser cette API pour envoyer des requêtes et recevoir des données au format JSON de fichiers FileMaker Pro hébergés.

Utilisant la même fonctionnalité sous-jacente que FileMaker Data API sur les hôtes FileMaker, cette action de script permet à tout produit FileMaker d'exécuter un script pour demander des données du fichier actif (hébergé ou non) et les recevoir au format JSON. Cette action de script ne fait pas un appel de service Web à un hôte via la FileMaker Data API, et ne dépend pas non plus du fait que l'API soit activée sur un hôte. La similitude entre cette action de script et la FileMaker Data API se trouve uniquement dans le fait que le format JSON des données renvoyées est le même. La requête est un simple objet JSON, au lieu de la combinaison d'une URL, d'un en-tête et d'un corps de requête requise par FileMaker Data API pour utiliser le service Web d'un hôte FileMaker. Le résultat renvoyé dans Cible est au même format JSON que lorsqu'il est demandé depuis un hôte via FileMaker Data API.

Format de requête

Cette action de script prend en charge les paires clé-valeur suivantes dans l'objet JSON spécifié par l'option Requête. Si l'une des ces clés n'est pas spécifiée dans la requête, la valeur par défaut est utilisée.

Clé Valeur par défaut Description

action

"read"

read, metaData, create, update, delete et duplicate sont les valeurs prises en charge. Utilisez metaData pour récupérer des informations sur les tables et les modèles. Utilisez les autres valeurs pour agir sur les données d'enregistrement.

version

"v1"

Les valeurs v1, v2 et vLatest sont prises en charge. Le comportement et les résultats générés diffèrent selon la version API.

layouts

 

Un nom de modèle.

tables

 

Un nom d'occurrence de table. Requis pour les actions metaData d'occurrence de table. Fonctionne comme la clé layouts. Si l'occurrence de table est spécifiée, les métadonnées de cette table sont renvoyées. Si aucun nom n'est spécifié, la liste des occurrences de table est renvoyée.

query

tous les enregistrements

Un tableau d'objets JSON, chacun spécifiant une rubrique et des critères de recherche.

recordId

 

L'ID (numéro d'identification) unique d'un enregistrement. Vous ne pouvez pas spécifier à la fois une clé query et une clé recordId.

sort

 

Un objet JSON qui spécifie l'ordre de tri des enregistrements dans la table du modèle actif.

offset

1

Le numéro d'enregistrement du premier enregistrement dans une plage d'enregistrements de la table du modèle actif.

limit

100

Le nombre maximum d'enregistrements à renvoyer de la table du modèle actif.

layout.response

valeur de layouts

Spécifiez un nom de modèle pour récupérer les données dans le cadre d'un autre modèle.

portal

toutes les tables externes

Un objet JSON qui spécifie une table externe.

offset.nom-table-externe

1

Le numéro d'enregistrement du premier enregistrement de la table externe dans une plage d'enregistrements liés. Pour nom-table-externe, vous devez spécifier le nom d'objet de la table externe, s'il existe, sinon le nom de la table liée.

limit.nom-table-externe

50

Le nombre maximum d'enregistrements liés à renvoyer. Pour nom-table-externe, vous devez spécifier le nom d'objet de la table externe, s'il existe, sinon le nom de la table liée.

fieldData

 

Un objet JSON qui spécifie les données d'enregistrement à créer ou à mettre à jour.

portalData

 

Un objet JSON qui spécifie les données d'enregistrement lié à créer ou à mettre à jour.

modId

 

(Facultatif) Pour une action de mise à jour, l'ID de modification de l'enregistrement à mettre à jour. S'il ne correspond pas au modId actuel de l'enregistrement, ce dernier ne sera pas modifié.

"options":
{"entrymode":"valeur"}

"user"

(Facultatif) Lors de l'écriture de données, cette action de script ignore si l'option Autoriser les modifications utilisateur d'une rubrique est sélectionnée et utilise la valeur entrymode à la place. Pour valeur, utilisez :

  • script : ignorer les exigences de validation des données d'une rubrique

  • user : suivre les exigences de validation des données d'une rubrique

Consultez la section Définition de la validation des rubriques.

"options":
{"prohibitmode":"valeur"}

"user"

(Facultatif) Lors de l'écriture de données, cette action de script ignore si l'option Entrées auto. non modifiables lors de la saisie d'une rubrique est sélectionnée et utilise la valeur prohibitmode à la place. Pour valeur, utilisez :

  • script : ignorer les exigences de saisie automatique de données d'une rubrique

  • user : suivre les exigences de saisie automatique des données d'une rubrique

Consultez la section Définition de l'entrée automatique de données.

Pour plus d'informations sur les clés énumérées ci-dessus, consultez les sections « Utiliser les enregistrements », « Obtenir des métadonnées » et «  Effectuer une requête de recherche » dans le guide de FileMaker Data API.

Les clés suivantes sont ignorées :

  • La clé databases est ignorée car la base de données est toujours celle appartenant à la fenêtre dans laquelle est exécuté le script.

  • La clé Authorization est ignorée car les privilèges du script sont ceux de l'utilisateur actif ou d'accès intégral, si le script actif s'est vu accordé des privilèges d'accès intégral.

  • La clé Content-Type est ignoré car la requête doit être au format JSON.

  • La clé script et toute clé commençant par script. sont ignorées. Pour exécuter un autre script, utilisez l'action de script Exécuter script.

Gestion des erreurs

Le résultat JSON dans Cible contient au moins une clé messages avec un objet contenant les clés message et code. Les valeurs de clé code sont celles définies dans la section Codes d'erreur FileMaker. La plupart des valeurs de clé message et code sont identiques à celles renvoyées par FileMaker Data API disponible sous forme de service Web sur les hôtes FileMaker. Certaines erreurs supplémentaires sont propres à cette action de script et permettent d'identifier les problèmes lors de l'analyse de l'option Requête. Ces erreurs supplémentaires utilisent les valeurs de clé code de 3, 1708 et 1710 mais différentes valeurs de clé message pour fournir plus d'informations sur l'erreur.

Les fonctions Obtenir ( DernièreErreur ) et Obtenir ( DétailDernièreErreur ) renvoient respectivement les mêmes valeurs que dans les clés code et message. Obtenir ( EmplacementDernièreErreur ) renvoie l'endroit où l'erreur s'est produite dans le script.

Remarques 

  • Cette action de script s'exécute dans sa propre session sans rapport avec le contexte d'une fenêtre ou d'un script qui peut être en cours d'exécution, y compris le script qui exécute cette action de script. Par conséquent, utilisez cette action de script comme si vous effectuiez un appel FileMaker Data API vers un hôte sur le réseau. En tant que tel, les déclencheurs de script et toutes les boîtes de dialogue de rapport d'erreur sont désactivés pendant l'exécution de cette action de script.

  • Si le fichier est hébergé par FileMaker Server ou FileMaker Cloud, les valeurs renvoyées des rubriques Conteneur sont des URL pouvant être utilisées pour récupérer le contenu de rubrique. Si le fichier est ouvert en local, seul le nom du fichier dans la rubrique Conteneur est renvoyé.

Exemple 1 

Renvoie les métadonnées de toutes les occurrences de table en ne spécifiant aucun valeur pour la clé tables. Dans ce cas, il y a une table source ou de base (Produits) et deux occurrences de table (Produits et Produits_EnStock). Cet exemple utilise la fonction JSONSetElement pour créer l'objet JSON dans l'option Requête.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$result ; 
JSONSetElement ( "{}" ; 
    [ "action" ; "metaData" ; JSONString ] ; 
    [ "tables" ; "" ; JSONString ]
) ] 
Définir variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

Copier
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "tables"
        [
            {
                "baseTable" : "Produits",
                "name" : "Produits"
            },
            {
                "baseTable" : "Produits",
                "name" : "Produits_EnStock"
            }
        ]
    }
}

Exemple 2 

Renvoie le premier enregistrement de la table associée au modèle Produits, en fonction de celui-ci.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$result ;
JSONSetElement ( "{}" ;
    [ "layouts" ; "Produits" ; JSONString ] ;
    [ "limit" ; 1 ; JSONNumber ]
) ]
Définir variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

Copier
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB1",
                    "Name" : "Donuts",
                    "Stock" : 43
                },
                "modId" : "6",
                "portalData" : {},
                "recordId" : "1"
            }
        ],
        "dataInfo"
        {
            "database" : "Boulangerie préférée",
            "foundCount" : 3,
            "layout" : "Produits",
            "returnedCount" : 1,
            "table" : "Produits",
            "totalRecordCount" : 3
        }
    }
}

Exemple 3 

En fonction du modèle Produits, effectue une recherche d'enregistrements où la rubrique Stock est inférieure à 40, et renvoie le jeu d'enregistrements trouvés trié par ordre décroissant selon la rubrique Stock.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$result ;
JSONSetElement ( "{}" ;
    [ "layouts" ; "Produits" ; JSONString ] ;
    [ "query" ; "[ { \"Stock\":\"<40\" } ]" ; JSONArray ] ;
    [ "sort" ; "[ { \"fieldName\":\"Stock\" ,
                    \"sortOrder\":\"descend\" } ]" ; JSONArray ]
) ]
Définir variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

Copier
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB3",
                    "Name" : "Baguette",
                    "Stock" : 34
                },
                "modId" : "1",
                "portalData" : {},
                "recordId" : "7"
            },
            {
                "fieldData"
                {
                    "ID" : "FB2",
                    "Name" : "Gâteau au chocolat",
                    "Stock" : 23
                },
                "modId" : "1",
                "portalData" : {},
                "recordId" : "6"
            }
        ],
        "dataInfo"
        {
            "database" : "Boulangerie préférée",
            "foundCount" : 2,
            "layout" : "Produits",
            "returnedCount" : 2,
            "table" : "Produits",
            "totalRecordCount" : 3
        }
    }
}

Exemple 4 

En fonction du modèle Produits, renvoie le premier enregistrement de la table associée à celui-ci et, en cas de rangées de table externe, renvoie les deux premiers enregistrements après avoir ignoré les deux premiers.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$result ;
JSONSetElement ( "{}" ; 
    [ "layouts" ; "Produits" ; JSONString ] ; 
    [ "limit" ; 1 ; JSONNumber ] ; 
    [ "['limit.RelatedProducts']" ; 2 ; JSONNumber ] ; 
    [ "['offset.RelatedProducts']" ; 2 ; JSONNumber ]
) ]
Définir variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

Copier
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "data"
        [
            {
                "fieldData"
                {
                    "ID" : "FB1",
                    "Name" : "Donuts",
                    "Stock" : 43
                },
                "modId" : "6",
                "portalData" : {
                    "RelatedProducts" :
                    [
                        {
                            "ID" : "FB4",
                            "Name" : "Beignets",
                            "Stock" : 53
                        },
                        {
                            "ID" : "FB5",
                            "Name" : "Short Cake",
                            "Stock" : 15
                        }
                    ]
                },
                "recordId" : "1"
            }
        ],
        "dataInfo"
        {
            "database" : "Boulangerie préférée",
            "foundCount" : 3,
            "layout" : "Produits",
            "returnedCount" : 1,
            "table" : "Produits",
            "totalRecordCount" : 6
        }
    }
}

Exemple 5 

Sur la base du modèle Produits, modifie l'enregistrement spécifié par recordId, en mettant à jour les valeurs des rubriques Stock et Name.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$résultat ;
JSONSetElement ( "{}" ;
    [ "action" ; "update" ; JSONString ] ;
    [ "layouts" ; "Products" ; JSONString ] ;
    [ "recordId" ; "4" ; JSONString ] ;
    [ "fieldData" ; "{ \"Stock\" : 14 ,
    \"Name\" : \"Gâteau à la vanille, grand\" }" ; JSONObject ]
) ]
Définir la variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

Copier
{
    "messages"
    [
        {
            "code" : "0",
            "message" : "OK"
        }
    ],
    "response"
    {
        "modId" : "6"
    }
}

Si l'enregistrement spécifié par recordId n'existait pas, Obtenir ( DernièreErreur ) renverrait 101 et Obtenir ( DétailDernièreErreur ) renverrait « Enregistrement manquant », ce qui serait la même chose que code et message dans $$result.

Exemple 6 

En fonction du modèle Produits, crée un enregistrement et définit les valeurs des rubriques Stock, ID et Name. Comme la rubrique ID est définie pour saisir automatiquement un numéro de série et l'option Entrées auto. non modifiables lors de la saisie est activée, la définition de la clé prohibitmode sur script dans l'objet options remplace cette exigence de saisie automatique et définit la rubrique ID comme spécifié.

Copier
Exécuter FileMaker Data API [ Sélectionner ; Cible: $$result ; 
        JSONSetElement ( "{}" ; 
        [ "action" ; "create" ; JSONString ] ;
        [ "layouts" ; "Produits" ; JSONString ] ;
        [ "options" ; "{ \"prohibitmode\" : \"script\" }" ; JSONObject ] ;
        [ "fieldData" ; "{ \"Stock\" : 14 , 
           \"ID\" : \"FB42\" ,
           \"Name\" : \"Croissants\" }" ; JSONObject ] 
        ) ]
        Définir variable [ $$result ; JSONFormatElements ( $$result ) ]

Les données JSON renvoyées dans la variable globale $$result ont ce format.

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

Si la rubrique ID avait également un ensemble de validation pour exiger une valeur unique et qu'un enregistrement avec la valeur d'ID « FB42 » existait déjà, alors Obtenir ( DernièreErreur ) renverrait 504 et Obtenir ( DétailDernièreErreur ) renverrait « La valeur de la rubrique ne correspond pas à la valeur définie dans les options d'entrée », ce qui serait la même chose que code et message dans $$result.