Recherche

Effacer le filtre

#InterSystems IRIS BI (DeepSee)

4 Publications0 Abonnés

Carlos Madrid Intersystems Download

0 publications0 commentaires
Article
Lorenzo Scalese · Mars 13, 2023

InterSystems IRIS REST API Template

Ce Template s'agit d'un modèle de l' application API REST construite avec ObjectScript dans Intersystems IRIS. Il dispose également d'une spécification OPEN API, peut être développé avec Docker et VSCode et peut être déployé en tant que module IPM. Conditions préalables Assurez-vous que vous avez installé git et Docker desktop. Installation avec IPM zpm:USER>install rest-api-template Installation pour le développement Créez votre référentiel à partir d'un modèle. Clonez/git le dépôt dans n'importe quel répertoire local, par exemple comme indiqué ci-dessous (je montre ici tous les exemples liés à ce dépôt, mais je suppose que vous avez vos propres exemples dérivés du modèle) : $ git clone git@github.com:intersystems-community/iris-rest-api-template.git Ouvrez le terminal dans ce répertoire et lancez: $ docker-compose up -d --build ou ouvrez le dossier dans VSCode et procédez comme suit: Comment s'en servir Ce modèle crée une application web REST /crud sur IRIS qui met en œuvre 4 types de communication : GET, POST, PUT et DELETE alias opérations CRUD. Ces interfaces fonctionnent avec un exemple de classe persistante dc.Sample.Person. Ouvrez http://localhost:52773/swagger-ui/index.html pour tester l'API REST Test des requêtes GET Pour tester GET, vous devez disposer de données. Vous pouvez les créer avec une requête POST (voir ci-dessous), ou vous pouvez créer de fausses données de test. Pour cela, ouvrez le terminal IRIS ou le terminal web sur /localhost:52773/terminal/ et appelez : USER>do ##class(dc.Sample.Person).AddTestData(10) Cela va créer 10 enregistrements aléatoires dans la classe dc.Sample.Person. Vous pouvez obtenir la documentation de Swagger Open API 2.0 sur : localhost:52773/crud/_spec Cette API REST expose deux requêtes GET: toutes les données et un enregistrement. Pour obtenir toutes les données dans l'appel JSON: localhost:52773/crud/persons/all Pour demander les données d'un enregistrement particulier, fournissez l'identifiant dans la requête GET comme 'localhost:52773/crud/persons/id' . Par exemple: localhost:52773/crud/persons/1 Cela renverra des données JSON pour la personne avec ID = 1, par exemple : {"Name":"Elon Mask","Title":"CEO","Company":"Tesla","Phone":"123-123-1233","DOB":"1982-01-19"} Test de la requête POST Créez une requête POST, par exemple dans Postman, avec des données brutes en JSON, par exemple. {"Name":"Elon Mask","Title":"CEO","Company":"Tesla","Phone":"123-123-1233","DOB":"1982-01-19"} Ajustez l'autorisation si nécessaire - elle est basique pour le conteneur avec le login et le mot de passe par défaut pour le conteneur de l'édition communautaire IRIR et envoyez la requête POST à localhost:52773/crud/persons/ Cela va créer un enregistrement dans la classe dc.Sample.Person d'IRIS. Test de la requête PUT La requête PUT pourrait être utilisée pour mettre à jour les enregistrements. Il faut envoyer le même JSON que dans la requête POST ci-dessus en fournissant l'identifiant de l'enregistrement mis à jour dans l'URL. Par exemple, nous voulons changer l'enregistrement avec id = 5. Préparez le JSON en format raw dans Postman comme suit : {"Name":"Jeff Besos","Title":"CEO","Company":"Amazon","Phone":"123-123-1233","DOB":"1982-01-19"} et envoyez la requête put à: localhost:52773/crud/persons/5 Test de la requête de suppression DELETE Pour la requête de suppression, cette API REST attend uniquement l'identifiant de l'enregistrement à supprimer. Par exemple, si l'id=5, l'appel de suppression DELETE suivant supprimera l'enregistrement: localhost:52773/crud/persons/5 Comment lancer le codage Ce référentiel est prêt à être codé dans VSCode avec le plugin ObjectScript. Installez VSCode et le plugin ObjectScript et ouvrez le dossier dans VSCode. Ouvrez la classe /src/cls/PackageSample/ObjectScript.cls et essayez d'y apporter des modifications - elle sera compilée dans le conteneur docker IRIS en cours d'exécution. N'hésitez pas à supprimer le dossier PackageSample et à placer vos classes ObjectScript sous la forme /src/cls/Package/Classname.cls Le script dans Installer.cls importera tout ce que vous placez sous /src/cls dans IRIS. Contenu du référentiel Dockerfile Le fichier docker le plus simple pour démarrer IRIS et charger ObjectScript à partir du dossier /src/cls Utilisez le fichier docker-compose.yml associé pour configurer facilement des paramètres supplémentaires comme le numéro de port et où mapper les clés et les dossiers d'hôte. .vscode/settings.json Fichier de configuration pour vous permettre de coder immédiatement en VSCode avec le plugin VSCode ObjectScript. .vscode/launch.json Fichier de configuration si vous voulez déboguer avec VSCode ObjectScript
Article
Iryna Mykhailova · Mai 22, 2023

Embedded Python sur InterSystems d'un coup d'œil

