Nova postagem

Encontrar

Anúncio
· Fev. 13

Concours d'articles techniques en anglais 2025

Bonjour la communauté,

Nous avons des nouvelles passionnantes ! Il est temps de participer au prochain concours d'écriture InterSystems :

✍️ Concours d'articles techniques en anglais 2025 ✍️

Rédigez un article sur n'importe quel sujet lié aux produits et services InterSystems.

🎁 Des prix pour tous : Un prix spécial pour chaque auteur participant au concours !

Prix

1. Tout le monde est gagnant au concours d'articles techniques d'InterSystems ! Tous les utilisateurs qui rédigent un article pendant la période du concours recevront un prix spécial :

🎁 Câble de chargement 4 en 1

2. Prix des experts - les articles seront jugés par des experts d'InterSystems :

🥇 1ère place : Nintendo Switch OLED / Hogwarts Icons - Édition Collecteur Lego / The X-Mansion Lego

🥈 2ème place : Nintendo Switch Lite / Lamborghini Countach 5000 Quattrovalvole Lego

🥉 3ème place : Amazon Kindle Paperwhite / Retro Radio Lego

Alternativement, chaque gagnant peut choisir un prix d'un niveau inférieur au sien.

3. Prix de la communauté des développeurs - article ayant reçu le plus de likes :

🏅  Amazon Kindle Paperwhite / Retro Radio Lego

Remarque : 

  1. L'auteur ne peut être récompensé qu'une seule fois par catégorie (au total, l'auteur gagnera 2 prix : un pour les experts et un pour la communauté).
  2. En cas d'égalité, le nombre de votes des experts pour les articles à égalité sera considéré comme un critère pour les départager.  

Qui peut participer ?

Tout membre de la communauté des développeurs, à l'exception des employés d'InterSystems. Créez un compte !

Période du concours

📝  Du 3 février au 2 mars : Publication des articles.

🗳️  Du 3 mars au 9 mars : Période de vote.

🏅  10 mars : Annonce des gagnants.

Publiez un ou plusieurs articles pendant cette période. Les membres de la CD peuvent voter pour les articles publiés grâce aux likes dans le cadre du prix de la communauté.

Remarque : Plus tôt vous publiez vos articles, plus vous avez de temps pour recueillir les votes des experts et de la communauté.

Quelles sont les conditions ? 

❗️ Tout article rédigé pendant la période du concours et répondant aux conditions ci-dessous sera automatiquement inscrit au concours :

  • L'article doit porter sur les produits et services InterSystems.
  • L'article doit être en anglais et publier sur la Communauté Anglaise.  
  • L'article doit être 100 % nouveau.  
  • L'article ne peut pas être une traduction d'un article déjà publié dans d'autres communautés.  
  • Taille d'article : 400 mots minimum (les liens et le code ne sont pas comptabilisés dans la limite de mots).  
  • Un même auteur peut soumettre plusieurs articles. 
  • Les articles sur le même sujet mais avec des exemples différents provenant d'auteurs différents sont autorisés.

* Nos experts modéreront les articles. Seuls les contenus valides seront éligibles pour participer au concours.

🎯 BONUS SUPPLÉMENTAIRES

Bonus Nominal  Détails
Bonus du sujet 3 Rédigez un article sur l'un des sujets proposés ci-dessous.
Bonus de la vidéo En plus de publier l'article, réalisez une vidéo explicative.
Bonus de la discussion 1 Article avec la discussion la plus utile, selon les experts d'InterSystems. Seul 1 article recevra ce bonus.
Bonus de la traduction 2 Publiez une traduction de votre article sur l'une des communautés régionales. Remarque : 1 seul vote par article.
Bonus pour les nouveaux participants 5 Si vous n'avez jamais participé aux concours précédents, votre ou vos articles recevront ce bonus.
Bonus pour l'application 5 Téléchargez une application de votre article sur Open Exchange.

Si un article de concours est divisé en plusieurs parties, les bonus s'appliquent uniquement à la première partie, sauf s'ils sont spécifiques à une partie ultérieure, et le même bonus ne peut pas être utilisé pour plusieurs parties.

Sujets proposés

Voici une liste de sujets proposés qui donneront à votre article un bonus supplémentaire pour le sujet :

✔️  Utilisation d'ODBC et JDBC
✔️  Utilisation de DB-API
✔️  Utilisation de Dynamic SQL dynamique et de Embedded SQL
✔️  Génération de la documentation OpenAPI
✔️  Points de terminaison liés à l'authentification (à l'aide de SSO, OAuth et ZAuth)
✔️  Utilisation d'isc.rest pour développer l'API
✔️  Embedded Python dans l'interopérabilité (opérations, services, fonctions personnalisées)
✔️  Déploiements courants IKO
✔️  Adaptation du code C#, Java et Python existant à l'interopérabilité IRIS et IRIS à l'aide de passerelles de langage externes
✔️  GenAI, Vector Search, RAG
✔️  FHIR, EHR
✔️  Data Fabric, Data Lake, Data Entrepôt, maillage de données
✔️  Partage, mise en miroir

