Interrogation de ProScope au travers d’API - v2.0.2

Interrogation de ProScope au travers d’API - v2.0.2

L’objectif du présent module est de permettre l’accès aux données de ProScope par des logiciels extérieurs grâce à une API REST/JSON.

 Pour qu’un accès extérieur soit possible, il suffit que le serveur http soit démarré sur ProScope Serveur. Pour que cela soit stocké dans les préférences, cela s’effectue dans le sous-menu Propriétés utilisateur pour fichier de données de l’article Propriétés de la base du menu Fichier :

 

 

Dans ce cas le serveur Web sera démarré lors du prochain redémarrage de ProScope Server.

 Note : pour démarrer le serveur Web de manière immédiate sans quitter ProScope Server, vous pouvez aller dans l’icône Serveur http de la console d’administration et cliquer sur le bouton . 

 Une fois le serveur http démarré sur ProScope Server, il faut habiliter des utilisateurs à se connecter depuis un logiciel extérieur en paramétrant :

  1. Un compte pour cet utilisateur,
  2. Un mot de passe,
  3. En cochant la case  dans le premier onglet de la fiche Personnel.

Connexion

 Avant toute interrogation de la base, il est nécessaire de se connecter et d’obtenir un token ayant une durée de validité de 10 minutes. Cette durée est prorogée de 10 minutes complémentaires à chaque requête réussie.

 La requête de connexion passe par l’API WebSyncGetToken.

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

 localhost:8080/WebSyncGetToken?Login=aaa&PW=bbb

  1. Si la requête n’aboutit pas ou est mal formée, la réponse de ProScope Server sera :

{"result":"notOK","error":"bad info"}

  1. Si la requête est correct et aboutit, la réponse de ProScope Server sera :

{"result":"OK","token":"DE137395FD2F4E73AA6A0FA8E3461A9C"}

 C’est ce token qu’il faudra ensuite utiliser pour vos futures requêtes.

 Interrogation et écriture dans la base

Le module d’interrogation de ProScope se compose pour l’instant de quatre requêtes HTTP Get et quatre requêtes HTTP Post :

  1. WebSyncGetTablesList : permet d’obtenir la liste des tables de ProScope,
  2. WebSyncGetTableFieldsList : permet d’obtenir la liste des champs d’une table,
  3. WebSyncGetTableRecordsList : permet d’obtenir les clés primaires d’une table,
  4. WebSyncGetRecord : permet d’obtenir un enregistrement.
  5. WebSyncTableIsWritable : permet de savoir si on peut écrire dans la table.
  6. WebSyncIsDeletableRecord : permet de savoir si on effacer un enregistrement.
  7. WebSyncSearch ($json) : permet d’effectuer une recherche
  8. WebSyncNewRecord ($json) : permet de créer un enregistrement
  9. WebSyncUpdateRecord ($json) : permet de mettre à jour un enregistrement
  10. WebSyncDeleteRecord ($json) : permet de supprimer un enregistrement
  11. WebSyncGetRecordsListPK ($json) : permet de retourner une liste d’enregistrements correspondants aux clés primaires passées en paramètres 

Leur utilisation s’effectue de la manière suivante :