###![](/sites/default/files/inline/images/feature-selection-techniques-in-machine-learning2_3.png)           Bonjour à la communauté, Dans cet article, je vais démontrer l'utilisation d'Embedded Python, nous allons couvrir les sujets suivants : * 1-Aperçu d'Embedded Python * 2-Utilisation d'Embedded Python * 2.1- Utilisation d'une bibliothèque Python à partir d'ObjectScript * 2.2- Appel des API d'InterSystems à partir de Python * 2.3- Utilisation conjointe d'ObjectScript et de Python * 3-Utilisation des fonctions intégrées de python * 4-Modules et bibliothèques Python  * 5-Les cas d'utilisation d'Embedded Python * 5.1- Impression d'un PDF en utilisant la bibliothèque Python **Reportlab** * 5.2- Création d'un code QR à l'aide de la bibliothèque Python **Qrcode** * 5.3- Obtention de la localisation GEO à l'aide de la bibliothèque Python **Folium** * 5.4- Générer et marquer des emplacements sur une carte interactive en utilisant biblithèque** **Python **Folium** * 5.5- Analyse de données à l'aide de la biblithèque Python **Pandas** ** ****** * 6-Résumé Commençons donc par un aperçu **![](/sites/default/files/inline/images/line.png)  ** ## 1-Aperçu d'Embedded Python Python intégré est une fonctionnalité de la plateforme de données InterSystems IRIS qui permet aux développeurs Python d'obtenir un accès complet et direct aux données et aux fonctionnalités d'InterSystems IRIS. InterSystems IRIS est livré avec un puissant langage de programmation intégré appelé ObjectScript qui est interprété, compilé et exécuté à l'intérieur de la plate-forme de données. Comme ObjectScript s'exécute dans le contexte d'InterSystems IRIS, il a un accès direct à la mémoire et aux appels de procédure de la plate-forme de données. Python intégré est une extension du langage de programmation Python qui permet l'exécution du code Python dans le contexte du processus InterSystems IRIS. Comme ObjectScript et Python opèrent tous deux sur la même mémoire objet, on peut dire que les objets Python ne se contentent pas d'émuler des objets ObjectScript, mais qu'ils sont des objets ObjectScript. La coégalité de ces langages signifie qu'il est possible de choisir le langage le plus approprié pour le travail, ou le langage que l'on est le plus à l'aise à utiliser pour écrire des applications. ![](/sites/default/files/inline/images/line_0.png)   ## ****2-Utilisation d'Embedded Python**** Lorsque vous utilisez Python intégré, vous pouvez écrire votre code selon trois modalités différentes. ### 2.1 - Utilisation d'une bibliothèque Python à partir d'ObjectScript Tout d'abord, vous pouvez écrire un fichier .py ordinaire et l'appeler à partir du contexte IRIS d'InterSystems. Dans ce cas, la plateforme de données lancera le processus Python et vous permettra d'importer un module appelé IRIS, qui attache automatiquement le processus Python au noyau IRIS et vous donne accès à toutes les fonctionnalités d'ObjectScript à partir du contexte de votre code Python. ![](/sites/default/files/inline/images/images/image(5840).png) ### 2.2 - Appel des API d'InterSystems à partir de Python Deuxièmement, vous pouvez écrire du code ObjectScript ordinaire et instancier un objet Python à l'aide du paquet %SYS.Python. Ce paquet ObjectScript vous permet d'importer des modules et des bibliothèques Python, puis de travailler avec cette base de code à l'aide de la syntaxe ObjectScript. Le paquet %SYS.Python permet aux développeurs ObjectScript sans aucune connaissance de Python d'utiliser le riche écosystème des bibliothèques Python dans leur code ObjectScript. **![](/sites/default/files/inline/images/images/image(5822).png)** ****2.3 - Utilisation conjointe d'ObjectScript et de Python**** Troisièmement, vous pouvez créer une définition de classe InterSystems et écrire des méthodes en Python. Tout appel à cette méthode lancera l'interpréteur Python. Cette méthode a l'avantage de remplir le mot-clé self de ce bloc de code Python d'une référence à l'instance de la classe qui le contient. En outre, en utilisant Python pour écrire des méthodes de classe dans les classes InterSystems, vous pouvez facilement mettre en œuvre des méthodes qui gèrent différents événements de saisie de données en SQL, tels que l'ajout d'une nouvelle ligne à un tableau. Cela permet également de développer rapidement des procédures stockées personnalisées en Python. **![](/sites/default/files/inline/images/images/image(5823).png)** Comme vous pouvez le constater, Python intégré vous permet de choisir le langage de programmation le mieux adapté à la tâche sans compromettre les performances. ![](/sites/default/files/inline/images/line_1.png) ## ****3-Utilisation des fonctions intégrées de python**** L'interpréteur Python a un certain nombre de fonctions et de types intégrés qui sont toujours disponibles. Ils sont répertoriés ici par ordre alphabétique. <colgroup><col><col><col><col></colgroup> Fonctions integrées A abs() aiter() all() any() anext() ascii()   B bin() bool() breakpoint() bytearray() bytes()   C callable() chr() classmethod() compile() complex()   D delattr() dict() dir() divmod()   E enumerate() eval() exec()   F filter() float() format() frozenset()   G getattr() globals()   H hasattr() hash() help() hex()   I id() input() int() isinstance() issubclass() iter() L len() list() locals()   M map() max() memoryview() min()   N next()   O object() oct() open() ord()   P pow() print() property()         R range() repr() reversed() round()   S set() setattr() slice() sorted() staticmethod() str() sum() super()   T tuple() type()   V vars()   Z zip()   _ __import__() ******Utilisation des **fonctions intégrées**** de python Pour utiliser les fonctions intégrées de Python, nous avons besoin d'importer "builtins", puis nous pouvons invoquer la fonction set builtins = ##class(%SYS.Python).Import("builtins") La fonction print() de Python est en fait une méthode du module intégré, de sorte que vous pouvez maintenant utiliser cette fonction à partir d'ObjectScript : USER>do builtins.print("hello world!") hello world! USER>set list = builtins.list() USER>zwrite list list=5@%SYS.Python ; [] ; De même, la méthode help() permet d'obtenir de l'aide sur l'objet liste. USER>do builtins.help(list) L'aide sur l'objet liste: classe list(object) | list(iterable=(), /) | | Séquence mutable intégrée. | | Si aucun argument n'est donné, le constructeur crée une nouvelle liste vide. | L'argument doit être un itérable s'il est spécifié. | | Les méthodes définies ici : | | __add__(self, value, /) | Renvoi de la valeur+self. | | __contains__(self, key, /) | Renvoi de la clé dans self. | | __delitem__(self, key, /) | Suppression de la [clé] self. ##![](/sites/default/files/inline/images/line_2.png)   ## ******4-Modules et bibliothèques Python****** Certains modules ou bibliothèques python sont installés par défaut et déjà disponibles. La fonction help("module") permet de visualiser ces modules : ****![Sortie de la liste des bibliothèques Python 1](https://cdn.educba.com/academy/wp-content/uploads/2020/10/Python-libraries-list-output-1.png.webp)**** ![](/sites/default/files/inline/images/line_8.png)   ## ******Installation d'un module ou d'une bibliothèque python****** Outre ces modules, python a des centaines de modules ou de bibliothèques, qui peuvent être consultés sur pypi.org ( L' Indice de Paquet Python (PyPI) est un dépôt de logiciels pour le langage de programmation Python). **![](/sites/default/files/inline/images/images/image(5839).png)** Si nous avons besoin d'autres bibliothèques, nous devons les installer à l'aide de la commande intersystems irispip. Par exemple, Pandas est une bibliothèque d'analyse de données en python. La commande suivante utilise le programme d'installation de paquets irispip pour installer pandas sur un système Windows : C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas Veuillez noter que C:\NInterSystems sera remplacé par le répertoire d'installation d'Intersystems. **![](/sites/default/files/inline/images/line_3.png)  ** 5-Les cas d'utilisation d'Embedded Python ********5.1-Impression d' un PDF en utilisant la bibliothèque Python Reportlab******** Nous devons installer la bibliothèque Reportlab à l'aide de la commande irispip, puis créer une fonction objectcript. Compte tenu de l'emplacement d'un fichier, la méthode ObjectScript suivante, intitulée CreateSamplePDF(), crée un exemple de fichier PDF et l'enregistre à cet emplacement. Class Demo.PDF { ClassMethod CreateSamplePDF(fileloc As %String) As %Status { set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas") set canvas = canvaslib.Canvas(fileloc) do canvas.drawImage("C:\Sample\isc.png", 150, 600) do canvas.drawImage("C:\Sample\python.png", 150, 200) do canvas.setFont("Helvetica-Bold", 24) do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.") do canvas.save() } } La première ligne de la méthode importe le fichier canvas.py du sous-paquet pdfgen de ReportLab. La deuxième ligne de code instancie un objet Canvas et procède ensuite à l'appel de ses méthodes, de la même manière qu'elle appellerait les méthodes de n'importe quel objet IRIS d'InterSystems. Vous pouvez ensuite appeler la méthode de la manière habituelle :  do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf") Le PDF suivant est généré et enregistré à l'emplacement spécifié : **![PDF d'une page avec le logo InterSystems, le logo Python et le texte : InterSystems IRIS et Python. Une association parfaite.](https://docs.intersystems.com/irislatest/csp/docbook/images/aepython_pdf.png)** **![](/sites/default/files/inline/images/line_4.png)  ** ### ********5.2-Création d'un code QR à l'aide de la bibliothèque Python Qrcode Library******** Pour générer un code QR, nous devons installer la bibliothèque Qrcode en utilisant la commande irispip, puis en utilisant le code ci-dessous, nous pouvons générer un code QR: ******![](/sites/default/files/inline/images/images/image(5833).png)****** **![](/sites/default/files/inline/images/line_5.png)  ** ### ********5.3-Obtention de la localisation GEO à l'aide de la bibliothèque Python Folium******** Pour obtenir des données géographiques, nous devons installer la bibliothèque Folium à l'aide de la commande irispip, puis créer la fonction de script objet ci-dessous : Class dc.IrisGeoMap.Folium Extends %SwizzleObject { // Fonction d'impression de la latitude, de la longitude et des détails de l'adresse ClassMethod GetGeoDetails(addr As %String) [ Language = python ] { from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent="IrisGeoApp") try: location = geolocator.geocode(addr) print("Location:",location.point) print("Address:",location.address) point = location.point print("Latitude:", point.latitude) print("Longitude:", point.longitude) except: print("Not able to find location") } } ********Connectez-vous au terminal IRIS et exécutez le code suivant******** do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142") ********Le résultat sera le suivant ::******** ## ********![image](https://user-images.githubusercontent.com/18219467/216948111-94ec04a3-4b65-4c29-b5a0-a6a4fe367009.png)******** ****![](/sites/default/files/inline/images/line_6.png)  **** ******** ### ********5.4-********Générer et marquer des emplacements sur une carte interactive en utilisant biblithèque** **Python Folium****************   Nous utiliserons la même bibliothèque Python Folium pour générer et marquer des emplacements sur une carte interactive, la fonction de script objet ci-dessous fera le travail souhaité : ClassMethod MarkGeoDetails(addr As %String, filepath As %String) As %Status [ Language = python ] { import folium from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent="IrisGeoMap") #split address in order to mark on the map locs = addr.split(",") if len(locs) == 0: print("Veuillez saisir l'adresse") elif len(locs) == 1: location = geolocator.geocode(locs[0]) point = location.point m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10) else: m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3) for loc in locs: try: location = geolocator.geocode(loc) point = location.point folium.Marker( location=[point.latitude,point.longitude], popup=addr, ).add_to(m) except: print("Impossible de trouver l'emplacement : ",loc) map_html = m._repr_html_() iframe = m.get_root()._repr_html_() fullHtml = """ """ fullHtml = fullHtml + iframe fullHtml = fullHtml + """ """ try: f = open(filepath, "w") f.write(fullHtml) f.close() except: print("Impossible d'écrire dans un fichier") } ********Connectez-vous au terminal IRIS et invoquez la fonction MarkGeoDetails******** Nous invoquerons la fonction MarkGeoDetails() de la classe dc.IrisGeoMap.Folium. La fonction nécessite deux paramètres : 1. location/locations(Nous pouvons passer plusieurs lieux en ajoutant "," entre les deux) 2. fichier HTML de trajet Exécutons la commande suivante pour marquer Cambridge MA 02142, NY, Londres, UAE, Jeddah, Lahore, et Glasgow sur la carte et l'enregistrer en tant que fichier "irisgeomap_locations.html". do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html") Le code ci-dessus génère le fichier HTML interactif suivant********:******** ##![image](https://user-images.githubusercontent.com/18219467/216950085-c5f4d2ed-f7bf-41e0-ad85-7e83a3e83fa0.png) ****![](/sites/default/files/inline/images/line_6.png)  **** ******** ### **********5.5-Analyse de données à l'aide de la biblithèque Python Pandas********** Nous devons installer la bibliothèque Pandas à l'aide de la commande irispip, puis nous pouvons utiliser le code ci-dessous pour visualiser les données. ******** ****************![](/sites/default/files/inline/images/images/image(5834).png)******** ****![](/sites/default/files/inline/images/line_7.png)  **** ## ********6-Résumé******** Python intégré d'InterSystems (IEP) est une fonctionnalité puissante qui vous permet d'intégrer du code Python de manière transparente dans vos applications InterSystems. Grâce à IEP, vous pouvez exploiter les nombreuses bibliothèques et cadres disponibles en Python pour améliorer la fonctionnalité de vos applications InterSystems. Dans cet article, nous allons explorer les fonctionnalités et les avantages clés d'IEP. IEP est mis en œuvre sous la forme d'un ensemble de bibliothèques qui vous permettent d'interagir avec des objets Python et d'exécuter du code Python à partir d'applications InterSystems. Il s'agit d'un moyen simple et efficace d'intégrer du code Python dans vos applications InterSystems, ce qui vous permet d'effectuer des analyses de données, de l'apprentissage automatique, du traitement du langage naturel et d'autres tâches qui peuvent être difficiles à mettre en œuvre dans ObjectScript d'InterSystems. L'un des principaux avantages de l'utilisation d'IEP est qu'il permet de faire le lien entre les mondes de Python et d'InterSystems. Il est ainsi facile d'utiliser les points forts des deux langages pour créer des applications puissantes qui combinent le meilleur des deux mondes. IEP permet également d'étendre les fonctionnalités de vos applications InterSystems en exploitant les capacités de Python. Cela signifie que vous pouvez tirer parti du grand nombre de bibliothèques et de cadres disponibles en Python pour effectuer des tâches qui pourraient être difficiles à mettre en œuvre dans ObjectScript d'InterSystems. Python intégré d'InterSystems offre un moyen puissant d'étendre les fonctionnalités de vos applications InterSystems en exploitant les capacités de Python. En intégrant du code Python dans vos applications InterSystems, vous pouvez profiter du grand nombre de bibliothèques et de cadres disponibles dans Python pour effectuer des tâches complexes qui pourraient être difficiles à mettre en œuvre dans ObjectScript d'Intersystems. Merci!
Article
Irène Mykhailova · Mars 22, 2022

