Nueva publicación

Encontrar

Artículo
· 29 mayo, 2024 Lectura de 3 min

Descripción general de las opciones de uso de InterSystems IRIS® SQL - Parte 1

  

Hola comunidad,

En esta serie de artículos, exploraremos las siguientes opciones de uso de InterSystems SQL:

  1. SQL embebido

  2. SQL dinámico

  3. Class Queries


Descripción general SQL

InterSystems SQL proporciona un conjunto completo de funciones relacionales estándar, incluida la capacidad de definir esquemas de tablas, ejecutar consultas y definir y ejecutar procedimientos almacenados. Podéis ejecutar InterSystems SQL de forma interactiva desde el portal de gestión o mediante programación utilizando una interfaz de shell SQL. El SQL embebido permite incrustar sentencias SQL en el código ObjectScript, mientras que el SQL dinámico permite ejecutar sentencias SQL dinámicas desde ObjectScript en tiempo de ejecución.

 
1. SQL embebido

Dentro de ObjectScript, InterSystems SQL admite SQL embebido: la capacidad de colocar una declaración SQL dentro del cuerpo de un método (u otro código). Con Embedded SQL, podéis consultar un único registro o definir un cursor y utilizarlo para consultar varios registros. El SQL embebido se compila. Por defecto, se compila la primera vez que se ejecuta (tiempo de ejecución), no cuando se compila la rutina que lo contiene. El SQL embebido es bastante potente cuando se utiliza junto con la capacidad de acceso a objetos de InterSystems IRIS.


2. SQL Dinámico

SQL Dinámico se refiere a las sentencias SQL que se preparan y ejecutan en tiempo de ejecución. En SQL Dinámico, la preparación y la ejecución de un comando SQL son operaciones separadas. El SQL dinámico permite programar dentro de InterSystems IRIS de forma similar a una aplicación ODBC o JDBC (salvo que se ejecuta la sentencia SQL dentro del mismo contexto de proceso que el motor de base de datos). SQL dinámico se invoca desde un programa ObjectScript. Las consultas SQL dinámicas se preparan en tiempo de ejecución del programa, no en tiempo de compilación. 


3. Class Queries

Una class query o consulta de clase es una herramienta, contenida en una clase y diseñada para usarse con SQL dinámico, para buscar registros que cumplan criterios específicos. Con las consultas de clase, podéis crear búsquedas predefinidas para una aplicación. Por ejemplo, podéis buscar registros por nombre o proporcionar una lista de registros que cumplan un conjunto particular de condiciones, como todos los vuelos de París a Madrid.

Antes de pasar a la primera opción, creemos una clase persistente Demo.Person, que también extiende la clase %Populate para poder generar algunos datos de prueba.

Class Demo.Person Extends (%Persistent, %Populate)
{
/// Person's name.
Property Name As %String(POPSPEC = "Name()") [ Required ];
/// Person's Social Security number. This is validated using pattern match.
Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ];
/// Person's Date of Birth.
Property DOB As %Date(POPSPEC = "Date()");
/// Person's City
Property CITY As %String;
}

Ejecutad la siguiente sentencia SQL para comprobar los datos de la tabla después de compilar la clase anterior:

SELECT
ID, CITY, DOB, Name, SSN
FROM Demo.Person


Ahora ejecutad el siguiente comando para rellenar 20 registros:

do ##class(Demo.Person).Populate(20)

Volved a ejecutar la consulta SQL (SELECT):


Hemos creado la tabla y la hemos rellenado con algunos datos. En el próximo artículo, revisaremos SQL embebido.

Gracias

Comentarios (0)1
Inicie sesión o regístrese para continuar
Artículo
· 29 mayo, 2024 Lectura de 4 min

Découvrir des indices en interrogeant les tables de messages d'interopérabilité

Lorsque nous utilisons InterSystems IRIS comme moteur d'interopérabilité, nous savons et aimons tous à quel point il est facile d'utiliser le Message Viewer pour examiner les traces des messages et voir exactement ce qui se passe dans votre production. Lorsqu’un système traite des millions de messages par jour, vous ne savez peut-être pas exactement par où commencer votre enquête.