Besoin d'inspiration ou d'un exemple ? Découvrez les #Bonnes pratiques.

Il est temps de montrer vos talents d'écrivain !

🖋️ Écrivez. Partagez. Brillez.


Remarque importante : la livraison et les prix varient selon les pays et peuvent ne pas être possibles pour certains d'entre eux. Une liste des pays soumis à des restrictions peut être demandée à @Liubka.Zelenskai

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Fev. 12 2min de leitura

第二十二章 P - R 开头的术语

第二十二章 P - R 开头的术语

程序员模式 (programmer mode)

系统

所有程序开发活动进行的模式。在程序员模式下,你从 IRIS 提示符启动程序,并且每个运行的程序结束后提示符会重新出现。程序员模式涵盖了 IRIS 环境及其所有可调用的程序,包括 SQL 开发环境。在程序员模式下,你可以创建用户随后在应用程序模式下运行的应用程序。

项目 (project)

系统

用户定义的相关源文档(如例程或类定义)列表。Visual Studio Code 使用项目来帮助组织应用程序开发。

属性 (property)

对象(Objects)

表示与类相关联的特定特性的一个数据元素。该类的每个对象包含属性的字面值或指向表示数据的另一个对象的引用。一个类的所有属性共同表示其状态。

属性排序 (property collation)

对象(Objects)

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Fev. 12

SQL SYS.Database table not found

Hi,

I running an SQL so I can find the databases with the largest amount of free space. This is in case I can compact the databases.

However SQL cannot find the SYS.Database table.

Can someone please explain how to fix?

[SQL]TEST:%SYS>>select * from SYS.Database
ERROR #5540: SQLCODE: -30 Message:  Table 'SYS.DATABASE' not found

[SQL]TEST:%SYS>>  << entering multiline statement mode, 'GO' to execute >>
   1>>select DatabaseName, Directory, Size, Free, DiskFreeSpace
   2>>from SYS.Database
   3>>order by DiskFreeSpace DESC
   4>>go
ERROR #5540: SQLCODE: -30 Message:  Table 'SYS.DATABASE' not found

The documentation I'm using is:

https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic....

This states:

SQL Table Name: SYS.Database

Thanks

3 Comments
Discussão (3)1
Entre ou crie uma conta para continuar
Artigo
· Fev. 12 5min de leitura

IRIS %Status y Excepciones

Podéis encontrar errores en cualquier punto de la ejecución del programa, y hay varias formas de generarlos y manejarlos en IRIS. En este artículo, exploraremos cómo gestionar excepciones de manera eficiente.

Uno de los tipos de retorno más utilizados es %Status, que los métodos emplean para indicar éxito o fallo. Vamos a empezar hablando de los valores de %Status.

Trabajando con %Status