Code de conduite de la communauté des développeurs d'InterSystems

## Notre engagement Dans l'intérêt de favoriser un environnement ouvert et accueillant, nous, en tant que contributeurs et gestionnaires, nous nous engageons à garantir que la participation à la communauté des développeurs d'InterSystems soit une expérience sans harcèlement pour tous, indépendamment de l'âge, de la taille, du handicap, de l'appartenance ethnique, de l’expression sexuelle, du niveau d'expérience, de la nationalité, de l'apparence personnelle, de la race, de la religion ou de l'identité et orientation sexuelles. ## Nos règles Exemples de comportements qui contribuent à créer un environnement positif : * Utiliser un langage accueillant et inclusif * Être respectueux des différents points de vue et expériences vécues * Accepter poliment les critiques constructives * Se concentrer sur ce qui est le mieux pour la communauté * Faire preuve d’empathie envers les autres membres de la communauté Exemples de comportements non acceptables : * Utilisation d'un langage ou d'images à caractère sexuel et des avances ou attentions sexuelles non sollicitées * Commentaires insultants/désobligeants (troll) et attaques personnelles ou politiques * Harcèlement public ou privé * Publication d'informations privées d'autrui, telles qu'une adresse physique ou électronique, sans autorisation explicite * Toute autre conduite qui pourrait raisonnablement être considérée comme inappropriée dans un cadre professionnel * Nous acceptons toutes les réclamations et évaluations concernant le comportement et les fonctionnalités des plateformes de données d'InterSystems, mais nous n'acceptons pas et ne discutons pas le comportement et le niveau de service des départements et des employés d'InterSystems. * Nous nous réservons le droit de supprimer toute publication (sans en donner la raison) qui, selon nous, ne fournit pas d'informations utiles aux membres de la communauté. * Nous nous réservons le droit de restreindre l'accès à la communauté (sans donner de raison) aux personnes dont les publications ont été supprimées plusieurs fois. ## Nos responsabilités Les responsables de projet doivent clarifier les critères de comportement acceptables et prendre des mesures correctives appropriées et équitables en réponse à tout cas de comportement inacceptable. Les responsables de projet ont le droit et la responsabilité de supprimer, modifier ou rejeter les commentaires, les commits, le code, les modifications de wiki, les problèmes et autres contributions qui ne sont pas conformes au présent code de conduite, ou de bannir temporairement ou définitivement tout contributeur pour d'autres comportements qu'ils jugent inappropriés, menaçants, offensants ou nuisibles. ## Portée Le présent code de conduite s'applique à toute contribution publique à la communauté des développeurs d'InterSystems, qui peut se trouver sur community.intersystems.com, es.community.intersystems.com et openexchange.intersystems.com. La représentation de la communauté peut être définie et précisée par les responsables de la communauté InterSystems. ## Application Les cas de comportement abusif, de harcèlement ou tout autre comportement inacceptable peuvent être signalés en contactant l'équipe du projet à support@intersystems.com. Toutes les plaintes seront examinées et étudiées par l'équipe de la communauté et se traduiront par une réponse appropriée aux circonstances. L’équipe de la communauté est tenue de respecter la confidentialité à l'égard de la personne qui remonte un incident. Plus de détails sur la politique de mise en application des règles peuvent être publiés séparément. Les membres de la communauté des développeurs d'InterSystems qui ne respectent pas ou n'appliquent pas le code de conduite de bonne foi peuvent subir des répercussions temporaires ou permanentes, comme déterminées par les autres membres responsables de la communauté. ## Attribution Ce code de conduite est adapté du [Contributor Covenant](http://contributor-covenant.org), version 1.4, disponible sur [http://contributor-covenant.org/version/1/4](http://contributor-covenant.org/version/1/4/)
Article
Irène Mykhailova · Avr 25, 2022