Au cours de mes années de soutien aux productions IRIS, je me retrouve souvent à enquêter sur des choses comme...

  • Quel type de throughput ce flux de travail a-t-il ?
  • Où est le bottleneck ?
  • Quelles sont mes erreurs les plus courantes ?

L’un de mes endroits préférés pour rechercher des indices est la table d’en-tête de message, qui stocke les métadonnées de chaque message transitant par le système. Ce sont les mêmes messages qui apparaissent dans la visionneuse de messages et dans les traces visuelles. 

J'ai constitué une collection de requêtes SQL pratiques et j'aimerais les partager avec vous. Mes exemples proviennent principalement de cas d'utilisation de HealthShare ou d'IRIS for Health, mais ils peuvent être facilement adaptés à votre flux de travail...

-- Requête SQL pour trouver le nombre de messages via un composant par jour
select {fn SUBSTRING(timeprocessed,1,10)} AS day, count(*) MessagesThisDay 
FROM Ens.MessageHeader
where TargetConfigName = 'HS.Hub.Push.Evaluator' 
GROUP BY {fn SUBSTRING(timeprocessed,1,10)}
ORDER BY day ASC
-- Requête SQL pour rechercher des messages de longue durée via des composants particuliers
SELECT PReq.SessionID as SessionId, 
  PReq.TimeCreated as pReqTimeCreated, 
  PRes.TimeCreated as pResTimeCreated, 
  {fn TIMESTAMPDIFF(SQL_TSI_SECOND, PReq.TimeCreated,PRes.TimeCreated)} as TimeDelay
FROM (
  SELECT ID, SessionId, TimeCreated
  FROM Ens.MessageHeader
  WHERE MessageBodyClassName = 'HS.Message.PatientSearchRequest'
  AND SourceConfigName = 'HS.Hub.MPI.Manager'
  AND TargetConfigName = 'HUB'
) as PReq
INNER JOIN (
  SELECT ID, SessionId, TimeCreated
  FROM Ens.MessageHeader
  WHERE MessageBodyClassName = 'HS.Message.PatientSearchResponse'
  AND SourceConfigName = 'HS.Hub.MPI.Manager'
  AND TargetConfigName = 'HS.IHE.PIX.Manager.Process'
) as PRes on pReq.SessionId = PRes.SessionId
WHERE {fn TIMESTAMPDIFF(SQL_TSI_SECOND, PReq.TimeCreated,PRes.TimeCreated)} > 1
ORDER BY SessionId desc ----------------------------------------------------------
/*-- Requête pour trouver le message de bottleneck via un composant particulier
  -- définissez votre seuil pour "combien de temps est trop long (par exemple 20 secondes)
  -- recherchez des groupes de messages plus longs que cela (par exemple, le premier cluster a commencé à 3:22:00, puis il y a eu un deuxième cluster à 5:15:30)
  -- dans chaque cluster, regardez le premier message de ce cluster (chronologiquement). Il s’agit probablement du message du bottleneck, et tous les messages qui le suivent sont victimes de son bottleneck.
*/
SELECT %NOLOCK req.TargetConfigName, req.MessageBodyClassName, req.SessionId, req.TimeCreated, req.TimeProcessed, {fn TIMESTAMPDIFF(SQL_TSI_SECOND, req.TimeCreated, req.TimeProcessed)} as TimeToProcess
FROM Ens.MessageHeader AS req
WHERE req.TargetConfigName = 'HS.Hub.Management.Operations'
  AND req.TimeCreated BETWEEN '2021-04-21 00:00:00' AND '2021-04-21 11:00:00'
  AND {fn TIMESTAMPDIFF(SQL_TSI_SECOND, req.TimeCreated, req.TimeProcessed)} > 20