El tipo %Status representa errores o éxito. Muchos métodos del sistema devuelven %Status cuando ocurre un error. Podéis crear una estructura similar para errores en vuestra aplicación o convertir excepciones en %Status dentro del código. Incluso cuando habéis planteado excepciones en el código.

Vamos a empezar creando errores.

Macros

Cuando hablamos de errores, las macros son esenciales y facilitan la creación de valores %Status en el código. IRIS proporciona varias macros para generar y manejar errores dentro de vuestra aplicación.

La macro más utilizada es $$$ERROR.

$$$ERROR

La macro $$$ERROR está diseñada específicamente para generar y devolver un valor %Library.%Status. Es vuestra responsabilidad verificar el estado antes de continuar con la ejecución del programa. Esta macro está estrechamente relacionada con los errores generales del sistema. Tened en cuenta los siguientes puntos al utilizarla:

  • El primer argumento (códigos de error) hace referencia a códigos de error generales en el archivo %occErrors.
  • Si usáis errores predefinidos de ese archivo, podéis utilizar la macro directamente, con o sin argumentos adicionales.

Nota: Antes de continuar, podéis usar $SYSTEM.OBJ.DisplayError(status) o $SYSTEM.Status.DisplayError(status) para mostrar los errores y admitir la traducción de cadenas de texto para los errores.

Set sc = $$$ERROR($$$NamespaceDoesNotExist,"TEST")
Do $SYSTEM.OBJ.DisplayError(sc)

output: ERROR #5015: Namespace 'TEST' does not exist1
Set sc = $$$ERROR($$$UserCTRLC)
Do $SYSTEM.OBJ.DisplayError(sc)

ouput: ERROR #834: Login aborted1

Si utilizáis un código de error que no esté listado en %occErrors, se devolverá un error de "Código de estado desconocido" o "Unknown status code". Para mensajes de error generales, usad siempre el código de error predefinido $$$GeneralError == 5001.

Ejemplo de código de estado desconocido

Set sc = $$$ERROR(95875,"TEST Error")
Do $SYSTEM.Status.DisplayError(sc)

output: ERROR #95875: Unknown status code: 95875 (TEST Error)
Set sc = $$$ERROR($$$GeneralError,"TEST Error")
Do $SYSTEM.OBJ.DisplayError(sc)

output: ERROR #5001: TEST Error

$$$ADDSC

El %Status no almacena solo un error, sino que puede contener varios. Vuestro programa puede validar múltiples condiciones y registrar todos los errores en un único estado usando la macro $$$ADDSC.Por ejemplo, el método %ValidateObject() puede devolver varios errores en una sola respuesta utilizando esta funcionalidad.

La macro $$$ADDSC agrega un estado a otro, permitiendo combinar múltiples errores en un solo código de estado. El método $SYSTEM.Status.AppendStatus realiza la misma función, facilitando el manejo de múltiples errores en una respuesta unificada.

$$$ADDSC(sc1, sc2) o $SYSTEM.Status.AppendStatus(s1, s2) añaden sc2 a sc1, devolviendo un nuevo código de estado con ambos errores combinados.

ClassMethod AppendErrors()
{
    Set sc1 = $$$ERROR($$$UserCTRLC) 
    Set sc2 = $$$ERROR($$$NamespaceDoesNotExist,"TEST")
    Set sc = $$$ADDSC(sc1,sc2)
    Do $SYSTEM.Status.DisplayError(sc)
    Write !
    Set sc = $$$ADDSC(sc1,sc2)
    Do $SYSTEM.Status.DisplayError(sc)
}
output
LEARNING>do ##class(Learning.ErrorHandling).AppendErrors()
 
ERROR #834: Login aborted
ERROR #5015: Namespace 'TEST' does not exist
 
ERROR #834: Login aborted
ERROR #5015: Namespace 'TEST' does not exist

¡Ambos resultados son lo mismo!

$$$GETERRORCODE