Embedded SQL - nouveauté dans InterSystems IRIS

@Benjamin.DeBoe a écrit un excellent article sur les Universal Cached Queries, mais qu'est-ce qu'une Universal Cached Query (UCQ) et pourquoi devrais-je m'en préoccuper si j'écris du bon vieux Embedded SQL? Dans Caché et Ensemble, les Cached Queries seraient générées pour résoudre xDBC et Dynamic SQL. Maintenant, l'Embedded SQL d'InterSystems IRIS a été mis à jour pour utiliser les Cached Queries, d'où l'ajout du mot Universal au nom. Désormais, tout SQL exécuté sur IRIS le sera à partir d'une classe UCQ. Pourquoi InterSystems a-t-il fait cela ? Bonne question ! Le grand avantage ici est la flexibilité dans un environnement opérationnel. Dans le passé, si vous ajoutez un index ou exécutez TuneTable, le SQL dans Cached Queries utilisait immédiatement ces nouvelles informations tandis que l'Embedded SQL restait inchangé jusqu'à ce que la classe ou la routine soit compilée manuellement. Si votre application utilisait des classes déployées ou n'expédiait que du code OBJ, la recompilation sur le système du client n'était pas envisageable. Désormais, toutes les SQL Statements sur un système utiliseront la dernière définition de classe et les dernières données de réglage disponibles. À l'avenir, InterSystems IRIS disposera d'outils optionnels permettant de surveiller et de régler vos systèmes de production chaque soir, en personnalisant les plans SQL en fonction de la manière dont les tableaux sont utilisés. La puissance de l'Universal Cached Query augmentera au fur et à mesure que ces outils se développeront. Est-ce que mon Embedded SQL est plus lent maintenant ? Oui et non. Le fait de lancer une balise dans une routine différente est un peu plus coûteux que de lancer une balise dans la même routine, donc c'est plus lent, mais la génération du code UCQ était différente de celle de la version intégrée, et le fait de pouvoir utiliser ces changements compense largement la dépense liée à l'appel d'une routine différente. Y a-t-il des cas où le code UCQ est plus lent ? Oui, mais dans l'ensemble, les performances devraient être meilleures. Je suis un spécialiste de l'Embedded SQL depuis longtemps et j'aime toujours souligner que l'Embedded SQL est plus rapide que le Dynamic SQL. Il est toujours plus rapide, mais avec tout le travail qui a été fait pour rendre les objets plus rapides, la marge entre les deux styles est assez faible pour que je n'aille pas me moquer de vous si vous utilisez le SQL dynamique. De quelle manière dois-je vérifier les erreurs maintenant ? Le traitement des erreurs pour Embedded SQL n'a pas changé. Le code SQLCODE sera défini par un nombre négatif si nous rencontrons une erreur et %msg sera défini par la description de cette erreur. Ce qui a changé, ce sont les types d'erreurs que vous pouvez obtenir. Par défaut, le SQL ne sera pas compilé avant la première exécution de la requête. Cela signifie que si vous avez mal orthographié un champ ou un tableau dans la routine, l'erreur ne sera pas signalée lors de la compilation de cette routine, elle sera signalée la première fois que vous exécuterez le SQL, comme pour le Dynamic SQL. Le code SQLCODE est défini pour chaque commande SQL, mais si vous êtes paresseux comme moi, vous ne vérifiez jamais le code SQLCODE qu'après un FETCH. Eh bien, maintenant, vous pourriez vouloir commencer à vérifier sur l'OPEN aussi. &SQL(DECLARE cur CURSOR FOR SELECT Name,junk into :var1, :var2 FROM Sample.Person) &SQL(OPEN cur) write !,"Open Status: ",SQLCODE,?20,$G(%msg) for { &SQL(FETCH cur) write !,"Fecth Status: ",SQLCODE,?20,$G(%msg) QUIT:SQLCODE'=0 w !,var1 } &SQL(CLOSE cur) write !,"Close Status: ",SQLCODE,?20,$G(%msg) QUIT Dans le code ci-dessus, j'ai un champ invalide dans le SELECT. Comme nous ne compilons pas le SQL lorsque nous compilons la routine, cette erreur n'est pas signalée. Lorsque j'exécute le code, l'OPEN signale l'erreur de compilation tandis que le FETCH et le CLOSE signalent une erreur de curseur non ouvert. %msg n'est pas modifié, donc si vous le vérifiez à tout moment, vous obtiendrez des informations utiles : USER>d ^Embedded Open Status: -29 Field 'JUNK' not found in the applicable tables^DECLARE cur CURSOR FOR SELECT Name , junk INTO compiling embedded cached query from Embedded.mac Fetch Status: -102 Field 'JUNK' not found in the applicable tables^DECLARE cur CURSOR FOR SELECT Name , junk INTO compiling embedded cached query from Embedded.mac Close Status: -102 Field 'JUNK' not found in the applicable tables^DECLARE cur CURSOR FOR SELECT Name , junk INTO compiling embedded cached query from Embedded.mac Que faire si je ne veux pas modifier mon Embedded SQL ? Vous pouvez toujours le faire en utilisant les Frozen Query Plans. Une petite remarque secondaire, chaque mise à niveau majeure d'IRIS que vous faites bloque toutes les SQL Statements , donc rien ne changera si vous ne le laissez pas faire. Plus d'informations à ce sujet sont disponibles ici. Revenons maintenant à la gestion de l'UCQ. Voici trois façons de bloquer les plans d'Embedded SQL dans votre application : Si vous envoyez un IRIS.DAT : Do $SYSTEM.OBJ.GenerateEmbedded() pour générer l'UTC pour l'Embedded SQL Bloquez les plans : do $SYSTEM.SQL.Statement.FreezeAll() Envoyez le IRIS.DAT Si vous utilisez des fichiers xml : Do $SYSTEM.OBJ.GenerateEmbedded() pour générer l'UTC pour l'Embedded SQL Bloquez les plans : do $SYSTEM.SQL.Statement.FreezeAll() Exporter les plans bloqués : do $SYSTEM.SQL.Statement.ExportAllFrozenPlans() Après avoir téléchargé votre application, téléchargez les plans bloqués : do $SYSTEM.SQL.Statement.ImportFrozenPlans() Bloquez les plans UTC sur le site du client : Chargez le code avec l'Embedded SQL sur le système du client Do $SYSTEM.OBJ.GenerateEmbedded() pour générer l'UTC pour l'Embedded SQL Bloquez tous les plans qui ont été générés : do $SYSTEM.SQL.Statement.FreezeAll() Puis-je revenir au comportement précédent ? Non, la situation est telle qu'elle est aujourd'hui. Du point de vue du développeur, vous pouvez revenir à l'ancien comportement en ajoutant l'indicateur aux options de votre compilateur. Cela indiquera au compilateur de générer la classe UCQ lors de la compilation de la classe ou de la routine. S'il y a un problème avec le SQL, il sera signalé au moment de la compilation, comme c'était le cas auparavant. Compiling routine :Embedded.mac ERROR: Embedded.mac(5) : SQLCODE=-29 : Field 'JUNK' not found in the applicable tables^DECLARE cur CURSOR FOR SELECT Name , junk INTO compiling embedded cached query from Embedded.macDetected 1 errors during compilation in 0.034s. Si vous êtes inquiet de la surcharge liée à la génération des classes UCQ la première fois que l'Embedded SQL est exécuté, vous pouvez ajouter cette étape dans le cadre de l'installation de votre application pour les générer toutes à l'avance : do $SYSTEM.OBJ.GenerateEmbedded() Il s'agit d'un aperçu très rapide de Universal Cached Queries et Embedded SQL. Je ne suis pas entré dans les détails de ce qui se passe à l'intérieur. J'ai simplement essayé de parler des problèmes que les gens peuvent rencontrer lorsqu'ils travaillent avec Embedded SQL dans IRIS. Globalement, le passage à UCQ devrait rendre les performances de SQL plus cohérentes pour tous les types de SQL et faciliter la mise à jour de SQL sur un système de production. Il y aura quelques rajustements. L'ajout de l'indicateur du compilateur me sera d'une grande aide. Maintenant, je dois juste m'habituer à chercher le code généré dans un nouvel endroit. Si vous avez des questions, des commentaires, des doutes à ce sujet, ou tout autre sujet lié à SQL dans InterSystems IRIS, faites-le moi savoir.
Annonce
Irène Mykhailova · Juin 30, 2022