/* Si vous recherchez une erreur particulière, essayez celle-ci. Elle analyse le journal des erreurs de l'Ensemble à la recherche des entrées « Object to Load not found », puis renvoie certains champs clés du message PatientSearchRequest correspondant. */
SELECT l.SessionId, mh.MessageBodyID, mh.TimeCreated, psr.SearchMode, psr.RequestingUser, psr.FirstName, psr.MiddleName, psr.LastName, psr.SSN, psr.Sex, psr.DOB
FROM Ens_Util.Log as l
INNER JOIN Ens.MessageHeader as mh on l.SessionId = mh.SessionId
INNER JOIN HS_Message.PatientSearchRequest as psr on mh.MessageBodyID = psr.ID
WHERE l.Type = 'Error'
AND l.ConfigName = 'HSPI.Server.APIOperation'
AND l.Text like 'ERROR #5809: Object to Load not found%'
AND mh.MessageBodyClassName = 'HS.Message.PatientSearchRequest'
AND mh.SourceConfigName = 'HSPI.Server.APIWebService'
AND mh.TargetConfigName = 'HSPI.Server.APIOperation'
-- Analysez le journal des erreurs Ensemble pour une période particulière. Comptez les différents types d’erreurs
SELECT substring(text,1,80) as AbbreviatedError, count(*) as NumTheseErrors
FROM Ens_Util.Log
WHERE Type = 'Error'
AND TimeLogged > '2022-03-03 00:00:00' -- when the last batch started
AND TimeLogged < '2022-03-03 16:00:00' -- when we estimate this batch might end
GROUP BY substring(text,1,80)
ORDER BY NumTheseErrors desc
-- Recherchez le temps de traitement de la passerelle pour chaque paire StreameltRequest / ECRFetchResponse
SELECT sr.Gateway,request.sessionid, response.sessionid, request.timecreated AS starttime, response.timecreated AS stoptime, 
  datediff(ms,request.timecreated,response.timecreated) AS ProcessingTime, 
  Avg(datediff(ms,request.timecreated,response.timecreated)) AS AverageProcessingTimeAllGateways
FROM Ens.MessageHeader request
INNER JOIN Ens.MessageHeader AS response ON response.correspondingmessageid = request.id
INNER JOIN HS_Message.StreamletRequest AS sr ON sr.ID = request.MessageBodyId
WHERE request.messagebodyclassname = 'HS.Message.StreamletRequest'
AND response.messagebodyclassname = 'HS.Message.ECRFetchResponse'
Comentarios (0)1
Inicie sesión o regístrese para continuar
Anuncio
· 29 mayo, 2024

第3回 InterSystems アイデアコンテスト開催!

開発者の皆さん、こんにちは。

次のコンテストの開催が決定しました!💡 第3回 InterSystems アイデアコンテスト 💡

InterSystems アイデアコンテストは開発者コミュニティのメンバー(InterSystems社員も含)であればどなたでもご応募いただけます!

このコンテストでは、インターシステムズの製品やサービスを強化するための革新的なアイデアを募集しています。あなたのアイデアが他の利用者にもたらす具体的なメリットや、インターシステムズの技術で開発者の体験をどのように向上させるかについて実際の使用事例に基づいた提案をお待ちしています。

📅 期間:2024年6月10日~2024年7月7日

🏆 優秀なアイデアには賞品が贈られます!

🎁 参加賞あります!: コンテストに採用された方全員に参加賞をご用意しています!👕

 

>> 6月10日よりアイデア募集します! <<

応募条件

  • アイデアコンテスト開催期間中に、InterSystems のアイデアポータルに登録したユーザによって作成されたアイデアであること(開発者コミュニティのアカウントでログインできます)
  • 他の既存のアイデアに含まれる内容ではないこと。新しいアイデアのみが許可されます。
  • インターシステムズの製品またはサービスの既存の機能の説明などは許可されません。
  • 英語で投稿してください。
  • AIによって生成されたアイデアではなく、人間が書いたアイデアであること。
  • 一般的な説明ではなく、具体的な説明であること。投稿されたアイデアがユーザにどのような利益をもたらすか、実際のユースケースとリンクしていること。
  • インターシステムズの専門家が有意義であると認めたアイデアであること