La macro $$$GETERRORCODE(status) devuelve el valor del código de error del %Status. Esta macro pertenece al archivo %occStatus.inc

    Set status = $$$ERROR($$$UserCTRLC) 
    Write $$$GETERRORCODE(status),!
    #;output: 834
    Set status = $$$ERROR($$$GeneralError,"TEST Error")
    Write $$$GETERRORCODE(status)
    #;output: 5001

$$$GETERRORMESSAGE
La macro $$$GETERRORMESSAGE(sc, num) devuelve la parte del mensaje de error basado en el número num del %Status. Aquí va un ejemplo.

ClassMethod GetErrorMsgMacro()
{
	Set status = $$$ERROR($$$GeneralError,"TEST Error",1,$$$ERROR($$$GeneralError,"TEST Error2"))
	write $$$GETERRORMESSAGE(status),! ; It prints "TEST Error"
	#;
	Set st = $$$GETERRORMESSAGE(status,3) ; it get the "$$$ERROR($$$GeneralError,"TEST Error2")" in 3rd position based on the 2nd argument 
	write $$$GETERRORMESSAGE(st),! ; it prints TEST Error2
}

LEARNING>Do ##class(Learning.myexcept).GetErrorMsgMacro()
TEST Error
TEST Error2

 

Validar un %Status que se ha devuelto como resultado

Ahora que habéis creado el error y lo habéis devuelto a vuestro programa, el siguiente paso es validar si la respuesta devuelta es correcta o errónea.

La macro $$$ISERR comprueba si el estado representa un error. Devuelve 1 si el estado indica un error, en caso contrario devuelve 0. Hay otra macro, $$$ISOK, que devuelve 1 cuando el estado es correcto.

Visualización de errores

Si vuestro programa falla inesperadamente (siempre esperad lo inesperado), necesitáis mostrar el mensaje de error. La clase %SYSTEM.Status está específicamente diseñada para ver o crear valores %Status (si preferís no utilizar macros) y ya hemos visto los ejemplos anteriores.

Aquí hay métodos equivalentes en %SYSTEM.Status que sustituyen a las macros:

Macro Methods
$$$ISERR $SYSTEM.Status.IsError()
$$$ISOK $SYSTEM.Status.IsOK()
$$$ADDSC $SYSTEM.Status.AppendStatus()
$$$ERROR $SYSTEM.Status.Error()
$$$OK $SYSTEM.Status.OK()
$$$GETERRORCODE $SYSTEM.Status.GetErrorCodes()

Las Excepciones continuarán en el próximo artículo.

Discussão (0)0
Entre ou crie uma conta para continuar
Artigo
· Fev. 12 5min de leitura

Utilizando API REST, Flask e IAM com o InterSystems IRIS - Parte 3 – IAM

Utilizando Flask, API REST e IAM com o InterSystems IRIS

Parte 3 – IAM

 

O InterSystems API Manager (IAM) é um componente que permite monitorar, controlar e gerir o tráfego de APIs baseadas em HTTP. Ele também atua como uma API gateway entre aplicações e servidores InterSystems IRIS. 

 

O documento publicado em https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_apimgr traz as informações sobre o produto.

 

Já o documento https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=CIAM3.0_install traz todas as informações para a instalação e configuração do IAM.

 

Após instalar o IAM vamos ativar o mesmo e configurar um serviço, rota e plugin para criar um Rate Limiting para a nossa API REST.

 

Primeiro, após instalar o IAM vamos ativa-lo conforme definido na documentação:

 

 

Uma vez ativado o IAM vamos abrir a interface de administração para criar o serviço, rota e plugin necessários. Para isso no navegador acessamos o servidor na porta 8002:

 

 

Nesta tela vemos as opções de manutenção de serviço, rota e plugins, que são as tarefas que vamos realizar. Primeiro vamos criar o serviço para atender a nossa API REST. Clique no menu lateral em Services e na sequencia em New Service:

 

 