Concours InterSystems Full Stack 2022

Bonjour et bienvenue au 21e concours de programmation d'InterSystems ! 🏆 Concours InterSystems Full Stack 2022 🏆 Durée : 27 juin - 17 juillet 2022 Prix ​​totaux : $10,000 Sujet 💡 Applications Full Stack 💡 Développez une solution Full Stack en utilisant InterSystems IRIS, InterSystems IRIS For Health ou IRIS Cloud Service comme backend. Par Full Stack, nous entendons une application Web ou mobile frontale qui insère, met à jour ou supprime des données dans InterSystems IRIS via REST API, Native API, ODBC/JDBC ou Embedded Python. Quoi de plus ? Cette fois, nous avons décidé d'inviter les développeurs à essayer leurs compétences pour résoudre l'un des défis mondiaux. Nous vous encourageons à participer à ce concours avec des solutions ciblées sur la lutte contre les problèmes de changement climatique : 1) Vous recevrez un bonus spécial si votre application peut résoudre des problèmes liés au réchauffement climatique et au changement climatique.2) Il y aura également un autre bonus si vous préparez et soumettez à Open Exchange un ensemble de données liées au réchauffement climatique et au changement climatique. Alors! Nous attendons avec impatience vos contributions innovantes pour un monde encore plus durable. Aiguisez vos compétences numériques pour développer des solutions aux problèmes climatiques ! Exigences générales : Applications acceptées : nouvelles dans les applications Open Exchange ou existantes, mais avec une amélioration significative. Notre équipe examinera toutes les candidatures avant de les approuver pour le concours. L'application doit fonctionner sur IRIS Community Edition ou IRIS for Health Community Edition ou IRIS Advanced Analytics Community Edition. L'application doit être Open Source et publiée sur GitHub. Le fichier README de l'application doit être en anglais, contenir les étapes d'installation et contenir soit la vidéo de démonstration ou/et une description du fonctionnement de l'application. Prix ​​du concours : 1. Nomination des experts – les gagnants seront sélectionnés par l'équipe d'experts d'InterSystems: 🥇 1ère place - $4,000 🥈 2e place - $2,000 🥉 3e place - $1,000 🌟 4-15ème places - $100 2. Gagnants de la communauté – applications that will receive the most votes in total: 🥇 1ère place - $1,000 🥈 2e place - $750 🥉 3e place - $500 ✨ Badges Global Masters pour tous les gagnants inclus ! Remarque : si plusieurs participants obtiennent le même nombre de votes, ils sont tous considérés comme gagnants et le prix en argent est partagé entre les gagnants. Dates limite importantes : 🛠 Phase de développement et d'inscription de l'application : 27 juin 2022 (00 h 00 HNE) : début du concours. 10 juillet 2022 (23 h 59 HNE) : date limite de soumission. ✅ Période de vote : 11 juillet 2022 (00 h 00 HNE) : début du vote. 17 juillet 2022 (23 h 59 HNE) : Fin des votes. Remarque : Les développeurs peuvent améliorer leurs applications tout au long de la période d'inscription et de vote. Qui peut participer ? Tout membre de la communauté de développeurs, à l'exception des employés d'InterSystems (sous-traitants ISC autorisés). Créer un compte ! Les développeurs peuvent s'associer pour créer une application collaborative. Autorisé de 2 à 5 développeurs dans une équipe. N'oubliez pas de mettre en évidence les membres de votre équipe dans le README de votre application – profils d'utilisateurs DC. Ressources utiles : ✓ Templates InterSystems IRIS Docker adaptés à une application Full Stack : IRIS Full Stack template Basic InterSystems IRIS Docker template IRIS REST API template Native API template IntegratedML template IRIS Analytics template isc-ipm-js isc-perf-ui isc-json isc-rest isc-codetidy ✓ Cours en ligne : Implementing RESTful Applications ✓ Vidéos : REST API design and Development REST API in 5 minutes Data-Driven Web Apps ✓ Pour les débutants : Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ Pour les débutants d'ObjectScript Package Manager (ZPM) : How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM ✓ Comment soumettre votre application au concours : How to publish an application on Open Exchange How to submit an application for the contest Besoin d'aide ? Rejoignez la chaîne du concours sur le serveur Discord ou discutez avec nous dans le commentaire de ce post. Nous avons hâte de voir vos projets! Bonne chance👍 En participant à ce concours, vous acceptez les conditions du concours énoncées ici. Veuillez les lire attentivement avant de continuer.
Article
Iryna Mykhailova · Juil 19, 2022

Différents modèles de données dans InterSystems IRIS

