accéder à la publication Sylvain Guilbaud · Août 29, 2023 NB : pour le stockage orienté colonne indiqué au niveau de la table via l'instruction WITH STORAGETYPE = COLUMNAR , il est à noter qu'IRIS se laisse la liberté de choisir pour vous le stockage le plus communément optimal (en ligne ou en colonne), en fonction des types de données. Exemple : l'instruction suivante : CREATE TABLE a.addressV1 ( city varchar(50), zip varchar(15), country varchar(15) ) WITH STORAGETYPE = COLUMNAR Ne créera aucun stockage orienté colonne, lié au risque de données trop disparates, du fait du nombre de caractères autorisés dans chaque colonne (15 ou 50) : Class a.addressV1 Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = addressV1 ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1; alors que l'exemple donné dans l'article, retient bien une colonne (et une seule) en stockage orienté colonne, puisqu'ayant seulement 5 caractères autorisés pour la colonne zip. CREATE TABLE a.addressV2 ( city varchar(50), zip varchar(5), country varchar(15) ) WITH STORAGETYPE = COLUMNAR Class a.addressV2 Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = addressV2 ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 5) [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1;
accéder à la publication Sylvain Guilbaud · Août 29, 2023 Merci @Iryna Mykhailova pour ce brillant article ! Très clair et intelligemment présenté.
accéder à la publication Sylvain Guilbaud · Août 29, 2023 Avec embedded Python, vous pouvez avoir un code assez simple en utilisant pandas : /// Convert an Excel file to a CSV file ClassMethod XLStoCSV(source As %String = "/data/sample.xlsx") As %Status [ Language = python ] { import pandas as pd read_file = pd.read_excel(source) read_file.to_csv(source+'.csv', index = None, header=True) }
accéder à la publication Sylvain Guilbaud · Août 28, 2023 La syntax correcte à utiliser pour exclure les schémas système est : \%*
accéder à la publication Sylvain Guilbaud · Août 28, 2023 En fait, exclure tous les schémas '%' ne fonctionne pas très bien : avec cette option tous les noms de schémas sont masqués et quand on veut voir les données, les requêtes échouent du fait que toutes les tables sont considérées comme appartenant au schema par défaut SQLUser.
accéder à la publication Sylvain Guilbaud · Août 28, 2023 La solution consiste à utiliser les filtres Schémas / Utilisateurs : En ajoutant '%' dans les schémas / utilisateurs à exclure :
accéder à la publication Sylvain Guilbaud · Août 24, 2023 La réponse parfaite avec l'API appropriée à utiliser a été donnée par @Vitaliy Serdtsev USER>zn "%sys" %SYS>w ##class(SYS.Database).%OpenId("/is/iris/mgr/irisaudit").Size 11 %SYS>w ##class(%SYS.Audit).Erase(1) 1 %SYS>w ##class(SYS.Database).%OpenId("/is/iris/mgr/irisaudit").Size 1 Avec dans le messages.log : 08/24/23-17:31:00:649 (23676) 0 [Database.FullExpansion] Expansion completed for database /is/iris/mgr/irisaudit/. Expanded by 10 MB. 08/24/23-17:33:38:885 (48001) 0 [Generic.Event] Dismounted database /is/iris/mgr/irisaudit/ (SFN 4) 08/24/23-17:33:39:955 (48001) 0 [Database.MountedRW] Mounted database /is/iris/mgr/irisaudit/ (SFN 4) read-write.
accéder à la publication Sylvain Guilbaud · Août 24, 2023 Bonjour @Taher C, je te suggère de créer des API REST dans IRIS et de les consommer depuis PowerApps/PowerAutomate. Tu trouveras ici un exemple de comment envoyer une requête http depuis PowerAutomate : https://www.spguides.com/rest-api-in-power-automate/ NB : Hubic est le nom historique du projet chez CFAO, qui n'a pas d'équivalence avec InterSystems Ensemble ni IRIS 😉
accéder à la publication Sylvain Guilbaud · Août 24, 2023 Faire la modification depuis la classe %SYSTEM.CSP en utilisant $system.CSP.SetConfig: CSS>d $system.CSP.DisplayConfig() ... CSS>w $system.CSP.GetConfig("DefaultPasswordChangePage") %CSP.PasswordChange.cls CSS>d $system.CSP.SetConfig("DefaultPasswordChangePage","CSS.CSP.ChangePassword.cls") CSS>w $system.CSP.GetConfig("DefaultPasswordChangePage") CSS.CSP.ChangePassword.cls
accéder à la publication Sylvain Guilbaud · Août 23, 2023 Bonjour, vous pouvez aussi utiliser une méthode "low-code" en utilisant le langage DTL avec l'action REMOVE utils.HL7.transfo.removeSegment Class utils.HL7.transfo.removeSegment Extends Ens.DataTransformDTL [ DependsOn = EnsLib.HL7.Message ] { Parameter IGNOREMISSINGSOURCE = 0; Parameter REPORTERRORS = 1; Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ] { <transform sourceClass='EnsLib.HL7.Message' targetClass='EnsLib.HL7.Message' sourceDocType='2.6:ADT_A01' targetDocType='2.6:ADT_A01' create='copy' language='objectscript' > <assign value='' property='target.{EVN}' action='remove' /> <assign value='' property='target.{DG1()}' action='remove' /> </transform> } }
accéder à la publication Sylvain Guilbaud · Août 23, 2023 Bonjour @lilian taroua,s'il y a des points particuliers que vous souhaitez aborder dans un premier temps, merci de nous les indiquer pour qu'on puisse vous répondre plus précisément.
accéder à la publication Sylvain Guilbaud · Août 23, 2023 Bonjour @lilian taroua pour avoir une traduction de la doc en ligne, je vous conseille d'ajouter une extension (ex: Chrome Google Traduction). Le résultat n'est pas parfait (Traduttore, traditore 🤔) mais permet quand même de répondre en partie au besoin assez rapidement et de manière efficace. Exemple ci-dessous :
accéder à la publication Sylvain Guilbaud · Août 22, 2023 Fyrstain compte à ce jour 4 certifiés FHIR, ce qui est remarquable puisque cela représente 50% des certifiés en France.
accéder à la publication Sylvain Guilbaud · Août 18, 2023 FHIR SQL Builder Le FHIR® SQL Builder, ou Builder, est un outil de projection sophistiqué utilisé pour créer des schémas SQL personnalisés à l'aide de données dans un référentiel FHIR sans déplacer ni dupliquer les données vers un référentiel SQL distinct. Le Builder est conçu spécifiquement pour fonctionner avec les référentiels FHIR et les bases de données multimodèles dans les produits InterSystems. L'objectif du Builder est de permettre aux analystes de données et aux développeurs de Business Intelligence de travailler avec FHIR à l'aide d'outils analytiques familiers, sans avoir à apprendre une nouvelle syntaxe de requête. Les données FHIR sont codées dans un graphe orienté complexe et ne peuvent pas être interrogées à l'aide de la syntaxe SQL standard. Un langage de requête basé sur des graphes, FHIRPath, est conçu pour interroger les données FHIR, mais il n'est pas relationnel. En permettant à un gestionnaire de données de créer une projection SQL personnalisée de son référentiel FHIR, à l'aide de tables, de colonnes et d'index, le générateur permet aux analystes de données d'interroger les données FHIR sans la complexité de l'apprentissage de FHIRPath ou de la syntaxe de recherche FHIR.
accéder à la publication Sylvain Guilbaud · Août 18, 2023 Standard vs. Norme "FHIR est un standard (et pas une norme). Un standard d’interopérabilité de modélisation de la donnée de santé. Si vous voulez une norme, il faut prendre les profils français créés par l’ANS par exemple. Les profils permettent de normaliser le standard FHIR pour le rendre beaucoup plus contraignant." Luc FHIR pour les développeurs "Au-delà de l'interopérabilité, FHIR apporte la modélisation de la donnée. C'est un standard orienté développeurs ; le but étant d'être un standard présenté comme un langage compréhensible par des développeurs. FHIR est censé faciliter le développement des applications de santé, en apportant la couche transport et la couche modélisation. Il ne reste plus qu'à développer une application. C’est vraiment sur la partie modélisation de la données de santé que FHIR est une révolution." Luc "Clairement il n'y a pas photo entre HL7 V2 et HL7 FHIR. Avec le FHIR je me retrouve dans ma zone de confort de développeur en informatique industrielle, avec des API standardisées, au format JSON, avec des grappes d'objet ; c'est une révolution pour un développeur." Guillaume Cas d'Usage "Le partage de documents, énorme sujets sur l'IoT (cf. Mon Espace Santé), l'hospitalisation à domicile, etc. Le plus gros cas d’usage, que l’on attend depuis des années, c’est la communication ville-hôpital. C’est de pouvoir partir avec son dossier médical quand on déménage." Luc FHIR est le Web 3.0 des données de santé « À l’identique du Web 3.0, le FHIR tient la promesse de décentraliser les données. Avec FHIR, moi j’ai un rêve, c’est que mon dossier patient soit stocké sur mon téléphone, pour que quand je voyage, quand je déménage, quand j’ai une consultation chez mon médecin traitant ou à l’hôpital, j’autorise le professionnel de santé à accéder à mon dossier, pour qu’il amende mon dossier et que je le récupère. » Guillaume Entrepôts de Données de Santé (EDS) « FHIR peut aussi être utilisé pour standardiser les entrepôts de données de santé (EDS) ; par exemple, le consentement, l’anonymisation/pseudonymisation, la récupération de données, les mappings sémantiques et syntaxiques pour rendre la donnée utilisable, etc. ) et pour standardiser les données dans les EDS. » Luc « La grande différence entre l’OMOP et le FHIR réside dans le fait qu’OMOP est à la base orienté stockage des données médicales avec un modèle de données travaillant sur les couches basses alors que FHIR est un standard à la base d’échanges et d’interopérabilité sur les couches hautes. » Guillaume OMOP « L’orientation à rechercher est de créer des serveurs FHIR avec des exports OMOP, qui est la solution la plus adaptée pour un EDS. » Luc « FHIR stocke les données au format documentaire, ce qui ne facilite pas les recherches dynamiques (ex: en SQL), à l’inverse de l’OMOP dont le format des données est basé sur un modèle relationnel, typique des requêtes exprimées en langage SQL. InterSystems rompt cette barrière en permettant de projeter les données FHIR en relationnel, sans duplication des données, et donc de les ouvrir à de la recherche médicale. » Guillaume CQL « CQL Clinical Quality Language, un standard développé par HL7, est un langage de haut niveau, spécifique à un domaine, axé sur la qualité clinique et destiné à la modélisation de processus, pour standardiser des règles à des fins d’aide à la décision (ex: gestion populationnelle, risque de contre-indication médicamenteuse, etc.). » Luc « Le gros bénéfice, c’est qu’avec le CQL et le FHIR, les règles deviennent portables ; on n’a plus besoin de regrouper toutes les règles et les données au même endroit ; on à juste à répliquer les règles pour les appliquer sur différents entrepôts de données, pour ensuite regrouper les résultats. » Guillaume
accéder à la publication Sylvain Guilbaud · Fév 14, 2023 Sous Mac, l'accès aux "snippets" (ou extraits) se fait depuis Code > Règlages > Configurer les extraits de l'utilisateur
accéder à la publication Sylvain Guilbaud · Fév 14, 2023 Merci @Eduard Lebedyuk et @Lorenzo Scalese pour cette information très utile
accéder à la publication Sylvain Guilbaud · Avr 25, 2022 Le #GlobalSummit est le lieu idéal pour accélérer votre développement, en rencontrant InterSystems et son écosystème.