accéder à la publication Sylvain Guilbaud · Sept 8, 2023 Bonjour Franck,une autre façon consiste à définir un mapping utilisant le SQLStorage (comme nous avions commence à l'explorer ensemble). Même si Lorenzo t'a déjà donné la solution avec $Query, à toute fin utile pour d'autres cas, je t'invite à consulter les articles de @Brendan Bannon The Art of Mapping Globals to Classes 1 of 3 mappingexample1.zip The Art of Mapping Globals to Classes (2 of 3) mapping.example2.zip The Art of Mapping Globals to Classes (3 of 3) MappingExample3.zip The Art of Mapping Globals to Classes (4 of 3) The Art of Mapping Globals to Classes (5 of 3 avec tous les exemples ici
accéder à la publication Sylvain Guilbaud · Sept 4, 2023 Bonjour @yurimarx Marx, et aujourd'hui, vous pouvez ajouter à cette liste : Embedded Python Adaptive Analytics (AtScale) System Alerting and Monitoring (SAM) InterSystems Kubernetes Operator (IKO) Améliorations SQL sur les performances et les capacités (Global Iterator, Columnar Storage, Adaptive Parallel Execution, LOAD DATA, etc.) Améliorations du noyau (Mirroring, etc.) Améliorations sur la sécurité etc. (cf. release notes)
accéder à la publication Sylvain Guilbaud · Sept 4, 2023 Et cette diapositive date de plus de 2 ans...
accéder à la publication Sylvain Guilbaud · Sept 4, 2023 Bonjour @Yuri Marx, en le tout premier sujet, je mettrai en tête de liste : 0. meilleures performances Cela peut paraître évident, mais IRIS est **vraiment** plus rapide que Caché.
accéder à la publication Sylvain Guilbaud · Août 31, 2023 Le moyen le plus simple de toujours rester dans le siècle en cours est : $ZDATEH("26/05/23",4,,6) Il suffit d'utiliser yearopt = 6 pour obtenir toutes les dates qui n'ont que 2 chiffres dans le siècle courant. w $zdt($ZDATEH("26/05/23",4,,6),3) 2023-05-26 w $zdt($ZDATEH("26/05/1923",4,,6),3) 1923-05-26
accéder à la publication Sylvain Guilbaud · Août 30, 2023 Pour activer l'ensemble des événements d'AUDIT système, il suffit d'exécuter la requête SQL suivante depuis l'espace de noms %SYS : update security.events set enabled=1 where flags = 1 exemple : set tRes = ##class(%SQL.Statement).%ExecDirect(,"update security.events set enabled=1 where flags = 1") if tRes.%SQLCODE=0 { set ^["USER"]TRACE("%SYS Security.Events")=tRes.%ROWCOUNT_" successfully enabled" } else { set ^["USER"]TRACE("%SYS Security.Events")=tRes.%Message_" SQLCODE:"_tRes.%SQLCODE }
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.