Pour parler des différentes bases de données et des différents modèles de données qu'ils existent, on doit premièrement comprendre ce qui est une base de données et comment les utiliser. Une base de données est une collection organisée de données stockées et accessibles par voie électronique. Elle permet de stocker et de retrouver des données structurées, semi-structurées ou des données brutes souvent en rapport avec un thème ou une activité. Au cœur de chaque base de données se trouve au moins un modèle utilisé pour décrire ses données. Et selon le modèle sur lequel elle est basée, elle peut avoir des caractéristiques un peu différentes et stocker différents types de données. Pour inscrire, retrouver, modifier, trier, transformer ou imprimer les informations de la base de données on utilise un logiciel qui s’appelle système de gestion de base de données (SGBD, en anglais DBMS pour Database management system). La taille, les capacités et les performances des bases de données et de leurs SGBD respectifs ont augmenté de plusieurs ordres de grandeur. Ces augmentations de performances ont été rendues possibles par les progrès technologiques dans différents domaines, tels que les domaines des processeurs, de la mémoire informatique, du stockage informatique et des réseaux informatiques. Le développement ultérieur de la technologie des bases de données peut être divisé en quatre générations basées sur le modèle ou la structure des données : navigation, relationnel, objet et post-relationnel. Contrairement aux trois premières générations, qui se caractérisent par un modèle de données spécifiques, la quatrième comprend de nombreuses bases de données différentes basées sur différents modèles. Ils incluent des modèles de colonnes, graphe, document, composant, multidimensionnel, clé-valeur, en mémoire etc. Toutes ces bases de données sont unies par un seul nom NoSQL (No SQL ou maintenant c’est plus correctement de dire Not only SQL (pas juste SQL)). De plus, maintenant il apparaît une nouvelle classe, qui s’appelle NewSQL. Ce sont des bases de données relationnelles modernes qui vise à fournir les mêmes performances évolutives que les systèmes NoSQL pour les charges de travail de traitement des transactions en ligne (lecture-écriture) tout en utilisant SQL et en maintenant les garanties ACID. D'ailleurs, parmi ces bases de données de quatrième génération, il y a celles qui supportent plusieurs modèles de données évoqués ci-dessus à la fois. Elles s’appellent multi modèles. Un bon exemple de ce type de base de données est InterSystems IRIS. C’est pourquoi je vais l’utiliser pour donner des exemples de différents types de modèles suivant leur apparition. Les premières bases de données utilisaient les modèles hiérarchique ou réseau. Au cœur une structure arborescente où chaque enregistrement n'a qu'un seul possesseur. On peut voir comment ça marche en utilisant l’exemple d’InterSystems IRIS, parce que son modèle principal est hiérarchique et toutes les données sont stockées dans les globales (qui sont des B*-arbres). Vous pouvez lire plus sur les globales ici. On peut créer cet arbre dans IRIS : Set ^a("+7926X", "city") = "Moscow" Set ^a("+7926X", "city", "street") = "Req Square" Set ^a("+7926X", "age") = 25 Set ^a("+7916Y", "city") = "London" Set ^a("+7916Y", "city", "street") = "Baker Street" Set ^a("+7916Y", "age") = 36 Et le voir dans la base de données : Après que Edgar F. Codd a proposé son algèbre relationnelle en 1969 et sa théorie du stockage des données, en utilisant des principes relationnels, les bases de données relationnelles ont été créées. L’utilisation des relations (tables), des attributs (colonnes), des tuples (lignes) et, le plus important, des transactions et des exigences ACID ont rendu ces bases de données très populaires et elles en restent maintenant aussi. Par exemple on a le schéma comme ça : On va avoir les tables comme les suivantes : Et on peut écrire la requête : select p.ID, p.Name, a.Country, A.City from My.Person p left join My.Address a on p.Address = a.ID et recevoir la réponse : Malgré les avantages importants des bases de données relationnelles, avec la diffusion des langages objets, il est devenu nécessaire de stocker des données orientées objet dans des bases de données. C’est pourquoi, dans des années 1990 les premiers systèmes de gestion de bases de données objets et de bases de données objet-relationnel sont apparus. Ces derniers ont été créés sur la base de bases de données relationnelles en ajoutant des add-ons pour simuler le travail avec des objets. Les premiers ont été développés à partir de zéro sur la base des recommandations du consortium OMG (Object Management Group) et après ODMG (Object Data Management Group). Les idées clés de ces bases de données objets sont les suivantes. Le seul entrepôt de données est accessible en utilisant : langage de définition d'objet - définition de schéma, permet de définir des classes, leurs attributs, relations et méthodes, langage objet-requête - langage déclaratif presque SQL qui permet d’obtenir des objets de la base de données, langage de manipulation d'objets - permet de modifier et d'enregistrer des données dans la base de données, prend en charge les transactions et les appels de méthode. Ce modèle permet d'obtenir des données à partir des bases de données en utilisant des langages orientés objet. Si on prend la même structure comme dans un exemple précédent mais dans la forme orientés objet, on va avoir des classes suivantes : Class My.Person Extends %Persistent { Property Name As %Name; Property Address As My.Address; } Class My.Address Extends %Persistent { Property Country; Property City; } Et on peut créer les objets en utilisant la langage orientées objet : set address = ##class(My.Address).%New() set address.Country = "France" set address.City = "Marseille" do address.%Save() set person = ##class(My.Person).%New() set person.Address = address set person.Name = "Quouinaut, Martin" do person.%Save() Malheureusement les bases de données objet n’ont pas réussi à concurrencer les bases de données relationnelles de leur position dominante, et à la suite de cela, de nombreux ORM sont apparus. Dans tous les cas, avec la diffusion d'Internet dans des années 2000 et l'émergence de nouvelles exigences pour le stockage de données, d’autres modèles de données et SGBD ont commencé à être utilisés. Deux de ces modèles qui sont utilisés dans IRIS ce sont des modèles de type document et colonnes. Les bases de données orientées documents sont utilisées pour gérer des données semi-structurées. Il s’agit de données ne suivant pas une structure fixe et portant la structure en elles. Chaque unité d'information dans une telle base de données est une paire simple : une clé et un document spécifique. Ce document est formaté en JSON et contient les informations. Étant donné que la base de données n’exige pas de schéma déterminé, il est également possible d’intégrer différents types de documents dans un même entrepôt. Si on prend encore une fois l’exemple précédent, on peut avoir les documents comme les suivants : { "Name":"Quouinaut, Martin", "Address":{ "Country":"France", "City":"Paris" } } { "Name":"Merlingue, Luke", "Address":{ "Country":"France", "City":"Nancy" }, "Age":26 } Ces deux documents avec un nombre différent de champs sont stockés dans la base de données IRIS sans aucun problème. Et le dernier exemple de modèle qui va être disponible à la version 2022.2, c’est le modèle de colonnes. Dans ce cas, le SGBD stocke les tableaux de données par colonne et non par ligne. L'orientation colonne permet un accès plus efficace aux données pour interroger un sous-ensemble de colonnes (en éliminant le besoin de lire les colonnes qui ne sont pas pertinentes), et plus d'options pour la compression des données. La compression par colonne est aussi plus efficace lorsque les données de la colonne se ressemblent. De plus, on peut aussi utiliser les requêtes SQL pour recevoir les données. Cependant, elles sont généralement moins efficaces pour insérer de nouvelles données. On peut créer ce tableau : Create Table My.Address ( city varchar(50), zip varchar(5), country varchar(15) ) WITH STORAGETYPE = COLUMNAR Dans ce cas, la classe est comme ça : Spoiler Class My.Address Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {UnknownUser}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Address ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50) [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 5) [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15) [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1; /// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement. Do not edit the SqlName of this index. Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ]; Storage Default { <Data name="_CDM_city"> <Attribute>city</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V1</ColumnarGlobal> <Structure>vector</Structure> </Data> <Data name="_CDM_country"> <Attribute>country</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V2</ColumnarGlobal> <Structure>vector</Structure> </Data> <Data name="_CDM_zip"> <Attribute>zip</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V3</ColumnarGlobal> <Structure>vector</Structure> </Data> <DataLocation>^q3AW.DZLd.1</DataLocation> <ExtentLocation>^q3AW.DZLd</ExtentLocation> <ExtentSize>3</ExtentSize> <IdFunction>sequence</IdFunction> <IdLocation>^q3AW.DZLd.1</IdLocation> <Index name="DDLBEIndex"> <Location>^q3AW.DZLd.2</Location> </Index> <Index name="IDKEY"> <Location>^q3AW.DZLd.1</Location> </Index> <IndexLocation>^q3AW.DZLd.I</IndexLocation> <Property name="%%ID"> <AverageFieldSize>3</AverageFieldSize> <Selectivity>1</Selectivity> </Property> <Property name="city"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <Property name="country"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <Property name="zip"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <SQLMap name="%%DDLBEIndex"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="IDKEY"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_city"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_country"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_zip"> <BlockCount>-4</BlockCount> </SQLMap> <StreamLocation>^q3AW.DZLd.S</StreamLocation> <Type>%Storage.Persistent</Type> } } Après on y insérer les données : insert into My.Address values ('London', '47000', 'UK') insert into My.Address values ('Paris', '54000', 'France') insert into My.Address values ('Kyiv', '03000', 'Ukraine') Dans les globales on voit les structures avec ces données : Si on ouvre la globale avec les noms de villes, on verra : Et on peut écrire une requête : select City from My.Address et recevoir des données : Dans ce cas, le SGBD lit juste une globale pour obtenir tout le résultat. Et ça permet de conserver du temps et des ressources lors de la lecture. Ainsi, nous avons parlé de 5 modèles de données différents pris en charge par la base de données InterSystems IRIS. Ce sont le modèle hiérarchique, relationnel, objet, de document et de colonne. Si vous avez des questions n’hésitez pas à me les poser dans les commentaires. Super article, j'adore, il parle aussi bien à des personnes techniques que de culture générale sur les bases de données (SQL, NoSQL, stockage colonne, stockage en ligne). Bref, un must read ! Merci!
Annonce
Irène Mykhailova · Août 29, 2022