WebSyncGetTablesList

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

 http://localhost:8080/WebSyncGetTablesList?token=DE137395FD2F4E73AA6A0FA8E3461A9C

 Donnera en données brutes :

 {"tableList":[{"name":"Vide","ID":1},{"name":"Parametres","ID":2},{"name":"Produit","ID":3},{"name":"Client_Fournisseur","ID":4},{"name":"Interlocuteur","ID":5},{"name":"Personnel","ID":6},{"name":"Salle","ID":7},{"name":"Materiel","ID":8},{"name":"Demande_De_Preparation","ID":9},{"name":"Affaire","ID":10},{"name":"Devis","ID":11},{"name":"Ligne_Devis","ID":12},{"name":"Etat_Affaire_Semaine","ID":13},{"name":"Feuille_Travail","ID":14},{"name":"Ligne_Travail","ID":15},{"name":"Produit_Principaux_Salle","ID":16},…

 Ou en données formatées :

 

 WebSyncGetTableFieldsList

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

 http://localhost:8080/WebSyncGetTableFieldsList?token= DE137395FD2F4E73AA6A0FA8E3461A9C &tableID=6

 Donnera en données brutes :

 {"fieldList":[{"name":"Abrege","ID":1,"type":"Alpha"},{"name":"Code","ID":2,"type":""},{"name":"Nom","ID":3,"type":"Alpha"},{"name":"Prenom","ID":4,"type":"Alpha"},{"name":"Service","ID":5,"type":"Alpha"},{"name":"Commentaire","ID":6,"type":"texte"},{"name":"Telecopie","ID":7,"type":"Alpha"},{"name":"Fonction1","ID":8,"type":"Alpha"},{"name":"Fonction2","ID":9,"type":"Alpha"},{"name":"Fonction3","ID":10,"type":"Alpha"},{"name":"Adresse1","ID":11,"type":"Alpha"},{"name":"Adresse2","ID":12,"type":"Alpha"},{"name":"Code_Postal","ID":13,"type":"Alpha"},{"name":"Ville","ID":14,"type":"Alpha"},{"name":"Pays","ID":15,"type":"Alpha"},{"name":"Numero_Securite_Sociale","ID":16,"type":"Alpha"},{"name":"Date_Naissance","ID":17,"type":"Date"},{"name":"Lieu_Naissance","ID":18,"type":"Alpha"},{"name":"Nationalite","ID":19,"type":"Alpha"},{"name":"Situation_Familiale","ID":20,"type":"Alpha"},…



 Ou en données formatées :

 

 

WebSyncGetTableRecordsList

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

 http://localhost:8080/WebSyncGetTableRecordsList?token=DD4658D39C7C41989853719C5A5FC162&tableID=6

 Donnera en données brutes :

 {"recordsUUID":[1,3,7,10,19,21,33,37,39,43,47,56,57,60,61,69,72,73,74,75,78,81,82,83,87,90,93,94,97,100,102,103,105,109,116,133,134,147,150,184,204,206,228,232,240,261,263,267,268,285,290,304,311,317,320,331,332,336,353,354,358,372,373,383,392,394,396,397,398],"result":"OK","error":"","length":69,"duration":10}

 Ou en données formatées :

 

 

WebSyncGetRecord

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

 http://localhost:8080/WebSyncGetRecord?token=227E2349BDF81148ADACE04B4169C751&tableID=6&RecordUUID=49

 Donnera en données brutes :

 {"record":{"Abrege":"MA","Code":72,"Nom":"AITING","Prenom":"Marc","Service":"","Commentaire":"","Telecopie":"","Fonction1":"Responsable d'exploitation","Fonction2":"Monteur(se)","Fonction3":"Assistant(e) Monteur","Adresse1":"14 rue des bigornos","Adresse2":"","Code_Postal":"22700","Ville":"Perros-Direct","Pays":"France","Numero_Securite_Sociale":"163107858904297","Date_Naissance":"1963-10-14T23:00:00.000Z","Lieu_Naissance":"Tenons-Les-Bien","Nationalite":"Française","Situation_Familiale":"Variable","Nombre_Enfant_Charge":5,…



 Ou en données formatées :

 

 

WEBSyncTableIsWritable

Cette requête permet de savoir si on a le droit d’écrire dans la table concernée.

Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncTableIsWritable?token=227E2349BDF81148ADACE04B4169C751&tableID=2

 

Donnera en données brutes :

{
      "status": {
            "isWritable": true,
            "why": "allAllowed"
      }
}
 

En cas de refus on obtiendra

{
      "status": {
            "isWritable": false,
            "why": "table interdite : parceque"
      }
} 

WebSyncIsDeletableRecord

Cette requête permet de savoir si on a le droit de supprimer un enregistrement.

Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncIsDeletableRecord?token=227E2349BDF81148ADACE04B4169C751&tableID=2&recordUUID=12

 Donnera en données brutes :

{
      "status": {
            "isDeletable": true,
            "why": "raison"
      }
}

WebSyncSearch (nécessite un Json dans le body de la requête)

Cette requête permet d’effectuer des recherches et de récupérer les champs demandés. 

Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncSearch?token=227E2349BDF81148ADACE04B4169C751 

Le body de la requête devra être structuré de la manière suivante :

{
      "searchParameters": [
            {
                  "table": 2,
                  "searchFieldID": 3,
                  "operator": "&",
                  "test": "=",
                  "valueText": "Camus@"
            },
            {
                  "table": 2,
                  "searchFieldID": 4,
                  "operator": "&",
                  "test": "=",
                  "valueText": "Arthur"
            },
            {
                  "table": 2,
                  "searchFieldID": 3,
                  "operator": "|",
                  "test": "=",
                  "valueText": "Dupont"
            }
      ],
      "resultsFormat": [
            {
                  "table": 2,
                  "field": 3
            },
            {
                  "table": 2,
                  "field": 4
            },
            {
                  "table": 2,
                  "field": 60
            },
            {
                  "table": 2,
                  "field": 2
            }
      ]
}

 Donnera en données brutes :
[
      {
            "Code": 10,
            "Nom": "Camusi",
            "Prenom": "Arthur",
            "Carte_Travail_Date_Delivrance": "0000-00-00"
      },
      {
            "Code": 8,
            "Nom": "Camusi",
            "Prenom": "Arthur",
            "Carte_Travail_Date_Delivrance": "0000-00-00"
      },
      {
            "Code": 7,
            "Nom": "Dupont",
            "Prenom": "De Force",
            "Carte_Travail_Date_Delivrance": "0000-00-00"
      },
      {
            "Code": 12,
            "Nom": "Camusi",
            "Prenom": "Arthur",
            "Carte_Travail_Date_Delivrance": "0000-00-00"
      }
]

WebSyncNewRecord (nécessite un Json dans le body de la requête)

Cette requête permet de créer un ou plusieurs enregistrements.

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncNewRecord?token=227E2349BDF81148ADACE04B4169C751

Le body de la requête devra être structuré en json de la manière suivante :

{
      "tableID": 2,
      "toUpdate": [
            {
                  "Code": 1,
                  "Nom": "Camusi",
                  "Prenom": "Arthur",
                  "Nationalite": "Martien",
                  "Service": "Placard d'argent"
            },
            {
                  "Code": 2,
                  "Nom": "Camusu",
                  "Prenom": "De Force",
                  "Nationalite": "Tudesque",
                  "Lieu_Naissance": "Cucuron-les-Olives"
            }
      ]
}
 

Remarques :

  1. Si la clef primaire est passée, elle sera ignorée, c’est 4D qui attribue les clefs.
  2. Il est possible de créer plusieurs enregistrements en une fois, toUpdate étant un tableau d’objet

 Donnera en données brutes :

{
      "status": "",
      "Updates": [
            {
                  "Nom": "Camusi",
                  "Prenom": "Arthur3",
                  "Nationalite": "Martien",
                  "Service": "Placard d'argent",
                  "Code": 19,
                  "status": {
                        "success": true,
                        "autoMerged": false
                  },
                  "error": []
            },
            {
                  "Nom": "Camusu",
                  "Prenom": "De Force2",
                  "Nationalite": "Tudesque",
                  "Lieu_Naissance": "Cucuron-les-Olives",
                  "Code": 20,
                  "status": {
                        "success": true,
                        "autoMerged": false
                  },
                  "error": []
            }
      ]
}

 WEBSyncUpdateRecord (nécessite un Json dans le body de la requête) 

Cette requête permet de créer un ou plusieurs enregistrements.

Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncUpdateRecord?token=227E2349BDF81148ADACE04B4169C751

Le body de la requête devra être structuré en json de la manière suivante :

{
      "tableID": 6,
      "toUpdate": [
            {
                  "Code": 1,
                  "Nom": "Camus",
                  "Prenom": "Albert234",
                  "Nationalite": "Martien",
                  "Service": "Placard d'argent"
            },
            {
                  "Code": 2,
                  "Nom": "Camus",
                  "Prenom": "Zeus",
                  "Nationalite": "Tudesque",
                  "Lieu_Naissance": "Cucuron-les-Olives"
            }
      ]
}

 Remarques :

  1. Il est possible de mettre plusieurs enregistrements à jour en une fois, toUpdate étant un tableau d’objet

 WebSyncDeleteRecord (nécessite un Json dans le body de la requête)

Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncDeleteRecord?token=227E2349BDF81148ADACE04B4169C751

 Le body de la requête devra être structuré de la manière suivante :

{
      "forceDrop": false,
      "searchParameters": [
            {
                  "table": 2,
                  "pkValue": 10
            },
            {
                  "table": 2,
                  "pkValue": 18
            },
            {
                  "table": 2,
                  "pkValue": 17
            }
      ]
}

Donnera en données brutes :
{
      "status": "",
      "Deletion": [
            {
                  "deletion": {
                        "success": true
                  },
                  "status": "Deletion done for record: 10"
            },
            {
                  "deletion": {
                        "success": true
                  },
                  "status": "Deletion done for record: 18"
            },
            {
                  "deletion": {
                        "success": true
                  },
                  "status": "Deletion done for record: 17"
            }
      ]
}

WebSyncGetRecordsListPK (nécessite un Json dans le body de la requête)

Cette requête permet de lire un ou plusieurs enregistrements en passant sa/leurs clefs primaires.

 Exemple d’appel (sur la même machine que le serveur et sur le port 8080) :

http://localhost:8080/WebSyncGetRecordsListPK?token=227E2349BDF81148ADACE04B4169C751

 Le body de la requête devra être structuré de la manière suivante :

{
      "searchParameters": [
            {
                  "table": 2,
                  "pkValue": 7
            },
            {
                  "table": 2,
                  "pkValue": 14
            },
            {
                  "table": 2,
                  "pkValue": 16
            }
      ],
      "resultsFormat": [
            {
                  "table": 2,
                  "field": 3
            },
            {
                  "table": 2,
                  "field": 4
            },
            {
                  "table": 2,
                  "field": 60
            },
            {
                  "table": 2,
                  "field": 2
            }
      ]
}
 Donnera en données brutes :
{
      "results": [
            {
                  "Code": 7,
                  "Nom": "Dupont",
                  "Prenom": "De Force",
                  "Carte_Travail_Date_Delivrance": "0000-00-00"
            },
            {
                  "Code": 14,
                  "Nom": "Camusi",
                  "Prenom": "Arthur3",
                  "Carte_Travail_Date_Delivrance": "0000-00-00"
            },
            {
                  "Code": 16,
                  "Nom": "Camusi",
                  "Prenom": "Arthur3",
                  "Carte_Travail_Date_Delivrance": "0000-00-00"
            }
      ],
      "errors": []
}

    • Related Articles

    • Liste des codes Service de santé au travail

      La liste disponible en pièce jointe provient des services de l'URSSAF DPAE-Liste-Services-sante-au-travail-2022.pdf (urssaf.fr)
    • Procédure de mise à jour - ProScope v18.x vers v18.x

      Matrice de certification de ProScope v18.x : Macintosh Version Compatibilité macOS 10.13.x "High Sierra" Compatible macOS 10.14.x "Mojave" Certifié macOS 10.15.x "Catalina" Certifié macOS 11.x "Big Sur" Certifié macOS 12.x "Monterrey" Compatible ...
    • Modèle de Feuilles de Travail

      Introduction Jusqu’à présent les codes produits étaient liés à une salle à travers le code "Attachement salle". Les feuilles de travail contenaient alors par défaut les codes produits afférents à une salle dont le lien s’effectuait à travers ...
    • Tableau de bord d'affaire

      Préambule Il existe depuis longtemps dans ProScope une édition spécifique aux affaires nommées Tableau de bord. Elle permet d’obtenir une analyse des produits et des charges sous forme d’une édition. Les inconvénients de cette édition sont : ...
    • Paramétrages - Contrat de Doublage

      I. Paramétrage préalables A. Enumération langue Pour planifier les affaires et sous-affaires de doublage, commencez par créer une liste de langues basée sur la table des énumérations. Voici les étapes à suivre : Depuis le menu Paramétrage > ...