0 Abonnés · 59 Publications

VSCode est la forme abrégée du nom de l'éditeur multiplateforme VisualStudio Code de Microsoft.

En savoir plus.

Question Laurent Jouron · Déc 11, 2023

Bonjour,

Je suis en train de faire un test avec django sur notre base de données. Le but étant de créer une API pour voir la réactivité de celle-ci.

J'ai créé le projet sans problème, j'ai réussi à créer les 16 000 lignes de models avec inspect_db. Tout se passait bien jusqu'au moment où j'ai voulu testé mon projet, 'Accès refusé'.

De ce que j'ai pu voir, Il n'y aurait pas d'erreur de code, car les seules erreurs retournées sont les suivantes.

Je ne pense pas que ce soit un problème majeur, plutôt un manque de pratique sur votre système. Auriez-vous une idée à me soumettre?

3
0 116
InterSystems officiel Sylvain Guilbaud · Nov 15, 2023

Comme annoncé pour la première fois en mai, et après de nombreuses présentations et discussions approfondies lors du Global Summit 2023, nous poursuivons notre projet de rendre obsolète InterSystems Studio (obsolète désigne une fonctionnalité ou une technologie qu'InterSystems ne développe plus activement et pour laquelle de meilleures options existent).

1
0 90
Question Cyril Grosjean · Déc 11, 2023

Bonjour,

En souhaitant créer une production qui récupère un fichier provenant d'une API et qui envoie ce fichier sur un serveur SFTP, j'ai rencontré un problème avec la librairie de Guillaume Rongier.

Je reçois des bytes depuis une opération jusque là aucun problème, j'ai lié un SFTP à mon opération, les credentials sont les bons, l'adresse ip, le port, le dossier dans lequel déposer le fichier également. Cependant j'ai cette erreur:

ERROR <Ens>ErrException: <METHOD DOES NOT EXIST>PutStream+11^EnsLib.FTP.OutboundAdapter.1 *Rewind,%SYS.Python -- logged as '-'
number - @''

Voici mon code:

1
0 76
Question Cyril Grosjean · Déc 4, 2023

Bonjour,

Je suis toujours en train de préparer le terrain pour inclure la librairie de Guillaume Rongier pour utiliser InterSystems entièrement via Python. Cependant notre environnement local tourne sur Docker avec l'OS linux, jusque là nous n'avons aucun problème avec la librairie. Le problème arrive lorsque l'on passe sur la pré-production où iris est installé directement sur Windows. J'installe les librairies requises avec le package pip et un fichier requirements.txt contenant ceci:
 

5
0 92
Question Augustin MADET · Oct 24, 2023
import os

# Récupérer les variables d'environnement
db_host = os.getenv('DB_HOST')
db_port = os.getenv('DB_PORT')
db_namespace = os.getenv('DB_NAMESPACE')
db_username = os.getenv('DB_USERNAME')
db_password = os.getenv('DB_PASSWORD')

# Créer une connexion à la base de données
conn = irisnative.createConnection(db_host, db_port, db_namespace, db_username, db_password)

# Créer une instance IRIS à partir de cette connexion
iris_native = irisnative.createIris(conn)

status = iris_native.classMethodValue('%SYSTEM.OBJ', 'Load', 'Production.cls', 'ck')

if status == 1:
    
4
1 106
InterSystems officiel Sylvain Guilbaud · Mai 26, 2023

InterSystems s'engage à fournir une expérience de développement de haute qualité, y compris un excellent IDE (Integrated Developer Experience). Au cours des dernières années, nous avons fait évoluer les outils ObjectScript de Visual Studio Code en parallèle avec notre IDE de longue date, InterSystems Studio. Il y a eu plus de 46 000 téléchargements du plug-in VSCode-ObjectScript, et les commentaires des développeurs indiquent qu'il s'agit d'une excellente expérience de développement, et maintenant supérieure à InterSystems Studio.

0
0 88
Article Guillaume Rongier · Mai 15, 2023 4m read

Salut à tous !  

Dans cet article, j'aimerais passer en revue les extensions de VS Code que j'utilise moi-même pour travailler avec InterSystems et qui rendent mon travail beaucoup plus pratique. Je suis certain que cet article sera utile à ceux qui commencent tout juste à apprendre les technologies d'InterSystems. Cependant, j'espère également que cet article pourra être utile aux développeurs expérimentés ayant de nombreuses années d'expérience et qu'il leur ouvrira de nouvelles possibilités lors de l'utilisation de VS Code pour le développement.

Je recommande à tous ceux qui travaillent avec InterSystems d'avoir ces extensions installées et, dans cet article, je montrerai comment utiliser certaines d'entre elles.

Vous pouvez en savoir plus sur la fonctionnalité et l'utilisation de chaque extension dans la section Extensions de VS Code, où vous pouvez également télécharger, mettre à jour et désinstaller des extensions :

 Après l'installation, des icônes d'extension apparaissent sur le côté ou en bas de l'éditeur de code.

Extensions obligatoires

Je crois qu'il est logique de commencer notre voyage avec ces extensions de base, sans lesquelles il est impossible de travailler avec InterSystems dans VS Code.

  • L'extension du gestionnaire de serveur d'InterSystems pour VS Code permet de spécifier les connexions au serveur.
  • L'extension ObjectScript d'InterSystems pour VS Code permet l'écriture et la compilation des fichiers de code.
  • L'extension du serveur de langage d'InterSystems pour VS Code permet la mise en œuvre d'un serveur de langage pour ObjectScript, offrant des fonctions de coloration, de complétion de code, d'évaluation de la qualité et bien plus encore.
  • Conjointement, ces extensions offrent aux développeurs un moyen rationalisé de créer, tester et déployer des applications complètes basées sur InterSystems.

    Extensions supplémentaires

    Outre les extensions de base nécessaires, VS Code propose un grand nombre d'autres extensions. Vous pouvez écrire du code sans elles, mais leur utilisation rend le développement plus efficace lorsque vous utilisez n'importe quelle pile technologique, y compris les technologies d'InterSystems. J'en décrirai quelques-unes qui me semblent incontournables.

  • L'extension Docker rend la gestion des projets dockerisés un peu plus facile. Vous pouvez générer automatiquement un fichier Docker pour les projets, exécuter des images et gérer les conteneurs actifs.  
  • Le pilote SQLTools for InterSystems IRIS et SqlTools - sont deux extensions très pratiques qui fonctionnent conjointement. En les utilisant, vous pouvez créer et exécuter les requêtes SQL de la base de données dans VS Code sans avoir à aller dans le portail de gestion et à effectuer des requêtes sql pour interagir avec le contenu des tableaux qui s'y trouvent.
  •  

    Aujourd'hui, il est difficile d'imaginer développer un projet sans utiliser le contrôle de version. Le plus souvent, il s'agit de Git, et le code Visual Studio a un support minimal dès sa sortie de la boîte. Mais si cela ne vous suffit pas, jetez un coup d'œil aux deux extensions suivantes : 

  • Git Graph - montre les branches et leur statut de manière schématique. Ceci est utile dans les situations où vous avez besoin de comprendre rapidement l'état des branches, par exemple lorsqu'elles fusionnent.
  • Git Lens - permet de voir l'historique des modifications apportées à la ligne surlignée et à son auteur.
  •  Il est indispensable au travail d'équipe !

  • EditorConfig - une extension pour améliorer l'apparence du code, elle nécessite l'écriture d'un fichier .editorconfig, dans lequel vous pouvez spécifier tous les paramètres de formatage du code. Il est important de noter que, par défaut, cette fonctionnalité peut être mise en œuvre par l'extension du serveur de langage InterSystems pour VS Code. Pour appliquer le formatage de code ObjectScript standard dans VS Code, vous devez utiliser une combinaison de touches : Windows - [Shift + Alt + F], Mac - [Shift + Option + F], Ubuntu - [Ctrl + Shift + I]. Mais en utilisant le fichier .editorconfig, vous pouvez spécifier votre propre formatage de code pour différents fichiers au sein du projet.
  • Dans cet article, je n'ai abordé que les extensions utilisées par moi-même. Je vous serais reconnaissante de prendre le temps d'écrire dans les commentaires ce qui peut encore être utilisé pour rendre le développement plus pratique. Cet article n'en sera que plus utile !

    0
    0 297
    Article Lorenzo Scalese · Avr 17, 2023 7m read

    Il y a quelque temps, GitHub a annoncé une nouvelle fonctionnalité, les Codespaces GitHub Codespaces. Elle permet d'exécuter VSCode dans le navigateur, avec presque la même puissance que s'il était exécuté localement sur votre machine, mais aussi avec la puissance des nuages, de sorte que vous pouvez choisir le type de machine avec jusqu'à 32 cœurs de CPU et 64 Go de RAM.

    C'est impressionnant, n'est-ce pas ? Mais comment cela peut-il nous aider à travailler sur des projets pilotés par InterSystems IRIS ? Voyons comment le configurer pour nous.

    Démarrage simple pour tout référentiel

    Grâce à cette fonctionnalité, vous pourrez modifier n'importe quel dépôt dans le nuage, par le bouton Code. Veuillez noter que cette fonctionnalité est encore en version bêta, et peut ne pas être disponible pour tout le monde. Après une période bêta, elle ne sera disponible que pour les comptes payants.

    Ainsi, ce dépôt n'a pas été spécialement préparé pour les codespaces, mais seulement pour VSCode. Appuyez sur le bouton de nouveau codespace "New codespace", pour créer un environnement juste pour vous.

    Dans mon cas, lors de l'utilisation précédente de codespaces, j'ai déjà installé l'extension ObjectScript et l'ai activée globalement par une invite de Codespaces. Ainsi, elle s'installe pour moi à chaque fois, et le code ObjectScript est déjà mis en évidence. Mais l'IRIS n'est pas encore disponible. Démarrons-le avec docker-compose.

    Après cela, nous pouvons maintenant nous connecter au terminal IRIS et compiler le code.

    Les ports de docker-compose sont automatiquement reconnus et peuvent être ouverts dans le navigateur. Il est donc également possible d'ouvrir le Portail de gestion du système.

    Utilisation avec un référentiel préparé

    Nous avons réussi à faire fonctionner VSCode et IRIS dans le nuage, mais nous avons dû faire certaines choses manuellement, pour le rendre prêt. Cependant, il est également possible de rendre votre référentiel prêt pour le développement dès le début.

    C'est possible, avec devcontainer.json. Je vais faire un exemple basé sur l'un de mes projets récents Realworld. Ce projet est assez complexe, il a un backend et un frontend et utilise docker-compose pour démarrer tout cela ensemble.

    devcontainer peut utiliser docker-compose également, donc, ma configuration est apparue comme ceci.

    {
      "name": "IRIS RealWorld example",
      "dockerComposeFile": "docker-compose.yml",
      "service": "server",
      "extensions": [
        "intersystems-community.vscode-objectscript"
      ],
      "forwardPorts": [
        80,
        52773
      ],
      "workspaceFolder": "/home/irisowner/conduit",
      "remoteUser": "irisowner",
      "postCreateCommand": "iris start iris",
      "settings": {
        "terminal.integrated.defaultProfile.linux": "bash",
        "terminal.integrated.profiles.linux": {
          "bash": {
            "path": "bash",
            "icon": "terminal-bash"
          },
          "iris": {
            "path": "iris",
            "args": ["session", "iris"]
          }
        },
        "intersystems.servers": {
          "/ignore": true
        },
        "objectscript.ignoreInstallServerManager": true,
        "objectscript.ignoreInstallLanguageServer": true,
        "objectscript.conn": {
          "active": true,
          "host": "localhost",
          "port": 52773,
          "ns": "CONDUIT",
          "username": "demo",
          "password": "demo",
          "links": {
            "Conduit APP": "http://localhost:80/",
            "Conduit API": "http://${host}:${port}/conduit/"
          }
        }
      }
    }
    

    Il y a beaucoup de choses configurées

    • chemin vers le fichier docker-compose.yml personnalisé, en particulier pour Codespaces
    • nom du service principal, où le développement est effectué 
    • liste des extensions installées par défaut dans VSCode
    • Les ports qui doivent être publiés, dans ce cas, le port du serveur web pour IRIS et pour le frontend
    • chemin du répertoire de travail
    • utilisateur à l'intérieur du conteneur;; comme nous entrons dans le conteneur IRIS, nous avons besoin de l'utilisateur irisowner 
    • dans docker-compose, notre conteneur IRIS est configuré pour ne pas utiliser le point d'entrée par défaut iris-main, mais juste mettre en veille avec infinity, et après avoir démarré l'environnement, nous devons démarrer notre IRIS
    • et enfin, les paramètres pour VSCode, peuvent également être configurés ici, c'est un niveau de paramètres de la machine. Qui, bien sûr, peuvent être remplacés ou ajoutés avec .vscode/settings.json

    Le démarrage de Codespaces pour un tel référentiel prendra un peu plus de temps, car il faudra construire tous les conteneurs nécessaires et les démarrer. GitHub indique qu'il sera possible de pré-créer de telles images après chaque poussée au référentiel, de sorte que le démarrage sera plus rapide.

    Et quand il a démarré, aucune autre action n'est nécessaire, il est prêt pour le développement.

    Ce projet a une option pour tester l'API REST avec des tests Postman préparés, donc, j'ai installé npm et newman à l'intérieur du conteneur backend avec IRIS. Et il est possible d'y exécuter ces tests. Tout est passé, bien joué.

    Et le frontend est également disponible

    GitHub permet de se connecter à Codespaces, y compris depuis le VSCode local. Lorsque vous appuyez sur le bouton vert Codespaces dans le coin, vous pouvez choisir d'ouvrir dans VC Code (l'extension GitHub Codespaces doit être installée).

    Et voici, c'est le même projet, ouvert avec votre VSCode local, mais fonctionnant dans le nuage, comme vous pouvez voir le résultat de ifconfig, je ne suis certainement pas à Singapour, en ce moment.

    Dans un navigateur mais sans Codespaces GitHub

    Et si vous n'avez pas accès à la fonction Codespaces, ou si vous ne voulez pas l'utiliser de cette manière, mais que vous voulez quand même essayer VSCode dans le navigateur.

    Eh bien, c'est possible avec un autre projet code-server

    Vous pouvez simplement exécuter ce VSCode avec la commande suivante

    docker run -it -p 8080:8080 codercom/code-server --auth=none

    Il s'exécutera, la version par défaut de VSCode, sans dossiers mappés à l'intérieur, montez simplement n'importe quel dossier, et définissez-le comme répertoire de travail, et vous le verrez à l'intérieur.

    docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld codercom/code-server --auth=none

    C'est le VSCode par défaut, sans extension ObjectScript installée. Il a une limitation avec les extensions, il n'a pas accès au marché original de VSCode, au lieu de cela il utilise un autre endroit, open-vsx.org, et l'extension ObjectScript principale est disponible là aussi.

    Avec un tel fichier Docker, nous pouvons créer notre propre serveur de code, avec tout ce qui y est installé, ainsi que certaines extensions déjà installées.

    FROM codercom/code-server
    
    USER root
    
    RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash - && \
        apt-get install -y jq nodejs python3-pip python3-dev unixodbc-dev && \
        rm -rf /var/lib/apt/lists/* && \
        pip3 install pyodbc && \
        npm install -g yarn && \
      sudo chown -R 1000:1000 /home/coder
    
    COPY extensions extensions
    
    COPY settings.json /root/.local/share/code-server/User/settings.json
    
    ENV SERVICE_URL=https://open-vsx.org/vscode/gallery
    ENV ITEM_URL=https://open-vsx.org/vscode/item
    
    RUN \
      code-server --install-extension ms-python.python && \
      code-server --install-extension intersystems-community.vscode-objectscript && \
      find extensions -type f -exec code-server --install-extension {} \;
    
    WORKDIR /opt/intersystems
    
    CMD [ "--auth=none", "--disable-telemetry" ]
    

    Vous pouvez définir des paramètres par défaut dans le fichier settings.json pour le niveau utilisateur et si certaines extensions dont vous avez besoin ne sont pas disponibles sur open-vsx, téléchargez-les manuellement, placez-les dans le dossier des extensions à côté du Dockerfile, et elles seront également installées.

    Vous êtes maintenant en mesure de lancer un nouveau serveur de code avec toutes les extensions dont vous avez besoin installées.

    docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld &lt;strong>caretdev/code-server&lt;/strong> --auth=none
    

    Et la coloration syntaxique est déjà là, il ne reste plus qu'à faire fonctionner IRIS lui-même, et cela peut être fait avec un docker-compose étendu, où le code-server sera juste un autre service à côté d'IRIS.

    0
    0 66
    Article Lucas Enard · Avr 3, 2023 10m read

    Sur GitHub, vous trouverez toutes les informations sur l'utilisation d'un modèle d'apprentissage automatique "HuggingFace" / modèle d'IA sur le cadre IRIS à l'aide de Python.

    1. iris-huggingface

    Utilisation de modèles d'apprentissage automatique dans IRIS à l'aide de Python ; pour les modèles texte-texte, texte-image ou image-image.

    Les modèles suivants servent d'exemple :

    2. Installation

    2.1. Lancement de la production

    Dans le dossier iris-local-ml, ouvrez un terminal et saisisse :

    docker-compose up
    

    La première fois, cela peut prendre quelques minutes pour construire l'image de manière correcte et installer tous les modules nécessaires à Python.

    2.2. Accès à la production

    En suivant ce lien, vous accédez à la production : Access the Production

    2.3. Clôture de la production

    docker-compose down
    

    Comment ça marche

    Pour l'instant, certains modèles peuvent ne pas fonctionner avec cette implémentation car tout est fait automatiquement, ce qui veut dire que, quel que soit le modèle que vous saisissez, nous essaierons de le faire fonctionner grâce à la bibliothèque transformerspipeline.

    Pipeline est un outil puissant de l'équipe HuggingFace qui va scanner le dossier dans lequel nous avons téléchargé le modèle, puis il va déterminer quelle bibliothèque il doit utiliser entre PyTorch, Keras, Tensorflow ou JAX pour ensuite charger ce modèle en utilisant AutoModel.
    À partir de ce point, en saisissant la tâche, le pipeline sait ce qu'il doit faire avec le modèle, l'analyseur lexical ou même l'extracteur de caractéristiques dans ce dossier, et gère automatiquement votre entrée, l'analyse et la traite, la transmet au modèle, puis restitue la sortie sous une forme décodée directement utilisable par nous.

    3. API HuggingFace

    Vous devez d'abord démarrer la démo, en utilisant le bouton vert Start ou Stop et Start à nouveau pour appliquer vos changements de configuration.

    Ensuite, en cliquant sur l'opération Python.HFOperation de votre choix, et en sélectionnant dans l'onglet de droite action, vous pouvez tester la démo.

    Dans cette fenêtre test, sélectionnez :

    Type de demande : Grongier.PEX.Message

    Pour le classname vous devez saisir :

    msg.HFRequest
    

    Et pour le json, voici un exemple d'appel à GPT2 :

    {
        "api_url":"https://api-inference.huggingface.co/models/gpt2",
        "payload":"Veuillez nous donner plus de détails sur votre ",
        "api_key":"----------------------"
    }
    

    Vous pouvez maintenant cliquer sur le bouton Visual Trace (Trace visuelle) pour voir en détail ce qui s'est passé et consulter les journaux.

    REMARQUE : vous devez avoir une clé API de HuggingFace avant d'utiliser cette opération (les clés API sont gratuites, il suffit de s'enregistrer auprès de HF).

    REMARQUE : vous pouvez changer l'url pour essayer n'importe quel autre modèle de HuggingFace, mais vous devrez peut-être changer le payload.

    Par exemple :
    sending hf reqhf reqhf resp

    4. Utilisation de n'importe quel modèle sur le web

    Dans cette section, nous vous apprendrons à utiliser presque tous les modèles disponibles sur l'internet, qu'il s'agisse de HuggingFace ou non.

    4.1. PREMIER CAS : VOUS AVEZ VOTRE PROPRE MODÈLE

    Dans ce cas, vous devez copier-coller votre modèle, avec la configuration, l'outil tokenizer.json etc. dans un dossier à l'intérieur du dossier model.
    Chemin d'accès : src/model/yourmodelname/

    A partir de là, vous devez aller dans les paramètres de Python.MLOperation.
    Cliquez sur Python.MLOperation puis rendez-vous dans settings dans l'onglet de droite, puis dans la partie Python, puis dans la partie %settings. Ici, vous pouvez saisir ou modifier n'importe quel paramètre (n'oubliez pas d'appuyer sur apply une fois que vous avez terminé).
    Voici la configuration par défaut pour ce cas :
    %settings

    name=yourmodelname
    task=text-generation
    

    REMARQUE : tous les paramètres qui ne sont pas name ou model_url sont placés dans les paramètres de PIPELINE.

    NMaintenant vous pouvez double-cliquer sur l'opération Python.MLOperation et la démarrer. Vous devez voir dans la partie Log le démarrage de votre modèle.

    A partir de là, nous créons une PIPELINE en utilisant des transformateurs qui utilisent votre fichier de configuration situé dans le dossier comme nous l'avons vu précédemment.

    Pour appeler ce pipeline, cliquez sur l'opération Python.MLOperation , et sélectionnez dans l'onglet de droite action, vous pouvez tester la démo.

    Dans cette fenêtre test, sélectionnez :

    Type de demande : Grongier.PEX.Message

    Pour le classname (nom de classe), vous devez saisir :

    msg.MLRequest
    

    Et pour le json, vous devez saisissez tous les arguments nécessaires à votre modèle. Voici un exemple d'appel à GPT2 :

    {
        "text_inputs":"Malheureusement, le résultat",
        "max_length":100,
        "num_return_sequences":3
    }
    

    Cliquez sur Invoke Testing Service (Invoquer le service de test) et attendez que le modèle fonctionne.

    Voir par exemple :
    sending ml req

    Vous pouvez maintenant cliquer sur Visual Trace (Trace visuelle) pour voir en détail ce qui s'est passé et consulter les journaux.

    Voir par exemple :
    ml req

    ml resp

    4.2. DEUXIÈME CAS : VOUS VOULEZ TÉLÉCHARGER UN MODÈLE À PARTIR DE HUGGINGFACE

    Dans ce cas, vous devez trouver l'URL du modèle sur HuggingFace ;

    4.2.1. Paramètres

    À partir de là, vous devez accéder aux paramètres de la Python.MLOperation.
    Cliquez sur Python.MLOperation puis allez dans des paramètres settings dans l'onglet de droite, puis dans la partie Python, puis dans la partie %settings. Ici, vous pouvez saisir ou modifier n'importe quel paramètre (n'oubliez pas d'appuyer sur apply (appliquer) une fois que vous avez terminé).
    Voici quelques exemples de configuration pour certains modèles que nous avons trouvés sur HuggingFace :

    %settings pour gpt2

    model_url=https://huggingface.co/gpt2
    name=gpt2
    task=text-generation
    

    %settings pour camembert-ner

    name=camembert-ner
    model_url=https://huggingface.co/Jean-Baptiste/camembert-ner
    task=ner
    aggregation_strategy=simple
    

    %settings pour bert-base-uncased

    name=bert-base-uncased
    model_url=https://huggingface.co/bert-base-uncased
    task=fill-mask
    

    %settings pour detr-resnet-50

    name=detr-resnet-50
    model_url=https://huggingface.co/facebook/detr-resnet-50
    task=object-detection
    

    %settings pour detr-resnet-50-protnic

    name=detr-resnet-50-panoptic
    model_url=https://huggingface.co/facebook/detr-resnet-50-panoptic
    task=image-segmentation
    

    REMARQUE : tous les paramètres qui ne sont pas name ou model_url iront dans les paramètres du PIPELINE, donc dans notre second exemple, le pipeline camembert-ner requiert une stratégie aggregation_strategy et une tâche task qui sont spécifiées ici alors que le pipeline gpt2 ne requiert qu'une tâche task.

    Voir par exemple :
    settings ml ope2

    Vous pouvez maintenant double-cliquer sur l'opération Python.MLOperation et la démarrer.
    Vous devez voir dans la partie Log le démarrage de votre modèle et le téléchargement.
    REMARQUE : Vous pouvez actualiser ces journaux toutes les x secondes pour voir l'évolution des téléchargements. dl en temps réel

    A partir de là, nous créons une PIPELINE en utilisant des transformateurs qui utilisent votre fichier de configuration qui se trouve dans le dossier comme nous l'avons vu précédemment.

    4.2.2. Tests

    Pour appeler ce pipeline, cliquez sur l'opération Python.MLOperation , et sélectionnez dans l'onglet de droite action, vous pouvez tester la démo.

    Dans cette fenêtre test, sélectionnez :

    Type de demande : Grongier.PEX.Message

    Pour le classname (nom de classe), vous devez saisir :

    msg.MLRequest
    

    Et pour le json, vous devez saisir tous les arguments nécessaires à votre modèle. Voici un exemple d'appel à GPT2 ( Python.MLOperation ) :

    {
        "text_inputs":"George Washington a vécu",
        "max_length":30,
        "num_return_sequences":3
    }
    

    Voici un exemple d'appel à Camembert-ner ( Python.MLOperation2 ) :

    {
        "inputs":"George Washington a vécu à Washington"
    }
    

    Voici un exemple d'appel à bert-base-uncased ( Python.MLOperation3 ) :

    {
        "inputs":"George Washington a vécu à [MASQUE]."
    }
    

    Voici un exemple d'appel à detr-resnet-50 à l'aide d'une url en ligne ( Python.MLOperationDETRRESNET ) :

    {
        "url":"http://images.cocodataset.org/val2017/000000039769.jpg"
    }
    

    Voici un exemple d'appel à detr-resnet-50-panoptic utilisant l'url comme chemin d'accès( Python.MLOperationDetrPanoptic ) :

    {
        "url":"/irisdev/app/misc/000000039769.jpg"
    }
    

    Cliquez sur Invoke Testing Service et attendez que le modèle fonctionne.
    Vous pouvez maintenant cliquer sur Visual Trace pour voir en détail ce qui s'est passé et consulter les journaux.

    REMARQUE : Lorsque le modèle a été téléchargé pour la première fois, la production ne le téléchargera pas à nouveau mais récupérera les fichiers mis en cache dans src/model/TheModelName/.
    Si certains fichiers sont manquants, la production les téléchargera à nouveau.

    Voir par exemple :
    sending ml reqml reqml resp

    Voir par exemple :
    sending ml reqml resp

    5. Dépannage

    Si vous avez des problèmes, la lecture est le premier conseil que nous pouvons vous donner, la plupart des erreurs sont facilement compréhensibles simplement en lisant les journaux car presque toutes les erreurs seront capturées par un try / catch et enregistrées.

    Si vous avez besoin d'installer un nouveau module, ou une dépendance Python, ouvrez un terminal à l'intérieur du conteneur et saisissez par exemple : "pip install new-module"
    Il y a plusieurs façons d'ouvrir un terminal,

    • Si vous utilisez les plugins InterSystems, vous pouvez cliquer sur la barre ci-dessous dans VSCode, celle qui ressemble à docker:iris:52795[IRISAPP] et sélectionner Open Shell in Docker (Ouvrir l'enveloppe dans Docker).
    • Dans n'importe quel terminal local, saisissez : docker-compose exec -it iris bash
    • Depuis Docker-Desktop, trouvez le conteneur IRIS et cliquez sur Open in terminal (Ouvrir dans le terminal).

    Certains modèles peuvent nécessiter des modifications au niveau de leur pipeline ou de leurs paramètres, par exemple, et c'est à vous qu'il incombe d'ajouter les informations adéquates dans les paramètres et dans la demande.

    6. Conclusion

    À partir de là, vous devriez pouvoir utiliser n'importe quel modèle dont vous avez besoin ou que vous possédez sur IRIS.
    REMARQUE : vous pouvez créer une Python.MLOperation pour chacun de vos modèles et les activer en même temps.

    0
    0 189
    InterSystems officiel Sylvain Guilbaud · Mars 16, 2023

    Je suis heureux d'annoncer la version 2.6.0 de l'extension VS Code ObjectScript, contenant un certain nombre d'améliorations qui facilitent la vie d'un développeur. Certains faits saillants sont décrits ci-dessous. Comme toujours, retrouvez la liste complète des modifications dans le CHANGELOG, y compris de nombreux correctifs de bogues et de vulnérabilités.

    Changez rapidement de namespace

    0
    0 138
    Article Sylvain Guilbaud · Mars 10, 2023 4m read

    Ce Template s'agit du modèle de base pour utiliser InterSystems IRIS for Health Community Edition en tant que serveur FHIR.

    Il configure un SERVEUR FHIR, importe les données de test, fait la démonstration de l'utilisation de l'API REST avec une simple page web.

    Conditions préalables

    Assurez-vous que vous avez installé git et Docker desktop.

    Installation

    IPM

    Ouvrez l'installation d'IRIS for Health avec le client IPM installé. Appel dans n'importe quel espace de nom :

    USER>zpm "install fhir-server"

    Ainsi, le serveur FHIR sera installé dans l'espace de noms FHIRSERVER.

    0
    0 104
    Article Guillaume Rongier · Fév 6, 2023 12m read

    Visual Studio Code (VSCode) est l'éditeur de code le plus populaire du marché. Il a été créé par Microsoft et distribué en tant qu'IDE gratuit. VSCode supporte des dizaines de langages de programmation, y compris ObjectScript, Until 2018, Atelier (basé sur Eclipse). Il était considéré comme l'une des principales options pour développer les produits InterSystems. Cependant, en décembre 2018, lorsque la communauté des développeurs d'InterSystems a lancé le support de VSCode, une partie pertinente des professionnels d'InterSystems a commencé à utiliser cet éditeur et ne cesse de le faire depuis, en particulier les développeurs aui travaillent avec de nouvelles technologies (Docker, Kubernetes, NodeJS, Angular, React, DevOps, Gitlab, etc.). Certaines des meilleures fonctionnalités de VSCode sont les capacités de débogage. C'est pourquoi cet article démontrera en détail comment déboguer le code ObjectScript, y compris le code de classe et le code %CSP.REST.  

    Qu'est-ce que le débogage ?

    Le débogage est un processus qui consiste à détecter et à résoudre les "bugs", c'est-à-dire les erreurs dans votre code ObjectScript. C'est pourquoi pour les comprendre dans la logique d'exécution de votre code source, vous devez voir le programme s'exécuter ligne par ligne. C'est la meilleure façon d'identifier les conditions ou la logique de programmation et de trouver les erreurs logiques. Les autres erreurs sont des erreurs d'exécution. Pour pouvoir déboguer ce type de problème, il est essentiel de vérifier d'abord les valeurs des variables assignées.

    Installation des extensions InterSystems IRIS pour VSCode

    Tout d'abord, il faut installer les extensions IRIS d'InterSystems dans votre IDE VSCode. Pour ce faire, allez dans Extensions, cherchez InterSystems et installez les extensions InterSystems suivantes :

    La dernière extension (InterSystems ObjectScript Extension Pack) doit être installée en premier, car il s'agit d'un paquet d'extensions nécessaires pour connecter, éditer, développer et déboguer ObjectScript. Les autres extensions listées sont optionnelles.

    Application modèle

    Nous allons utiliser une application de mon référentiel GitHub (https://github.com/yurimarx/debug-objectscript.git) pour les exemples de débogage dans cet article. Donc, suivez les étapes ci-dessous pour obtenir, exécuter et déboguer l'application dans VSCode :
    1.    Créez un répertoire local et récupérez le code source du projet dans ce répertoire :

    $ git clone https://github.com/yurimarx/debug-objectscript.git

    2.    Ouvrez le terminal dans ce répertoire (répertoire iris-rest-api-template) et exécutez :

    $ docker-compose up -d --build

    3.    Ouvrez VSCode dans le répertoire iris-rest-api-template en utilisant $code . ou clic-droit sur le dossier et sélectionnez Open with Code.
    4.    Dans le pied de page, cliquez sur ObjectScript pour ouvrir les options configurées dans .vscode/launch.json :

    5.    Sélectionnez Toggle Connection pour activer la connexion actuelle :

    6.    Après avoir activé cette connexion, vous obtiendrez la connexion indiquée ci-dessous :

    7.    Si vous n'êtes pas connecté avec IRIS dans VSCode, vous ne pourrez pas déboguer le code ObjectScript. Vérifiez donc votre connexion en cliquant sur l'extension ObjectScript VSCode :

    8.    Ouvrez Person.cls, allez à la ligne numéro 25 et pointez la souris sur le chiffre 25 à votre gauche.

    9.    Maintenant, pointez la souris sur la ClassMethod supérieure et cliquez sur "Debug this method" (Débugger cette méthode) :

    10.    VSCode ouvrira une boîte de dialogue pour vous permettre de définir les valeurs des paramètres, alors définissez les valeurs comme indiqué ci-dessous, et cliquez sur Entrée :

    11.    VSCode va interrompre l'exécution du code à la ligne 25 :

    12.    Maintenant, en haut à gauche, vous pouvez voir les valeurs actuelles des variables.  

    13.    En bas à gauche, vous pouvez maintenant voir la liste des points d'arrêt et la pile d'appels pour le point d'arrêt actuel.  

    14.    En haut à droite, vous pouvez voir le code source avec le point d'arrêt et une série de boutons pour contrôler l'exécution du débogage.  

    15.    Si vous avez besoin d'utiliser la console de débogage pour y taper quelque chose, tapez : Name_",""_Title pour voir la concaténation des variables en utilisant la Debug Console :

    16.    Sélectionnez la variable de résultat, cliquez sur le bouton droit de la souris et sélectionnez "Add to Watch" (Ajouter à la liste) :

    17.    Vous pouvez maintenant surveiller ou modifier la valeur actuelle de la variable de résultat dans la section WATCH :

    18.    Enfin, la barre de bas de page est orange, et elle indique le débogage :

    Utilisation de la console de débogage

    La console de débogage vous permet d'écrire des expressions pendant le débogage, de sorte que vous pouvez vérifier les valeurs de différentes variables (de type simple ou de type objet) ou valider la valeur actuelle et d'autres conditions. Elle peut exécuter tout ce qui peut retourner des valeurs, donc $zv fonctionnera également. Suivez ces étapes pour voir quelques options :

    1.    Écrire Nom_", "_Title_" à partir de "_Company" sur l'invite du terminal de débogage et voyez les valeurs concaténées de Nom, Titre et Société en sortie :

    ![](/sites/default/files/inline/images/images/image(4703La console de débogage vous permet d'écrire des expressions pendant le débogage, de sorte que vous pouvez vérifier les valeurs de différentes variables (de type simple ou de type objet) ou valider la valeur actuelle et d'autres conditions. Elle peut exécuter tout ce qui peut retourner des valeurs, donc $zv fonctionnera également. Suivez ces étapes pour voir quelques options :).png)

    Utilisation de la barre d'outils de débogage

    La barre d'outils de débogage vous permet de contrôler l'exécution du débogage. Découvrez les fonctions des boutons ici :

    1.    Bouton Continuer (F9) : poursuit l'exécution jusqu'au prochain point d'arrêt. S'il n'y a pas de point d'arrêt à atteindre, le programme continue jusqu'à la fin.
    2.    Step Over (F8) : passe à la ligne suivante sans entrer dans le code source d'une méthode interne (ne pas entrer dans la méthode Populate).
    3.    Step Into (F7) : aller à la ligne suivante à l'intérieur du code source de la méthode interne (aller à la première ligne de la méthode Populate).
    4.    Step Out (Shift + F8) : aller à la ligne courante du code source de l'appelant d'une méthode.
    5.    Redémarrer (Crtl + Shift + F5) : relancer le débogage.
    6.    Stop : arrête la session de débogage.  

    Déboguer les méthodes de la classe %CSP.REST

    Pour déboguer les méthodes des classes REST, il est nécessaire d'appliquer une petite astuce révélée par Fábio Gonçalves (voir l'article ici https://community.intersystems.com/post/atelier-debugging-attach-process). Il est nécessaire d'ajouter un HANG (ma recommandation est entre 20 et 30 secondes). Il suffit de suivre les étapes suivantes :

    1.    Ouvrez le fichier src\dc\Sample\PersonREST.cls et allez à la méthode GetInfo(), ajoutez HANG 30 (ceci est nécessaire pour obtenir le temps, 30 secondes, pour commencer le débogage de cette méthode) :

    2.    Fixez des points d'arrêt sur les lignes de version HANG et SET (cercles rouges) :

    3.    Ouvrez un client HTTP pour appeler une méthode REST (je vais appeler GetInfo de la classe PersonREST) :

    4.    Définissez Basic Auth sur Authorization (nom d'utilisateur _SYSTEM et mot de passe SYS) :

    5.    Envoyer un GET http://localhost:52773/crud/.
    6.    Cliquez sur ObjectScript Attach dans la barre de bas de page :

    7.    Sélectionnez Attachement ObjectScript :

    8.    Sélectionnez le processus PersonREST :

    9.    Attendez quelque temps (environ 30 secondes) pour que VSCode interrompe l'exécution en cours sur le point d'arrêt :

    Remarque 1 : supprimez le HANG 30 lorsque vous avez terminé votre débogage, car le HANG met l'exécution en pause.

    Remarque 2 : si le processus PersonREST n'apparaît pas, redémarrez votre VSCode, et réessayez.

    10.    Maintenant vous pouvez procéder au débogage.

    Modification du point d'arrêt

    Vous pouvez faire un clic droit sur le point d'arrêt pour supprimer ou configurer les points d'arrêt conditionnels (rupture sur le point d'arrêt avec la condition "true"). La commande de rupture intégrée directement dans le code sera également prise en compte par le débogueur. Vous pouvez également essayer cette fonction.

    1.    Faites un clic droit sur le point d'arrêt et sélectionnez Edit Breakpoint :

    2.    Saisissez l'expression mentionnée ci-dessous et appuyez sur Entrée :

    Remarque : essayez la version = 1.0.5 pour voir le point d'arrêt faux et 1.0.6 pour voir le point d'arrêt vrai.

    Configuration de l'option de débogage sur le fichier .vscode/launch.json

    Le fichier Launch.json est utilisé pour configurer les options de débogage pour votre projet. Pour voir les alternatives, allez dans le fichier suivant :

    Pour ce modèle, nous avons deux options à choisir pour le débogage :

    1.    Nous pouvons lancer le débogage sur la classe configurée sur l'attribut programme directement avec un programme (dans cet exemple le débogueur va démarrer dans la classe PackageSample.ObjectScript, méthode Test().
    2.    Nous pouvons attacher PickProcess au processus du programme sélectionné que nous voulons déboguer. Dans cet exemple, le débogueur ouvrira en haut une liste de processus pour sélectionner le processus (chaque programme a son processus) qui sera débogué. La deuxième option est Le fichier Launch.json, qui est utilisé pour configurer les options de débogage pour votre projet. Pour voir les alternatives, allez dans le fichier suivant : more common.

    D'une manière générale, ces attributs sont obligatoires pour toute configuration de débogage (source : https://intersystems-community.github.io/vscode-objectscript/rundebug/):

    • "type" - Identifie le type de débogueur à utiliser. Dans ce cas, objectcript est fourni par l'extension InterSystems ObjectScript.
    • "request" - Identifie le type d'action pour cette configuration de lancement. Les valeurs possibles sont "launch" et "attach".
    • "name" - Un nom arbitraire pour identifier la configuration. Ce nom apparaît dans la liste déroulante Start Debugging.

    En outre, pour une configuration de lancement ObjectScript, vous devez fournir l'attribut program, qui spécifie la routine ou la ClassMethod à exécuter lors du lancement du débogueur, comme le montre l'exemple suivant :

    "launch": {
        "version": "0.2.0",
        "configurations": [
           {
            "type": "objectscript",
            "request": "launch",
            "name": "ObjectScript Debug HelloWorld",
            "program": "##class(Test.MyClass).HelloWorld()",
          },
          {
            "type": "objectscript",
            "request": "launch",
            "name": "ObjectScript Debug GoodbyeWorld",
            "program": "##class(Test.MyOtherClass).GoodbyeWorld()",
          },
       ]
    }

    Pour une configuration d'attachement ObjectScript, vous pouvez fournir les attributs suivants :

    • "processId" - Spécifie l'ID du processus à attacher à une chaîne ou un nombre. La valeur par défaut est "${command:PickProcess}" pour fournir une liste déroulante d'ID de processus à attacher au moment de l'exécution.
    • "system" - Spécifie si les pièces jointes doivent être autorisées ou non dans le processus système. La valeur par défaut est "false".

    L'exemple suivant montre plusieurs configurations d'attachement ObjectScript valides :

    "launch": {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "objectscript",
                "request": "attach",
                "name": "Attach 1",
                "processId": 5678
            },
            {
                "type": "objectscript",
                "request": "attach",
                "name": "Attach 2",
                "system": true
            },
        ]
    }

    Maintenant, vous pouvez sélectionner une configuration de débogage dans la liste que VS Code fournit dans le champ Run and Debug en haut de la barre latérale de débogage (source : https://intersystems-community.github.io/vscode-objectscript/rundebug/):

    Si vous cliquez sur la flèche verte, la configuration de débogage actuellement sélectionnée sera exécutée.
    Lorsque vous lancez une session de débogage ObjectScript, assurez-vous que le fichier contenant le programme que vous déboguez est ouvert dans votre éditeur et se trouve dans l'onglet actif. VS Code lancera une session de débogage avec le serveur du fichier dans l'éditeur actif (l'onglet sur lequel l'utilisateur est concentré). Ceci s'applique également aux sessions de débogage ObjectScript attachées.
    Cette extension utilise WebSockets pour communiquer avec le serveur InterSystems pendant le débogage. Si vous rencontrez des problèmes lorsque vous essayez de lancer une session de débogage, vérifiez si le serveur Web d'InterSystems autorise les connexions WebSocket.
    Les commandes de débogage et les éléments du menu "Run" fonctionnent à peu près de la même manière que pour les autres langues prises en charge par VS Code. Pour plus d'informations sur le débogage de VS Code, consultez les ressources documentaires mentionnées au début de cette section.

    Définition de la synchronisation entre un code source local et un code source serveur (dans IRIS Server)

    Il est également important de disposer d'une structure de dossiers pour le code source, qui peut être adoptée par les paramètres "objectcript.export". Cette information sera utilisée pour convertir les noms de classes du serveur en fichiers locaux. Si elle est incorrecte, il est possible que les classes soient ouvertes en mode lecture seule même si elles n'existent que localement.
    1.    Ouvrez le fichier .vscode\settings.json et configurez objectcript.export :

    2.    Passez la souris sur le dossier, et ajoutez la catégorie et d'autres paramètres pour voir la documentation correspondante.

    Autres techniques pour compléter le processus de débogage

    En plus du débogage de votre programme, n'oubliez pas de bien documenter votre code source, de consigner les opérations effectuées par le code important et d'effectuer des tests unitaires et des outils d'analyse statique du code source. De cette façon, la qualité de vos programmes sera beaucoup plus élevée, ce qui réduira le temps et le coût de la maintenance et des ajustements.

    Plus d'informations

    Vous pouvez en savoir plus sur le débogage d'ObjectScript sur VSCode si vous révisez les ressources suivantes :
    1.    https://www.youtube.com/watch?v=diLHwA0rlGM
    2.    https://intersystems-community.github.io/vscode-objectscript/rundebug/
    3.    https://code.visualstudio.com/docs/introvideos/debugging
    4.    https://code.visualstudio.com/docs/editor/debugging
    5.    https://docs.intersystems.com/iris20221/csp/docbook/Doc.View.cls?KEY=TOS_VSCode

    0
    1 160
    Article Irène Mykhailova · Fév 3, 2023 2m read

    Il n'y a pas si longtemps, GitHub a introduit la possibilité d'exécuter très rapidement VSCode dans le navigateur pour tout dépôt hébergé ici. Appuyez sur la touche . sur n'importe quel dépôt ou pull request, ou remplacez .com par .dev dans l'URL, pour aller directement à un environnement VS Code dans votre navigateur.

    github dev

    Ce VSCode est une version légère de la version Desktop mais fonctionne entièrement dans le Browser. Et en raison de cela, il a une limitation pour les extensions qui ont été autorisés à fonctionner de cette façon. Permettez-moi de vous présenter la nouvelle version 1.2.1 de l'extension VSCode-ObjectScript qui prend désormais en charge le fonctionnement en mode Browser.

    Ce que vous devrez faire, c'est ouvrir n'importe quel référentiel dans ce nouvel environnement, aller dans les extensions, chercher et installer l'extension VSCode-ObjectScript. Une fois installée, elle sera disponible pour n'importe quel référentiel, que vous ouvrirez ensuite.

    Il s'agit de la même extension mais elle n'a que des fonctionnalités de base pour le moment. Juste la syntaxe est mise en évidence. Il est certain qu'elle n'a pas accès à l'exécution d'IRIS, mais certaines fonctionnalités supplémentaires, qui pourraient être disponibles hors connexion, pourraient apparaître à l'avenir.

    Sans GitHub

    Il y a une autre option, si vous souhaitez exécuter VSCode dans le navigateur, mais sans être lié à un quelconque dépôt GitHub, et juste ouvrir une partie de votre dossier local. C'est https://vscode.dev. L'extension VSCode-ObjectScript y est également disponible.

    0
    0 83
    Annonce Irène Mykhailova · Jan 24, 2023

    Salut la communauté,


    Rencontrons-nous virtuellement lors de notre première table ronde communautaire en 2023 ! Participez à la discussion sur les bonnes pratiques de développement dans VS Code/Studio, les cas d'utilisation et les questions-réponses.


    📅 Date : 26 janvier
    🕑 Heure : 9 h HE | 15h00 CE

    Inscrivez-vous via Global Masters challenge <

       

    0
    0 65
    Article Iryna Mykhailova · Déc 28, 2022 1m read

    Salut les Devs !

    Pour moi, l'une des choses les plus pénibles à propos d'ObjectScript est de taper ##class(Class).Method() pour appeler une méthode de classe dans le code ou dans un terminal. J'ai même soumis une idée pour le simplifier en ObjectScript.

    Mais! Il y a une nouvelle fonctionnalité dans VSCode ObjectScript qui vient d'être introduite dans le plugin - Copy Invocation !

    Passez simplement le curseur sur le lien Copy Invocation au-dessus de chaque méthode de classe dans un code, cliquez dessus et l'invocation est copiée dans le buffer:

    Collez-le où vous voulez qu'il s'exécute !

    0
    0 93
    Article Iryna Mykhailova · Déc 10, 2022 2m read

    Comme vous l'avez probablement remarqué, la documentation en ligne de produits a énormément progressé ces dernières années. Parmi les nombreuses améliorations sous le capot, la documentation est devenue plus facile à lire et à naviguer. Et nous avons maintenant un puissant moteur de recherche qui vous permet d'accéder à ce dont vous avez besoin avec plus de précision que nous ne pourrions jamais le faire avec l'ancien système de documentation. Alors que la plupart d'entre vous n'ont probablement eu que des impacts positifs sur vos flux de travail, j'ai remarqué que certains d'entre vous ont

    0
    0 55
    Annonce Robert Bira · Oct 17, 2022

    Hourra pour la sécurité !

    Si vous vous connectez à un serveur local et effectuez un développement isolé avec un compte jetable, stockez simplement votre mot de passe en texte brut dans le fichier de configuration settings.json. Mais si vous travaillez avec un serveur partagé en utilisant un "vrai" compte d'utilisateur, c'est une bonne idée de protéger ces informations.

    0
    0 61
    Article Lorenzo Scalese · Oct 10, 2022 3m read

    L'interopérabilité des soins de santé permet d'améliorer les soins aux patients, de réduire les coûts des prestataires de soins et de fournir une image plus précise aux prestataires. Cependant, avec un si grand nombre de systèmes différents, les données sont formatées de nombreuses manières différentes. De nombreuses normes ont été créées pour tenter de résoudre ce problème, notamment HL7v2, HL7v3 et CDA, mais toutes présentent des inconvénients.

    FHIR (Fast Healthcare Interoperability Resources), ou Ressources rapides d'interopérabilité des soins de santé, est un nouveau format pour les échanges des informations médicales qui vise à résoudre ces problèmes. Il est développé par Health Level Seven International (HL7), une organisation qui a également développé HL7v2, HL7v3 et CDA.

    Aujourd'hui nous allons explorer comment créer et valider une ressource FHIR en utilisant le schéma FHIR à l'aide d'IntelliSense et de la fonctionnalité de complétion automatique dans VS Code.

    Etape 1 : Téléchargement du fichier de schéma JSON pour la validation des ressources sur le site officiel de FHIR https://www.hl7.org/fhir/.

    Étape 2: Création d'un dossier (dans cet exemple, j'utilise le dossier Patient et la ressource Patient) et copiage du fichier fhir.schema.json extrait dans le même dossier, puis ouverture du dossier à partir du code VS. 

     

    Étape 3: Configurez le code VS pour reconnaître le schéma FHIR en modifiant le fichier setting.json.
    Appuyez sur CTRL+SHIFT+P et tapez les paramètres de l'espace de travail JSON
     

    Étape 4: Création d'un nouveau fichier patient.fhir.json dans le même dossier.
    Appuyez sur Ctrl+Espace et vous obtiendrez tous les attributs des ressources FHIR à travers IntelliSense

    #

    Ajoutez le type de ressource Patient et tous les attributs liés à la ressource Patient vont apparaître dans l'IntelliSense.

    VS Code validera automatiquement la structure et la syntaxe de la ressource.


     

    Avec l'aide d'IntelliSense et de la fonction de complétion automatique, nous avons créé et validé notre ressource patient.

    Step 5: Affichez la ressource créée dans le serveur FHIR d'InterSystems en utilisant l'API Rest à partir de postman

    Récupérer la ressource patient créée en utilisant la méthode "Get"

    Félicitations, nous avons créé, validé notre ressource patient et réussi à l'envoyer et la récupérer sur le serveur FHIR d'InterSystems en utilisant postman.
    De cette façon, nous pouvons facilement créer et valider n'importe quelle ressource FHIR.

    0
    0 456
    Annonce Irène Mykhailova · Sept 24, 2022

    Salut la communauté,
    Rencontrons-nous virtuellement lors de notre première table ronde communautaire ! Il s'agira d'une discussion amicale de 45 minutes sur un sujet donné : VSCode vs Studio. Imaginez que nous venons de nous réunir pour partager nos réflexions, nos expériences, nos conseils et nos astuces. Si vous souhaitez discuter de questions spécifiques sur un sujet donné, veuillez les partager dans les commentaires.
    📅 Date: 29 septembre
    🕑 Heure : 9h00 ET  | 15h00 CEST
    Inscrivez-vous via ce défi Global Masters. Nous vous enverrons une invitation de calendrier par e-mail

    0
    0 61
    Article Lucas Enard · Sept 18, 2022 8m read

    1. Fhir-client-net

    Ceci est un client fhir simple en c# pour s'exercer avec les ressources fhir et les requêtes CRUD vers un serveur fhir.
    Notez que pour la majeure partie, l'autocomplétion est activée.

    GitHub

    2. Préalables

    Assurez-vous que git et Docker desktop sont installé.

    Si vous travaillez à l'intérieur du conteneur, ces modules sont déjà installés.
    Si ce n'est pas le cas, utilisez nugget pour installer Hl7.Fhir.R4, nous allons utiliser Model et Rest à partir de celui-ci :
    Hl7.Fhir.Model

    Hl7.Fhir.Rest

    3. Installation

    3.1. Installation pour le développement

    Clone/git tire le repo dans n'importe quel répertoire local, par exemple comme indiqué ci-dessous :

    git clone https://github.com/LucasEnard/fhir-client-net.git
    

    Ouvrez le terminal dans ce répertoire et lancez :

    docker build .
    

    3.2. Portail de gestion et VSCode

    Ce référentiel est prêt pour VS Code.

    Ouvrez le dossier fhir-client-net cloné localement dans VS Code.

    Si vous y êtes invité (coin inférieur droit), installez les extensions recommandées.

    3.3. Avoir le dossier ouvert à l'intérieur du conteneur

    Vous pouvez être à l'intérieur du conteneur avant de coder si vous le souhaitez.
    Pour cela, il faut que docker soit activé avant d'ouvrir VSCode.
    Ensuite, dans VSCode, lorsque vous y êtes invité ( coin inférieur droit ), rouvrez le dossier à l'intérieur du conteneur afin de pouvoir utiliser les composants python qu'il contient.
    La première fois que vous effectuez cette opération, cela peut prendre plusieurs minutes, le temps que le conteneur soit préparé.

    Si vous n'avez pas cette option, vous pouvez cliquer dans le coin inférieur gauche et cliquer sur press reopen in container puis sélectionner From Dockerfile

    Plus d'informations ici

    Architecture


    En ouvrant le dossier à distance, vous permettez à VS Code et à tous les terminaux que vous ouvrez dans ce dossier d'utiliser les composants c# dans le conteneur.

    Si vous y êtes invité (coin inférieur droit), installez les extensions recommandées.

    4. Serveur FHIR

    Pour réaliser cette présentation, vous aurez besoin d'un serveur FHIR.
    Vous pouvez soit utiliser le vôtre, soit vous rendre sur le site InterSystems free FHIR trial et suivre les étapes suivantes pour le configurer.

    En utilisant notre essai gratuit, il suffit de créer un compte et de commencer un déploiement, puis dans l'onglet Overview vous aurez accès à un endpoint comme https://fhir.000000000.static-test-account.isccloud.io que nous utiliserons plus tard.
    Ensuite, en allant dans l'onglet d'informations d'identification Credentials, créez une clé api et enregistrez-la quelque part.

    C'est maintenant terminé, vous avez votre propre serveur fhir pouvant contenir jusqu'à 20 Go de données avec une mémoire de 8 Go.

    5. Présentation pas à pas

    La présentation pas à pas du client se trouve à /Client.cs.

    Le code est divisé en plusieurs parties, et nous allons couvrir chacune d'entre elles ci-dessous.

    5.1. Partie 1

    Dans cette partie, nous connectons notre client à notre serveur en utilisant Fhir.Rest.

    
    // Partie 1
    
    // Creation of an htpclient holding the api key of the server as an header
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("x-api-key", "api-key");
    
    var settings = new FhirClientSettings
        {
            Timeout = 0,
            PreferredFormat = ResourceFormat.Json,
            VerifyFhirVersion = true,
            // PreferredReturn can take Prefer.ReturnRepresentation or Prefer.ReturnMinimal to return the full resource or an empty payload
            PreferredReturn = Prefer.ReturnRepresentation
        };
    // Création de notre client en utilisant une correcte url
    var client = new FhirClient("url",httpClient,settings);
    
    

    Afin de vous connecter à votre serveur, vous devez modifier la ligne :

    httpClient.DefaultRequestHeaders.Add("x-api-key", "api-key");
    

    Et cette ligne aussi :

    var client = new FhirClient("url",httpClient,settings);
    

    L'url' est un point de terminaison tandis que l'"api-key" est la clé d'api pour accéder à votre serveur.

    Notez que si vous n'utilisez pas un serveur InterSystems, vous pouvez vérifier comment autoriser vos accès si nécessaire.

    Comme ça, nous avons un client FHIR capable d'échanger directement avec notre serveur.

    5.2. Partie 2

    Dans cette partie, nous créons un Patient en utilisant Fhir.Model et nous le complétons avec un HumanName, en suivant la convention FHIR, use et family sont des chaînes et given est une liste de chaînes. De la même manière, un patient peut avoir plusieurs HumanNames, donc nous devons mettre notre HumanName dans une liste avant de le mettre dans notre patient nouvellement créé.

    
    // Partie 2
    
    // Building a new patient and setting the names
    var patient0 = new Patient();
    patient0.Name.Add(new HumanName().WithGiven("GivenName").AndFamily("FamilyName"));
    
    // Creation of our client in the server
    // It is to be noted that using SearchParams you can check if an equivalent resource already exists in the server
    // For more information https://docs.fire.ly/projects/Firely-NET-SDK/client/crud.html
    var created_pat = client.Create<Patient>(patient0);
    
    Console.Write("Partie 2 : Identifiant du patient nouvellement créé : ");
    Console.WriteLine(created_pat.Id);
    
    

    Après cela, nous devons sauvegarder notre nouveau Patient sur notre serveur en utilisant notre client.

    Notez que si vous lancez Client.cs plusieurs fois, plusieurs Patients ayant le nom que nous avons choisi seront créés.
    C'est parce que, suivant la convention FHIR, vous pouvez avoir plusieurs Patients avec le même nom, seul l' id est unique sur le serveur.
    Vérifier la documentation pour avoir plus d'information.
    Il est à noter qu'en utilisant SearchParams vous pouvez vérifier si une ressource équivalente existe déjà sur le serveur avant de la créer.
    Pour plus d'information https://docs.fire.ly/projects/Firely-NET-SDK/client/crud.html

    Nous conseillons donc de commenter la ligne après le premier lancement.

    5.3. Partie 3

    Dans cette partie, nous avons un client qui recherche un patient nommé d'après celui que nous avons créé précédemment.

    
    // Part 3
    
    // This gets all the Patient having the exact name "FamilyName" and we take the first one
    // Note that if you have multiple patients with the same name, you will get only the first one 
    // We advise to use the id, the names, and any other informations for the SearchParams to be sure to get the right patient
    var q = new SearchParams().Where("name:exact=FamilyName");
    Bundle bund = client.Search<Patient>(q);
    patient0 = bund.Entry[0].Resource as Patient;
    
    Console.Write("Part 3 : Name of the patient we found by searching : ");
    Console.WriteLine(patient0.Name[0]);
    
    
    // Creation of our patient telecom, here a phone number
    patient0.Telecom.Add(new ContactPoint(new ContactPoint.ContactPointSystem(),new ContactPoint.ContactPointUse(),"1234567890"));
    
    // Change the given name of our patient
    patient0.Name[0].Given = new List<string>() { "AnotherGivenName" };
    
    Console.Write("Part 3 : Name of the changed patient : ");
    Console.WriteLine(patient0.Name[0]);
    
    Console.Write("Part 3 : Phone of the changed patient : ");
    Console.WriteLine(patient0.Telecom[0].Value);
    
    // Update the patient
    var update_pat = client.Update<Patient>(patient0);
    
    

    Une fois que nous l'avons trouvé, nous ajoutons un numéro de téléphone à son profil et nous changeons son prénom en un autre.

    Maintenant nous pouvons utiliser la fonction de mise à jour de notre client pour mettre à jour notre patient sur le serveur.

    5.4. Partie 4

    Dans cette section, nous voulons créer une observation pour notre patient. Pour ce faire, nous avons besoin de son identifiant, qui est son identifiant unique.
    A partir de là, nous remplissons notre observation et ajoutons comme sujet, l'identifiant de notre Patient.

    
    // Part 4
    
    // Building of our new observation
    Observation obsv = new Observation {
    
        Value = new Quantity(70, "kg"),
        Code = new CodeableConcept {
            Coding = new List<Coding> {
                new Coding {
                    System = "http://loinc.org",
                    Code = "29463-7",
                    Display = "Body weight"
                }
            }},
        Category = new List<CodeableConcept> {
            new CodeableConcept {
                Coding = new List<Coding> {
                    new Coding {
                        System = "http://snomed.info/sct",
                        Code = "276327007",
                        Display = "Body weight"
                    }
                }
            }},
        Status = new ObservationStatus {},
        Subject = new ResourceReference {
            Reference = "Patient/" + update_pat.Id}
    
        };
    
    // Creation of our observation in the server
    var new_obsv = client.Create<Observation>(obsv);
    
    Console.Write("Part 4 : Id of the observation : ");
    Console.WriteLine(new_obsv.Id);
    
    

    Ensuite, nous enregistrons notre observation à l'aide de la fonction create.

    5.5. Conclusion de la présentation

    Si vous avez suivi ce parcours, vous savez maintenant exactement ce que fait Client.cs, vous pouvez le lancer et vérifier votre Patient et votre Observation nouvellement créés sur votre serveur.

    Pour le lancer, ouvrez un terminal VSCode et entrez :

    dotnet run
    

    Vous devriez voir des informations sur le Patient créé et son observation.

    Si vous utilisez un serveur Intersystems, allez à API Deployement, autorisez-vous avec la clé api et d'ici vous pouvez OBTENIR par id le patient et l'observation que nous venons de créer.

    7. Comment commencer le codage

    Ce référentiel est prêt à être codé dans VSCode avec les plugins InterSystems. Ouvrez Client.cs pour commencer à coder ou utiliser l'autocomplétion.

    8. Ce qu'il y a dans le référentiel

    8.1. Dockerfile

    Un dockerfile pour créer un dot net env pour que vous puissiez travailler.
    Utilisez docker build . pour construire et rouvrir votre fichier dans le conteneur pour travailler à l'intérieur de celui-ci.

    8.2. .vscode/settings.json

    Fichier de paramètres

    8.3. .vscode/launch.json

    Fichier de configuration si vous voulez déboguer

    0
    0 183
    Article Lucas Enard · Sept 14, 2022 12m read

    1. Fhir-client-python

    Ceci est un client fhir simple en python pour s'exercer avec les ressources fhir et les requêtes CRUD vers un serveur FHIR.
    Notez que pour la plupart, l'autocomplétion est activée, c'est la principale raison d'utiliser fhir.resources.

    GitHub

    2. Préalables

    Assurez-vous que git et Docker desktop sont installé.

    Si vous travaillez à l'intérieur du conteneur, comme il est montré dans 3.3., vous n'avez pas besoin d'installer fhirpy et fhir.resources.

    Si vous n'êtes pas dans le conteneur, vous pouvez utiliser pip pour installer fhirpy et fhir.resources.
    Vérifiez fhirpy et fhir.resources pour plus d'information.

    3. Installation

    3.1. Installation pour le développement

    Clone/git tire le repo dans n'importe quel répertoire local, par exemple comme indiqué ci-dessous :

    git clone https://github.com/LucasEnard/fhir-client-python.git
    

    Ouvrez le terminal dans ce répertoire et lancez :

    docker build.
    

    3.2. Portail de gestion et VSCode

    Ce référentiel est prêt pour VS Code.

    Ouvrez le dossier fhir-client-python cloné localement dans VS Code.

    Si vous y êtes invité (coin inférieur droit), installez les extensions recommandées.

    3.3. Avoir le dossier ouvert à l'intérieur du conteneur

    Vous pouvez être à l'intérieur du conteneur avant de coder si vous le souhaitez.
    Pour cela, il faut que docker soit activé avant d'ouvrir VSCode.
    Ensuite, dans VSCode, lorsque vous y êtes invité ( coin inférieur droit ), rouvrez le dossier à l'intérieur du conteneur afin de pouvoir utiliser les composants python qu'il contient.
    La première fois que vous effectuez cette opération, cela peut prendre plusieurs minutes, le temps que le conteneur soit préparé.

    Si vous n'avez pas cette option, vous pouvez cliquer dans le coin inférieur gauche et cliquer sur Ouvrir à nouveau dans le conteneur puis sélectionner De Dockerfile

    Plus d'informations ici

    Architecture


    En ouvrant le dossier à distance, vous permettez à VS Code et à tous les terminaux que vous ouvrez dans ce dossier d'utiliser les composants python dans le conteneur.

    4. Serveur FHIR

    Pour réaliser cette présentation, vous aurez besoin d'un serveur FHIR.
    Vous pouvez soit utiliser le vôtre, soit vous rendre sur le site InterSystems free FHIR trial et suivre les étapes suivantes pour le configurer.

    En utilisant notre essai gratuit, il suffit de créer un compte et de commencer un déploiement, puis dans l'onglet Overview vous aurez accès à un endpoint comme https://fhir.000000000.static-test-account.isccloud.io que nous utiliserons plus tard.
    Ensuite, en allant dans l'onglet d'informations d'identification Credentials, créez une clé api et enregistrez-la quelque part.

    C'est maintenant terminé, vous avez votre propre serveur fhir pouvant contenir jusqu'à 20 Go de données avec une mémoire de 8 Go.

    5. Présentation pas à pas

    La présentation pas à pas du client se trouve à src/client.py.

    Le code est divisé en plusieurs parties, et nous allons couvrir chacune d'entre elles ci-dessous.

    5.1. Partie 1

    Dans cette partie, nous connectons notre client à notre serveur en utilisant fhirpy et nous obtenons nos ressources Patient à l'intérieur de la variable patients_resources.
    A partir de cette variable nous pourrons fecth n'importe quel Patient et même les trier ou obtenir un Patient en utilisant certaines conditions.

    #Partie 1----------------------------------------------------------------------------------------------------------------------------------------------------
    #Créer notre client connecté à notre serveur
    client = SyncFHIRClient(url='url', extra_headers={"x-api-key":"api-key"})
    
    #Obtenir les ressources de notre patient dans lesquelles nous pourrons aller chercher et rechercher
    patients_resources = client.resources('Patient')
    

    Afin de vous connecter à votre serveur, vous devez modifier la ligne :

    client = SyncFHIRClient(url='url', extra_headers={"x-api-key":"api-key"})
    

    L'url' est un point de terminaison tandis que l'"api-key" est la clé d'api pour accéder à votre serveur.

    Notez que si vous n'utilisez pas un serveur InterSystems, vous pouvez vérifier comment changer extra_headers={"x-api-key":"api-key"} en authorization = "api-key".

    Comme ça, nous avons un client FHIR capable d'échanger directement avec notre serveur.

    5.2. Partie 2

    Dans cette partie, nous créons un Patient en utilisant Fhir.Model et nous le complétons avec un HumanName, en suivant la convention FHIR, use et family sont des chaînes et given est une liste de chaînes. e la même manière, un patient peut avoir plusieurs HumanNames, donc nous devons mettre notre HumanName dans une liste avant de le mettre dans notre patient nouvellement créé.

    #Partie 2----------------------------------------------------------------------------------------------------------------------------------------------------
    #Nous voulons créer un patient et l'enregistrer sur notre serveur
    
    #Créer un nouveau patient en utilisant fhir.resources
    patient0 = Patient()
    
    #Créer un HumanName et le remplir avec les informations de notre patient
    name = HumanName()
    name.use = "official"
    name.family = "familyname"
    name.given = ["givenname1","givenname2"]
    
    patient0.name = [name]
    
    #Vérifier notre patient dans le terminal
    print()
    print("Our patient : ",patient0)
    print()
    
    #Sauvegarder (post) notre patient0, cela va le créer sur notre serveur
    client.resource('Patient',**json.loads(patient0.json())).save()
    

    Après cela, nous devons sauvegarder notre nouveau Patient sur notre serveur en utilisant notre client.

    Notez que si vous lancez client.py plusieurs fois, plusieurs Patients ayant le nom que nous avons choisi seront créés.
    C'est parce que, suivant la convention FHIR, vous pouvez avoir plusieurs Patients avec le même nom, seul l' id est unique sur le serveur.
    Alors pourquoi n'avons-nous pas rempli notre Patient avec un id de la même façon que nous avons rempli son nom ?
    Parce que si vous mettez un id à l'intérieur de la fonction save(), la sauvegarde agira comme une mise à jour avant d'agir comme un sauveur, et si l'id n'est en fait pas déjà sur le serveur, il le créera comme prévu ici. Mais comme nous avons déjà des patients sue notre serveur, ce n'est pas une bonne idée de créer un nouveau patient et d'allouer à la main un Identifiant puisque la fonction save() et le serveur sont faits pour le faire à votre place.

    Nous conseillons donc de commenter la ligne après le premier lancement.

    5.3. Partie 3

    Dans cette partie, nous avons un client qui cherche dans nos patients_resources un patient nommé d'après celui que nous avons créé précédemment.

    #Partie 3----------------------------------------------------------------------------------------------------------------------------------------------------
    #Maintenant, nous voulons obtenir un certain patient et ajouter son numéro de téléphone et changer son nom avant de sauvegarder nos changements sur le serveur
    
    #Obtenez le patient en tant que fhir.resources Patient de notre liste de ressources de patients qui a le bon nom, pour la commodité, nous allons utiliser le patient que nous avons créé avant
    patient0 = Patient.parse_obj(patients_resources.search(family='familyname',given='givenname1').first().serialize())
    
    #Créer le nouveau numéro de téléphone de notre patient
    telecom = ContactPoint()
    
    telecom.value = '555-748-7856'
    telecom.system = 'phone'
    telecom.use = 'home'
    
    #Ajouter le téléphone de notre patient à son dossier
    patient0.telecom = [telecom]
    
    #Changer le deuxième prénom de notre patient en "un autre prénom"
    patient0.name[0].given[1] = "anothergivenname"
    
    #Vérifiez notre Patient dans le terminal
    print()
    print("Notre patient avec le numéro de téléphone et le nouveau prénom : ",patient0)
    print()
    
    #Sauvegarder (mettre) notre patient0, ceci sauvera le numéro de téléphone et le nouveau prénom au patient existant de notre serveur
    client.resource('Patient',**json.loads(patient0.json())).save()
    

    Une fois que nous l'avons trouvé, nous ajoutons un numéro de téléphone à son profil et nous changeons son prénom en un autre.

    Maintenant nous pouvons utiliser la fonction de mise à jour de notre client pour mettre à jour notre patient sur le serveur.

    5.4. Partie 4

    Dans cette partie, nous voulons créer une observation pour notre patient précédent, pour ce faire, nous cherchons d'abord notre patients_resources pour notre patient, puis nous obtenons son identifiant, qui est son identificateur unique.

    #Partie 4----------------------------------------------------------------------------------------------------------------------------------------------------
    #Maintenant nous voulons créer une observation pour notre client
    
    #Obtenir l'identifiant du patient auquel vous voulez attacher l'observation
    id = Patient.parse_obj(patients_resources.search(family='familyname',given='givenname1').first().serialize()).id
    print("id of our patient : ",id)
    
    #Placer notre code dans notre observation, code qui contient des codages qui sont composés de système, code et affichage
    coding = Coding()
    coding.system = "https://loinc.org"
    coding.code = "1920-8"
    coding.display = "Aspartate aminotransférase [Activité enzymatique/volume] dans le sérum ou le plasma"
    code = CodeableConcept()
    code.coding = [coding]
    code.text = "Aspartate aminotransférase [Activité enzymatique/volume] dans le sérum ou le plasma"
    
    #Créer une nouvelle observation en utilisant fhir.resources, nous entrons le statut et le code dans le constructeur car ils sont nécessaires pour valider une observation
    observation0 = Observation(status="final",code=code)
    
    #Définir notre catégorie dans notre observation, catégorie qui détient les codages qui sont composés de système, code et affichage
    coding = Coding()
    coding.system = "https://terminology.hl7.org/CodeSystem/observation-category"
    coding.code = "laboratoire"
    coding.display = "laboratoire"
    category = CodeableConcept()
    category.coding = [coding]
    observation0.category = [category]
    
    #Définir l'heure de notre date effective dans notre observation
    observation0.effectiveDateTime = "2012-05-10T11:59:49+00:00"
    
    #Régler l'heure de notre date d'émission dans notre observation
    observation0.issued = "2012-05-10T11:59:49.565+00:00"
    
    #Définir notre valueQuantity dans notre observation, valueQuantity qui est composée d'un code, d'un unir, d'un système et d'une valeur
    valueQuantity = Quantity()
    valueQuantity.code = "U/L"
    valueQuantity.unit = "U/L"
    valueQuantity.system = "https://unitsofmeasure.org"
    valueQuantity.value = 37.395
    observation0.valueQuantity = valueQuantity
    
    #Définir la référence à notre patient en utilisant son identifiant
    reference = Reference()
    reference.reference = f"Patient/{id}"
    observation0.subject = reference
    
    #Vérifiez notre observation dans le terminal
    print()
    print("Notre observation : ",observation0)
    print()
    
    #Sauvegarder (poster) notre observation0 en utilisant notre client
    client.resource('Observation',**json.loads(observation0.json())).save()
    

    Ensuite, nous enregistrons notre observation à l'aide de la fonction save().

    5.5. Conclusion de la présentation

    Si vous avez suivi ce parcours, vous savez maintenant exactement ce que fait client.py, vous pouvez le lancer et vérifier votre Patient et votre Observation nouvellement créés sur votre serveur.

    6. Comment ça marche

    6.1. Les importations

    from fhirpy import SyncFHIRClient
    
    from fhir.resources.patient import Patient
    from fhir.resources.observation import Observation
    from fhir.resources.humanname import HumanName
    from fhir.resources.contactpoint import ContactPoint
    
    import json
    

    La première importation est le client, ce module va nous aider à nous connecter au serveur, à obtenir et exporter des ressources.

    Le module fhir.resources nous aide à travailler avec nos ressources et nous permet, grâce à l'auto-complétion, de trouver les variables dont nous avons besoin.

    La dernière importation est json, c'est un module nécessaire pour échanger des informations entre nos 2 modules.

    6.2. Création du client

    client = SyncFHIRClient(url='url', extra_headers={"x-api-key":"api-key"})
    

    L''url' est ce que nous avons appelé avant un point de terminaison tandis que l'"api-key"' est la clé que vous avez générée plus tôt.

    Notez que si vous n'utilisez pas un serveur InterSystems, vous voudrez peut-être changer le extra_headers={"x-api-key" : "api-key"} en authorization = "api-key"
    Comme ça, nous avons un client FHIR capable d'échanger directement avec notre serveur.

    Par exemple, vous pouvez accéder à vos ressources Patient en faisant patients_resources = client.resources('Patient') , fà partir de là, vous pouvez soit obtenir vos patients directement en utilisant patients = patients_resources.fetch() ou en allant chercher après une opération, comme :
    patients_resources.search(family='familyname',given='givenname').first() cette ligne vous donnera le premier patient qui sort ayant pour nom de famille 'familyname' et pour nom donné 'givenname'.

    6.3. Travailler sur nos ressources

    Une fois que vous avez les ressources que vous voulez, vous pouvez les analyser dans une ressource fhir.resources.

    Par exemple :

    patient0 = Patient.parse_obj(patients_resources.search(family='familyname',given='givenname1').first().serialize())
    

    patient0 est un patient de fhir.resources, pour l'obtenir nous avons utilisé nos patients_resources comme cela a été montré précédemment où nous avons sélectionné un certain nom de famille et un prénom, après cela nous avons pris le premier qui est apparu et l'avons sérialisé.
    En mettant ce patient sérialisé à l'intérieur d'un Patient.parse_obj nous allons créer un patient de fhir.resources .

    Maintenant, vous pouvez accéder directement à n'importe quelle information que vous voulez comme le nom, le numéro de téléphone ou toute autre information.
    Pour ce faire, utilisez juste par exemple :

    patient0.name
    

    Cela renvoie une liste de HumanName composée chacune d'un attribut use un attribut family un attribut given as the FHIR convention is asking.
    Cela signifie que vous pouvez obtenir le nom de famille de quelqu'un en faisant :

    patient0.name[0].family
    

    6.4. Sauvegarder nos changements

    Pour enregistrer toute modification de notre serveur effectuée sur un fhir.resources ou pour créer une nouvelle ressource serveur, nous devons utiliser à nouveau notre client.

    client.resource('Patient',**json.loads(patient0.json())).save()
    

    En faisant cela, nous créons une nouvelle ressource sur notre client, c'est-à-dire un patient, qui obtient ses informations de notre fhir.resources patient0. Ensuite, nous utilisons la fonction save() pour poster ou mettre notre patient sur le serveur.

    7. Comment commencer le codage

    Ce référentiel est prêt à être codé dans VSCode avec les plugins InterSystems. Ouvrez /src/client.py pour commencer à coder ou utiliser l'autocomplétion.

    8. Ce qu'il y a dans le référentiel

    8.1. Dockerfile

    Le dockerfile le plus simple pour démarrer un conteneur Python.
    Utilisez docker build . pour construire et rouvrir votre fichier dans le conteneur pour travailler à l'intérieur de celui-ci.

    8.2. .vscode/settings.json

    Fichier de paramètres.

    8.3. .vscode/launch.json

    Fichier de configuration si vous voulez déboguer.

    0
    0 808
    Article Lucas Enard · Sept 12, 2022 9m read

    1. Fhir-client-java

    Ceci est un client fhir simple en java pour s'exercer avec les ressources fhir et les requêtes CRUD vers un serveur fhir.
    Notez que pour la majeure partie, l'autocomplétion est activée.

    GitHub

    2. Préalables

    Assurez-vous que git et Docker desktop sont installé.

    Déjà installé dans le conteneur :
    Hapi Fhir modèle et client

    3. Installation

    3.1. Installation pour le développement

    Clone/git tire le repo dans n'importe quel répertoire local, par exemple comme indiqué ci-dessous :

    git clone https://github.com/LucasEnard/fhir-client-java.git
    

    Ouvrez le terminal dans ce répertoire et exécutez :

    docker build .
    

    3.2. Portail de gestion et VSCode

    Ce référentiel est prêt pour CodeVS.

    Ouvrez le dossier fhir-client-java cloné localement dans VS Code.

    Si vous y êtes invité (coin inférieur droit), installez les extensions recommandées.

    3.3. Avoir le dossier ouvert à l'intérieur du conteneur

    Vous pouvez être à l'intérieur du conteneur avant de coder si vous le souhaitez.
    Pour cela, il faut que docker soit activé avant d'ouvrir VSCode.
    Ensuite, dans VSCode, lorsque vous y êtes invité ( coin inférieur droit ), rouvrez le dossier à l'intérieur du conteneur afin de pouvoir utiliser les composants python qu'il contient.
    La première fois que vous effectuez cette opération, cela peut prendre plusieurs minutes, le temps que le conteneur soit préparé.

    Si vous n'avez pas cette option, vous pouvez cliquer dans le coin inférieur gauche et cliquer sur Ouvrir à nouveau dans le conteneur puis sélectionner De Dockerfile

    Plus d'informations ici

    Architecture


    En ouvrant le dossier à distance, vous permettez à VS Code et à tous les terminaux que vous ouvrez dans ce dossier d'utiliser les composants java dans le conteneur.

    4. Serveur FHIR

    Pour réaliser cette présentation, vous aurez besoin d'un serveur FHIR.
    Vous pouvez soit utiliser le vôtre, soit vous rendre sur le site Essai FHIR gratuit d'InterSystems et suivre les étapes suivantes pour le configurer.

    En utilisant notre essai gratuit, il suffit de créer un compte et de commencer un déploiement, puis dans l'onglet Overview vous aurez accès à un endpoint comme https://fhir.000000000.static-test-account.isccloud.io que nous utiliserons plus tard.
    Ensuite, en allant dans l'onglet d'informations d'identification Credentials, créez une clé api et enregistrez-la quelque part.

    C'est maintenant terminé, vous avez votre propre serveur fhir pouvant contenir jusqu'à 20 Go de données avec une mémoire de 8 Go.

    5. Présentation pas à pas

    La présentation pas à pas du client se trouve à src/java/test/Client.java.

    Le code est divisé en plusieurs parties, et nous allons couvrir chacune d'entre elles ci-dessous.

    5.1. Partie 1

    Dans cette partie, nous connectons notre client à notre serveur en utilisant Fhir.Rest.

    
    // Partie 1
    
          // Créer un contexte en utilisant FHIR R4
          FhirContext ctx = FhirContext.forR4();
    
          // créer un en-tête contenant la clé api pour le httpClient
          Header header = new BasicHeader("x-api-key", "api-key");
          ArrayList<Header> headers = new ArrayList<Header>();
          headers.add(header);
    
          // créer un constructeur httpClient et lui ajouter l'en-tête
          HttpClientBuilder builder = HttpClientBuilder.create();
          builder.setDefaultHeaders(headers);
    
          // créer un httpClient à l'aide du constructeur
          CloseableHttpClient httpClient = builder.build();
    
          // Configurer le httpClient au contexte en utilisant la fabrique
          ctx.getRestfulClientFactory().setHttpClient(httpClient);
    
          // Créer un client
          IGenericClient client = ctx.newRestfulGenericClient("url");
    
    

    Afin de vous connecter à votre serveur, vous devez modifier la ligne :

    Header header = new BasicHeader("x-api-key", "api-key");
    

    Et cette ligne aussi :

    IGenericClient client = ctx.newRestfulGenericClient("url");
    

    L'url' est un point de terminaison tandis que l'"api-key" est la clé d'api pour accéder à votre serveur.

    Notez que si vous n'utilisez pas un serveur InterSystems, vous pouvez vérifier comment autoriser vos accès si nécessaire.

    Comme ça, nous avons un client FHIR capable d'échanger directement avec notre serveur.

    5.2. Partie 2

    Dans cette partie, nous créons un Patient en utilisant Fhir.Model et nous le complétons avec un HumanName, en suivant la convention FHIR, use et family sont des chaînes et given est une liste de chaînes. De la même manière, un patient peut avoir plusieurs HumanNames, donc nous devons mettre notre HumanName dans une liste avant de le mettre dans notre patient nouvellement créé.

    
    // Partie 2
    
          // Créer un patient et lui ajouter un nom
          Patient patient = new Patient();
          patient.addName()
             .setFamily("FamilyName")
             .addGiven("GivenName1")
             .addGiven("GivenName2");
    
          // Voir aussi patient.setGender ou setBirthDateElement
    
          // Créer le patient ressource sur le serveur
    		MethodOutcome outcome = client.create()
             .resource(patient)
             .execute();
    
          // Enregistrez l'ID que le serveur a attribué
          IIdType id = outcome.getId();
          System.out.println("");
          System.out.println("Created patient, got ID: " + id);
          System.out.println("");
    

    Après cela, nous devons sauvegarder notre nouveau Patient sur notre serveur en utilisant notre client.

    Notez que si vous lancez Client.java plusieurs fois, plusieurs Patients ayant le nom que nous avons choisi seront créés.
    C'est parce que, suivant la convention FHIR, vous pouvez avoir plusieurs Patients avec le même nom, seul l' id est unique sur le serveur.
    Vérifier the doc pour avoir plus d'information.
    Nous conseillons donc de commenter la ligne après le premier lancement.

    5.3. Partie 3

    Dans cette partie, nous avons un client qui recherche un patient nommé d'après celui que nous avons créé précédemment.

    // Partie 3
    
          // Rechercher un patient unique avec le nom de famille exact "NomDeFamille" et le prénom exact "Prénom1"
          patient = (Patient) client.search()
             .forResource(Patient.class)
             .where(Patient.FAMILY.matchesExactly().value("FamilyName"))
             .and(Patient.GIVEN.matchesExactly().value("GivenName1"))
             .returnBundle(Bundle.class)
             .execute()
             .getEntryFirstRep()
             .getResource();
    
          // Créer une télécommunication pour le patient
          patient.addTelecom()
             .setSystem(ContactPointSystem.PHONE)
             .setUse(ContactPointUse.HOME)
             .setValue("555-555-5555");
    
          // Changer le prénom du patient en un autre
          patient.getName().get(0).getGiven().set(0,  new StringType("AnotherGivenName"));
    
          // Mettre à jour le patient de ressource sur le serveur
          MethodOutcome outcome2 = client.update()
             .resource(patient)
             .execute();
    

    Une fois que nous l'avons trouvé, nous ajoutons un numéro de téléphone à son profil et nous changeons son prénom en un autre.

    Maintenant nous pouvons utiliser la fonction de mise à jour de notre client pour mettre à jour notre patient sur le serveur.

    5.4. Partie 4

    Dans cette section, nous voulons créer une observation pour notre patient. Pour ce faire, nous avons besoin de son identifiant, qui est son identifiant unique.
    A partir de là, nous remplissons notre observation et ajoutons comme sujet, l'identifiant de notre Patient.

    // Partie 4
    
          // Créer un CodeableConcept et le remplir
          CodeableConcept codeableConcept = new CodeableConcept();
          codeableConcept.addCoding()
             .setSystem("http://snomed.info/sct")
             .setCode("1234")
             .setDisplay("CodeableConceptDisplay");
    
          // Créer une quantité et la remplir
          Quantity quantity = new Quantity();
          quantity.setValue(1.0);
          quantity.setUnit("kg");
    
          // Créer une catégorie et la remplir
          CodeableConcept category = new CodeableConcept();
          category.addCoding()
             .setSystem("http://snomed.info/sct")
             .setCode("1234")
             .setDisplay("CategoryDisplay");
    
          // Créer une liste de CodeableConcepts et y placer des catégories
          ArrayList<CodeableConcept> codeableConcepts = new ArrayList<CodeableConcept>();
          codeableConcepts.add(category);
    
          // Créer une observation
          Observation observation = new Observation();
          observation.setStatus(Observation.ObservationStatus.FINAL);
          observation.setCode(codeableConcept);
          observation.setSubject(new Reference().setReference("Patient/" + ((IIdType) outcome2.getId()).getIdPart()));
          observation.setCategory(codeableConcepts);
          observation.setValue(quantity);
    
          System.out.println("");
          System.out.println("Created observation, reference : " + observation.getSubject().getReference());
          System.out.println("");
    
           // Créer l'observation de ressource sur le serveur
          MethodOutcome outcome3 = client.create()
             .resource(observation)
             .execute();
    
          // Imprimer la réponse du serveur
          System.out.println("");
          System.out.println("Created observation, got ID: " + outcome3.getId());
          System.out.println("");
    

    Ensuite, nous enregistrons notre observation à l'aide de la fonction de création.

    5.5. Conclusion de la présentation

    Si vous avez suivi ce parcours, vous savez maintenant exactement ce que fait Client.java, vous pouvez le lancer et vérifier votre Patient et votre Observation nouvellement créés sur votre serveur.

    Pour le lancer, ouvrez un terminal VSCode et entrez :

    dotnet run
    

    Vous devriez voir des informations sur le Patient créé et son observation.

    Si vous utilisez un serveur Intersystems, allez à API Deployement, autorisez-vous avec la clé api et d'ici vous pouvez OBTENIR par id le patient et l'observation que nous venons de créer.

    6. Comment commencer le codage

    Ce référentiel est prêt à être codé dans VSCode avec les plugins InterSystems. Ouvrez Client.java pour commencer à coder ou utiliser l'autocomplétion.

    7. Ce qu'il y a dans le référentiel

    7.1. Dockerfile

    Un dockerfile pour créer un dot net env pour que vous puissiez travailler.
    Utilisez docker build . pour construire et rouvrir votre fichier dans le conteneur pour travailler à l'intérieur de celui-ci.

    7.2. .vscode/settings.json

    Fichier de paramètres.

    7.3. .vscode/launch.json

    Fichier de configuration si vous voulez déboguer

    0
    0 220
    Annonce Irène Mykhailova · Juin 15, 2022

    Nous avons hâte de voir tout le monde au InterSystems Global Summit la semaine prochaine !
    George James Software sera présent pour proposer des démonstrations de notre contrôle de source Deltanji. Il a été prouvé qu'il améliore l'efficacité des développeurs individuels, des grandes organisations et de tous les autres en apportant de la clarté au développement de votre système. Il encourage la gestion de la configuration, la gestion des versions et le contrôle des processus pour améliorer la qualité de votre code.
    Si vous souhaitez en savoir plus, rendez-vous dans le pavillon des partenaires ou réservez pour notre session de groupe d'utilisateurs pendant le déjeuner du mercredi 22 juin. Envoyez un e-mail laurelj@georgejames.com pour nous informer de votre présence.

     

    0
    0 78
    Annonce Irène Mykhailova · Juin 8, 2022

    Venez nous dire bonjour dans le pavillon des partenaires du Global Summit !Nous présenterons notre débogueur sur place Serenji qui a subi de grands changements au cours de la dernière année. Les utilisateurs peuvent désormais profiter d'une expérience de débogage transparente sans aucune configuration, tout en profitant des dernières fonctionnalités de VS Code lui-même, permettant aux utilisateurs d'identifier en douceur et de corriger rapidement les erreurs dans votre code, contribuant ainsi à la production d'un code de qualité et maintenable.Si vous voulez voir Serenji en action, rendez-vous

    0
    0 84
    InterSystems officiel Robert Bira · Mai 10, 2022

    Ce mois, j'annonce la sortie de la version 1.8.0 de l'extension VS Code qui contient les améliorations et corrections de bogues suivantes.

    La grande nouveauté est la prise en charge des fichiers de projet côté serveur, comme certains d'entre vous se souviendront de Studio. Si vous travaillez côté client, VS Code possède déjà d'excellentes fonctionnalités de gestion de projet. Vous pouvez simplement utiliser un dossier en tant que projet ou utiliser des multi-root workspaces. Mais si vous travaillez côté serveur, vous apprécierez peut-être de meilleures capacités de gestion des artefacts, et c'est de cela qu'il s'agit. Pour en savoir plus, consultez ce nouveau chapitre Projects de la documentation.

    Changelog pour 1.8.0

    • Améliorations
      • Ajout de la prise en charge des projets côté serveur (#851)
      • Implémenter le changement de nom et la suppression du dossier isfs (#923, #922)
      • Prise en charge de l'indicateur "mapped" pour les isfs et les filtres d'exportation, pour exclure les packages mappés à partir d'autres bases de données (#931)

    Le changelog complet pour toutes les versions est ici.

    Comme toujours, si vous avez déjà installé l'extension, VS Code devrait automatiquement mettre à jour votre extension. Si vous êtes un nouvel utilisateur, suivez ces instructions pour commencer.

    0
    0 72
    Annonce Irène Mykhailova · Avr 2, 2022

    InterSystems a le plaisir d'annoncer la version 2.0.0 du Language Server pour VS Code. Le serveur de langage augmente l'extension VS Code ObjectScript pour fournir une meilleure coloration de la syntaxe, une documentation intégrée, la complétion de code et plus encore. Des informations détaillées sont disponibles dans le fichier README du GitHub. La version 2.0.0 ajoute la prise en charge d'un certain nombre de nouvelles architectures de plate-forme, y compris les Mac M1 ! Il réduit également la taille du package, améliore la coloration SQL et corrige un certain nombre d'autres problèmes détaillés dans le CHANGELOG.

    Comme toujours, si vous avez déjà installé l'extension, VS Code devrait automatiquement mettre à jour votre extension lorsque vous redémarrez ou rechargez. Si vous êtes un nouvel utilisateur, suivez ces instructions pour commencer.

    0
    0 110