Découvrez InterSystems Ideas - Notre portail de commentaires

Salut la communauté ! Nous avons toujours eu cette idée concernant l'amélioration du processus de collecte, d'analyse et de réponse aux demandes d'amélioration de produit de nos membres. Nous savions que nous avions besoin d'une bonne expérience utilisateur et de processus internes encore meilleurs pour nous assurer que les meilleures idées étaient recueillies, entendues et prises en compte. Et enfin, cette pensée s'est concrétisée ! Donc, au cas où vous l'auriez manqué, laissez-moi vous présenter le Portail de commentaires officiel d'InterSystems : 💡 >> InterSystems Ideas << 💡 InterSystems Ideas est une méthode nouvelle et améliorée pour vous permettre de soumettre des demandes d'amélioration de produit et des idées liées à nos services (Documentation, Dev Community, Global Masters, etc.), voir ce que d'autres ont soumis, voter pour vos favoris et obtenir des commentaires de InterSystèmes. Nous commençons le développement et la promotion actifs du portail Ideas et de vos idées. Nous souhaitons que vous disposiez d'un moyen public d'obtenir les commentaires de nos chefs de produit et des membres de la Communauté. ✅ Les idées avec le plus de votes seront envoyées au service de gestion des produits. Partagez vos idées avec la communauté et contribuez en votant et en commentant d'autres idées - plus il y a de votes, plus vous avez d'influence ! À bientôt sur le portail InterSystems Ideas !
Annonce
Irène Mykhailova · Sept 19, 2022

Catégoriser vos idées sur InterSystems Ideas est facile !

Bonjour la communauté, Dans l'annonce précédente, nous avons présenté notre portail de commentaires – InterSystems Ideas! Nous aimerions maintenant vous en dire plus, notamment sur les sujets qui y sont abordés. Vous pouvez soumettre vos idées dans les catégories suivantes : 💡 InterSystems Products où vous pouvez publier des idées de nouvelles orientations de développement pour nos produits : InterSystems IRIS data platform InterSystems IRIS for Health InterSystems HealthShare InterSystems TrakCare 💡 InterSystems Services où vous pouvez publier des idées sur la façon dont nous pouvons améliorer nos services encore mieux qu'ils ne le sont actuellement : Developer Community Open Exchange app gallery Global Masters gamification platform Partner Directory Documentation Certification Learning InterSystems Ideas Portal Il existe également la catégorie "Other" pour les commentaires qui ne sont pas directement liés aux produits ou services InterSystems. Après avoir choisi une catégorie, n'hésitez pas à ajouter également des mots clés/tags : N'hésitez pas à partager vos suggestions de catégories et de mots-clés à ajouter au portail. Nous serons heureux d'avoir de vos nouvelles! Rendez-vous sur le portail InterSystems Ideas ✌️
Annonce
Irène Mykhailova · Oct 18, 2022

[Vidéo] Qu'est-ce que le serveur InterSystems FHIR ?

Salut les Développeurs! Dans cette vidéo, vous découvrirez InterSystems FHIR Server, la solution de données FHIR clé en main qui permet aux développeurs d'applications FHIR de se concentrer sur la création d'applications de soins de santé qui changent la vie. Restez à l'écoute et apprenez-en plus sur le FHIR à l'aide de la rentrée en FHIR !
Annonce
Irène Mykhailova · Oct 18, 2022

Les 30' InterSystems - Bilan entrées /sorties

Bonjur la Communauté! Le deuxième épisode d'une serie "Les 30' InterSystems" sera aujourd'hui ! 📅 Date: mardi 18 octobre 2022 ⏱ Heure: 13:00 Heure d'été d'Europe centrale ⌛️ Durée: 30 minutes Pour le 2e web-épisode de la 3e saison des 30' InterSystems, nous vous proposons une présentation des fonctionnalités du bilan entrées/sorties dans TrakCare lors du suivi clinique du patient. Intervenant: Christophe Aubaret, Spécialiste Applicatif, InterSystems >>INSCRIVEZ-VOUS ICI<< Marquez le calendrier! Nous avons hâte de vous voir là-bas!
Annonce
Irène Mykhailova · Nov 7, 2022

Les 30' InterSystems - Planification des activités de groupe

Bonjur la Communauté! Le troisième épisode d'une serie "Les 30' InterSystems" se passera bientôt ! 📅 Date : mardi 29 novembre 2022⏱ Heure : 13:00 Heure d'été d'Europe centrale⌛️ Durée : 30 minutes Pour le 3e web-épisode de la 3e saison des 30' InterSystems, nous vous présenterons comment organiser, planifier et évaluer des réunions telles que les Réunions de Concertation Pluridisciplinaire (RCP) ou les activités de groupe proposées aux patients de Psychiatrie, d'USLD, ou d'EHPAD. Principales fonctionnalités : Organisation des sessions Inscription des patients et liste de patients récurrents Évaluation Intervenants : 👨‍🔬 Dr Olivier Desvernois, Responsable Applicatifs, InterSystems👩‍💻 Virginie Larroque, Architecte Solutions Santé, InterSystems >> INSCRIVEZ-VOUS ICI << Marquez le calendrier! Nous avons hâte de vous voir là-bas!
Article
Kevin Koloska · Nov 10, 2022

InterSystems IRIS avec Laravel (via ODBC)