Informe o nome (cliente-service) e na opção Add using URL informe em URL o caminho da API (http://192.168.0.13/iris/rest/servico/cliente nonosso exemplo). Clique em Create e o serviço estará criado:

 

 

Agora vamos criar a rota. No menu lateral clique em Routes e a seguir em New Route.

 

 

 

Selecione o serviço que criamos, informe um nome para a rota (cliente-route por exemplo), informe os protocolos que poderão ser usados (http e https), informe o host (192.168.0.13) e os métodos (GET,PUT,POST,DELETE). Clique no link Add Path e informe o path para esta rota (/api/cliente). Clique em Create e a rota estará criada:

 

 

 

 

 

 

 

Agora vamos criar o plugin de rate Limiting. Este plugin limita o número de solicitações que um usuário pode fazer em um determinado período de tempo. Para isso volte ao menu lateral e clique em Plugins e na sequencia em New Plugin. Na caixa de pesquisa digite Rate e veja os plugins listados:

 

 

 

Selecione o plugin Rate Limiting Advanced. Será a presentada a tela de configuração do plugin:

 

 

 

 

Na tela de configuração mude a opção para Scoped. Selecione o serviço que criamos. Informe a quantidade de acessos em Config.Limit (5 por exemplo) e o tempo de intervalo em Config.Window.Size (60 por exemplo). Mude Config.Strategy para local e clique em Create. Pronto. Nosso plugin está criado e já está trabalhando:

 

 

 

Agora vamos precisar fazer uma alteração no nosso código python para consumir a nossa API através do IAM. Para isso vamos mudar o endereço da URL da API para o endereço que criamos na Rota do IAM:

 

API_URL = “http://192.168.0.13/iris/rest/servico/cliente” - Código Original

 

API_URL = “http://192.168.0.13:8000/api/cliente“ - Nova URL passando pelo IAM

Reative o servidor do Flask e volte a página da aplicação. Desta vez dê uma sequencia de refresh (F5) de forma a chamar a  API diversas vezes. Veja que na 6ª  chamada da API temos uma falha:

 

 

A nossa aplicação não está preparada para tratar a falha no HTTP status. Vamos fazer alguns ajustes. Primeiro vamos criar na pasta templates uma página de erro chamada erro.html:

 

<!DOCTYPE html>

<html lang="pt-br">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Erro</title>

</head>

<body>

    <h1>Ocorreu um erro!</h1>

    <p>Código de erro: {{ status_code }}</p>

    <p>Mensagem de erro: {{ error_message }}</p>

</body>

</html>

 

Vamos voltar ao código em python e fazer um ajuste para capturar o erro. No trecho que chamaos a montagem da página de index vamos tratar um HTTP code diferente de 200:

 

Onde temos o seguinte código no rota “/”:

 

    data = response.json()

    lista = data["clientes"]

    return render_template("index.html", registros=lista)

 

Mudamos para:

 

  if response.status_code == 200:

        data = response.json()

        lista = data["clientes"]

        return render_template("index.html", registros=lista)

  else:

        return render_template('erro.html', status_code=response.status_code, error_message=response.json().get('message', 'Erro desconhecido'))

 

Vamos reiniciar a aplicação Flask e mais uma vez vamos chamar a API diversas vezes. Desta vez vamos receber uma tela de erro tratado:

 

 

 

Podemos então ver que o IAM já está trabalhando, recebendo as requisições e aplicando os plugins configurados. De acordo com nossa configuração o IAM restringiu o acesso a API devolvendo um HTTP status 429 conforme configurado no plugin.

 

Voltando a tela de administração no IAM podemos ver já algumas informações sobre o consumo do serviço:

 

 

Podemos ver a quantidade de requisições que foram feitas ao serviço por HTTP Status por exemplo. Podemos também mudar a forma de visualização do gráfico:

 

 

O IAM é uma ferramenta poderosa que agrega diversas vantagens ao Iris e permite uma série de ações com seus plugins. O IAM pode ser um aliado poderoso para a publicação de serviços.

 

Até a próxima!

Discussão (0)1
Entre ou crie uma conta para continuar