すべてのアイデアはモデレーションの対象となります。応募されたアイデアの明確化をお願いする場合があります。条件を満たしたアイデアには、特別に「アイデアコンテスト」のステータスが付与されます。

 

参加資格

インターシステムズの新しいアイデアコンテストに、どなたでもご参加いただけます!

 

賞品

1.参加賞 - 採用されたすべてのアイデア投稿者に贈られます。

🎁 Branded T-shirt with InterSystems logo (unisex)

2. Expert award - InterSystemsのエキスパートが選出したベスト3の作品には、以下の賞品が贈られます。

🥇 1位 - JBL Tour Pro wireless Noise Cancelling earbuds

🥈 2位 - Patagonia Unisex Nano Puff® Vest

🥉 3位 -  LEGO Vespa 125 / Corvette / NASA Mars Rover Perseverance / Kawasaki Ninja H2R Motorcycle

3. Community Award - 最も多くの票を獲得したアイデアに贈られます。

🎁 LEGO Vespa 125 / Corvette / NASA Mars Rover Perseverance / Kawasaki Ninja H2R Motorcycle

注:インターシステムズ社員は参加賞のみ獲得できます。

 

コンテストの期間

⚠️ アイデアの投稿:2024年6月10日~30日

✅ 投票期間: 2024年7月1日~7日

🎉 受賞者発表!: 2024年7月8日

この期間中、アイデアポータルでアイデアを共有することをお勧めします。開発者コミュニティメンバーは、公開されたアイデアの投票やコメントを投稿できます。

注意: Community Awardの投票について:開発者コミュニティに少なくとも 1 回投稿したことのあるコミュニティメンバーによる投票のみがカウントされます。

--

InterSystemsのアイデアポータルにぜひアイデアを投稿してみてください!(投稿した後はステータスの更新にご注目ください!)

>> アイデアの登録はこちら! <<

Good luck! 🍀 


注:すべての賞品は、在庫状況や発送方法によって異なります。商品によっては、特定の国への国際配送ができない場合があります。賞品が入手できない場合は、その旨をお知らせし、代替品をご用意いたします。クリミア、ロシア、ベラルーシ、イラン、北朝鮮、シリア、その他米国が禁輸措置をとっている国にお住まいの方には賞品をお届けできません。

Comentarios (0)1
Inicie sesión o regístrese para continuar
Anuncio
· 29 mayo, 2024

[LinkedIn Live] Deux décennies d'innovation dans l'apprentissage et le développement

Salut la communauté !

Nous sommes très heureux de vous inviter à l'événement LinkedIn Live dédié à l'apprentissage en ligne !

🌐 Deux décennies d'innovation dans l'apprentissage et le développement 🌐

📅 Jeudi 30 mai, 10 h ET | 16h00 CEST

🗣 Présentateurs:

Au cours de cet événement en direct, vous aurez un aperçu du fonctionnement interne des services de formation et découvrirez comment ils complètent le support client. Soyez prêt à déballer :

✔️ Comment construire une expérience d'apprentissage en ligne pour accompagner les clients, les utilisateurs et même les prospects ?
✔️ Leçons tirées de l'intégration de plus de 100 000 utilisateurs dans l'apprentissage numérique.
✔️ Quels types d'apprentissage et de programmes numériques conviennent aux clients ?
✔️ Dans quelle mesure l'apprentissage numérique est-il un élément crucial de l'expérience de support client ?

J'espère vous voir lors de la session en direct !

>> Rejoignez-nous ici <<

1 Comentario
Comentarios (1)1
Inicie sesión o regístrese para continuar
Pregunta
· 29 mayo, 2024

How to Remove Search Text Box in Filter Dropdown

Hi All,

I am working on SQL based KPI in IRIS BI. I want to remove below highlighted search text box in "auto" filter type.

We cannot use other type like only dropdown etc. Is there a way we can do this ? 

One way I can see is writing own control instead of using default control but I am not aware how to do this. I didn't find any sample code for this. 

Is there any sample code available for writing custom control which I can refer.

Please assist

 

1 Comentario
Comentarios (1)2
Inicie sesión o regístrese para continuar