Il a été demandé à plusieurs reprises récemment, comment on peut faire fonctionner Laravel Framework avec InterSystems IRIS Data Platform. Cela fait un moment que cet article sur Laravel et InterSystems Caché n’a pas été publié. Pour le mettre à jour, l’article donne un bref ensemble d’instructions sur la façon d’installer et de configurer un projet Laravel pour une utilisation avec InterSystems IRIS via ODBC. Qu’est-ce que Laravel? Laravel est un framework PHP basé sur l’architecture MVC. L’utilisation de Laravel simplifie et accélère le développement backend tout en créant des applications Web sécurisées modernes. Il est très convivial pour les débutants, largement utilisé dans le monde PHP et tend à être le framework backend le plus populaire selon github.com nombre d’étoiles mesuré dans cette vidéo. La combinaison de tout cela avec la flexibilité et les capacités de performance fournies par InterSystems IRIS en tant que base de données est considérée comme bénéfique pour les deux mondes. Ce post est organisé en 4 étapes qui représentent une séquence d’actions à effectuer pour que la connexion fonctionne. Les façons spécifiques d’effectuer chaque étape peuvent varier en fonction de la plate-forme. Les commandes ici sont affichées pour Ubuntu 22.02 (x64). Gestionnaire de pilotes d’installation (unixODBC) Afin de faire fonctionner la connexion, nous devons installer un gestionnaire de pilotes. Les gestionnaires de pilotes les plus couramment utilisés sont 'unixODBC' et 'iODBC'. Ce guide utilise 'unixODBC', qui peut être téléchargé ici http://www.unixodbc.org/ . Veuillez vous référer à la section « Téléchargement » du site Web pour télécharger et construire. Alternativement, les instructions de construction peuvent également être trouvées ici. Nous utiliserons ici les paquets du gestionnaire de paquets 'apt' pour Ubuntu. Installer des packages Installez le package unixodbc accompagné de libodbccr2 qui fournit la bibliothèque unixODBC Cursor. sudo apt mise à jour sudo apt -y installer unixodbc libodbccr2 odbcinst Créer un lien pour la bibliothèque de curseursDans certains cas, il peut y avoir des problèmes avec les dépendances d’objets partagés après l’installation d’unixODBC. Ceci est affiché comme l’erreur « Impossible d’ouvrir la bibliothèque du curseur ». Il existe peu de solutions de contournement décrites sur Internet. Afin de résoudre ce problème, nous faisons un lien symbolique vers une bibliothèque souhaitée. Tout d’abord, nous localisons la bibliothèque: sudo find / -type f -name « libodbccr* » Et puis nous créons un lien sudo ln -s / usr / lib / x86_64-linux-gnu / libodbccr.so.2.0.0 /etc / libodbccr.so Configuration du pilote ODBC pour InterSystems IRIS Le pilote ODBC pour InterSystems IRIS peut être obtenu de différentes manières. Par exemple, le pilote ODBC est inclus dans tous les kits IRIS InterSystems. L’autre option serait Portail de distributions sur wrc.intersystems.com. Vous pouvez également trouver des pilotes pour toutes les plates-formes prises en charge ici : https://intersystems-community.github.io/iris-driver-distribution/ Téléchargez, décompressez et installez le pilote ODBC : sudo mkdir -p / usr / lib / intersystems / odbc cd /usr/lib/intersystems/odbc/ sudo wget -q https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/ODBC/lnxubuntu2004/ODBC-2022.1.0.209.0-lnxubuntu2004x64.tar.gz sudo tar -xzvf / usr / lib / intersystems / odbc / ODBC-2022.1.0.209.0-lnxubuntu2004x64.tar.gz sudo ./ODBCinstall sudo rm -f ODBC-2022.1.0.209.0-lnxubuntu2004x64.tar.gz Après cela, le pilote sera situé dans le dossier suivant /usr/lib/intersystems/odbc/bin/. Des informations supplémentaires sur les pilotes et leur utilisation peuvent être trouvées dans la documentation. Ce guide libirisodbcur6435.so utilise comme bibliothèque de pilotes. Configurer le projet Laravel Le moyen traditionnel et pratique d’interagir avec une base de données de Laravel serait d’utiliser son package Eloquent. Eloquent est un cartographe relationnel objet (ORM) inclus par défaut dans le framework Laravel. Seuls quelques fournisseurs de SGBD sont pris en charge prêts à l’emploi. Ainsi, afin d’implémenter les spécificités de connexion et de générateur de requêtes SQL pour InterSystems IRIS (via ODBC), du code PHP supplémentaire doit être écrit. Grâce à @Jean Dormehl, cette lacune a été comblée pour InterSystems Caché. Le même pourrait être utilisé pour InterSystems IRIS.Donc, dans cet article, nous décrivons les étapes de configuration de la connexion pour le projet Laravel existant en utilisant le paquet jeandormehl / laracache, en supposant que l’installation et la configuration de php, composer et Laravel sont effectuées avant cela. Installer php-odbcAssurez-vous que le module php-odbc est installé. Vous pouvez consulter la liste des modules installés avec la commande suivante : php -m | Le grep ODBC Pour installer l’extension php-odbc, utilisez la commande suivante en utilisant une version appropriée de php installée sur votre environnement sudo apt -y installer php8.1-odbc Installer le paquet 'jeandormehl/laracache'Allez dans le répertoire de votre projet Laravel, installez le paquet et publiez son fichier de configuration. Compositeur requis jeandormehl/laracache php artisan vendor:publish --tag=isc Configurer la connexion IRIS Modifiez votre fichier .env pour qu’il contienne les paramètres nécessaires à la connexion à une base de données. Pour les utilisateurs d’Unix, il devrait ressembler à ceci: DB_CONNECTION=ISC DB_WIN_DSN= DB_UNIX_DRIVER=/usr/lib/intersystems/odbc/bin/libirisodbcur6435.so DB_HOST=127.0.0.1 DB_PORT=1972 DB_DATABASE=UTILISATEUR DB_USERNAME=_SYSTEM DB_PASSWORD=sys Après avoir édité le fichier .env, vous pouvez trouver utile de vider le cache de configuration de l’application: php artisan config:cache Usage Essayons de récupérer quelques données en utilisant notre nouveau package. À titre d’exemple, nous allons créer un modèle hérité de Laracache\Cache\Eloquent\Model . Juste à des fins de test, nous allons compter le nombre de messages envoyés dans l’espace de noms activé pour l’interopérabilité. nano app/Models/EnsMessageHeader.php <?php espace de noms App\Models ; utiliser Laracache\Cache\Eloquent\Model; la classe EnsMessageHeader étend le modèle { protected $table = 'Ens.MessageHeader'; $fillable protégé = [ 'MessageBodyClassName' ]; } Pour exécuter une requête, nous pouvons créer une commande de console artisanale comme celle-ci: Nano routes/console.php <?php utilisez Illuminate\Foundation\Inspiring; utiliser Illuminate\Support\Facades\Artisan; utilisez App\Models\EnsMessageHeader; Artisan::command('iris:test', function () { echo EnsMessageHeader::count() . PHP_EOL; }); Ensuite, l’exécution de la commande suivante devrait récupérer le nombre d’enregistrements PHP artisan iris:test Ce scénario devrait fonctionner pour une large gamme de produits IRIS InterSystems.
Annonce
Robert Bira · Jan 6, 2023

Forrester : InterSystems est reconnu comme un leader

Bonjour la communauté, Je suis heureux de partager avec vous la nouvelle que InterSystems est reconnu comme un leader dans le rapport The Forrester Wave : Translytical Data Platform ! InterSystems IRIS possède des capacités translytiques complètes éprouvées à grande échelle et se démarque par son environnement de développement unifié. Forrester définit les plateformes de données translytiques comme des plateformes de données de nouvelle génération construites sur un moteur de base de données unique pour prendre en charge plusieurs types et modèles de données. En raison de ces tendances, les clients des plateformes de données translytiques devraient rechercher des fournisseurs qui proposent une offre permettant : D'accélérez les cas d'utilisation grâce aux outils et solutions de développement. D'offrir des capacités complètes de gestion de données pour prendre en charge des cas d'utilisation plus larges. D'offrir une gestion de la charge de travail évolutive afin de faire évoluer et d'optimiser les performances. The Forrester Wave™: Translytical Data Platforms, Q4 2022 : InterSystems a une vision forte du produit qui démontre un engagement envers des cas d'utilisation translytiques étendus. Sa feuille de route translytique avancée montre des plans pour étendre les capacités en matière de performance, de mise à l'échelle, de facilité d'utilisation et de gouvernance. Pour voir le rapport, veuillez suivre le lien.