Nova postagem

Pesquisar

Artigo
· jan 27 2min de leitura

Reseñas en Open Exchange - #62

Si uno de vuestros paquetes en OEX recibe una reseña, OEX os notificará únicamente sobre vuestro propio paquete. La valoración refleja la experiencia del revisor con el estado del paquete en el momento de la reseña.
Es como una “fotografía” del estado en ese momento y podría haber cambiado desde entonces. Las reseñas realizadas por otros miembros de la comunidad se marcan con un * en la última columna.

Además, el revisor puede enviar Pull Requests en GitHub cuando encuentra un problema que se puede solucionar. Algunas puden ser aceptadas y fusionadas, y otras simplemente ignoradas.
Así que, si habéis realizado un cambio importante y esperáis que la reseña cambie, simplemente avisad al revisor.

# Package Review Stars IPM Docker *
1 JSON2Persistent Now also available in IPM 6.0 y y  
2 one-to-many-case The first of 2026 5.0 y y  
3 IRIS_dockerization promising composition 4.4   y  
4 GlobalsDB-NodeJS-Admin Historic artefact 3.8      
5 iris-jsonschema just partial working 3.8      
6 GlobalsDB-Admin-NodeJS Historic artefact #2 3.5      
7 Pivot partner posting        
8 DbVisualizer partner posting        
9 PIQXL Gateway partner posting        
10 Symedical partner posting        
11 Fhirgure partner posting        
12 iknowAV Another artefact        
13 OMNI-Lab partner posting        

NOTA:
Si alguna reseña no os resulta legible, puede que todavía esté esperando la aprobación de los administradores de OEX.

1 novo comentário
Discussão (1)2
Entre ou crie uma conta para continuar
Pergunta
· jan 27

HS.FHIRServer.Interop.Service returning error status code and OperationOutcome

I'm using this service to create a FHIR facade. 

I want to return OperationOutcome to the calling application when I detect an error. 

My code at present is :

set quickStreamOut=##class(HS.SDA3.QuickStream).%New()

set operationOutcome = ##class(HS.FHIR.DTL.vR4.Model.Resource.OperationOutcome).%New()

s issue = ##class(HS.FHIR.DTL.vR4.Model.Element.OperationOutcome.issue).%New()

s issue.severity = "error"

s issue.code = "exception"

s issue.details = ##class(HS.FHIR.DTL.vR4.Model.Datatype.CodeableConcept).%New()

try {

s issue.details.text = exception.DisplayString()

} catch ex {

s issue.details.text = "Unknown exception"

}

d operationOutcome.issue.Insert(issue)

$$$ThrowOnError(quickStreamOut.CopyFrom(operationOutcome.ToJSON()))

set response = ##class(HS.FHIRServer.Interop.Response).%New()

set response.Response.ResponseFormatCode="JSON"

set response.Response.Status=200

set response.ContentType="application/fhir+json"

set response.CharSet = "utf8"

set response.QuickStreamId = quickStreamOut.%Id()

If I change the response code to 422, the calling app doesn't get the OperationOutcome. Instead I get 


The custom error module does not recognize this error.
 

Do I need to implement a custom error? 

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· jan 27

An Operation can't find a .iostream file

A .iostream file got stored in /intersystems/HCENG01B12/mgr/Temp for a BatchFileOperation class while HC was on the secondary node.  HealthConnect is now on the primay node and cannot find that .iostream file path.  The operation starts throwing errors when the RolloverSchedule is reached

OnKeepalive() returned ERROR #5012: File '/intersystems/HCENG01B12/mgr/Temp/QWhoZAwFF3f9jQ.iostream'
does not exist

How can I resolve this issue?

3 novos comentários
Discussão (3)2
Entre ou crie uma conta para continuar
Artigo
· jan 27 3min de leitura

在无法访问系统 x509 证书/密钥的情况下生成 JWT

如果要从 x509 证书/密钥生成JWT,对%SYS.X509Credentials的任何操作(包括读取)都需要 %Admin_Secure 资源上的 U。之所以需要 %Admin_Secure,是因为 %SYS.X509Credentials 是持久的,这样做是为了防止所有用户访问私钥。

如果 %Admin_Secure 资源在运行时不可用,可以使用以下变通方法。

在查看 JWT 生成代码时,我发现 JWT 代码仅利用 %SYS.X509Credentials 作为 PrivateKeyPrivateKeyPasswordCertificate 的运行时数据源。作为一种变通方法,您可以使用 X.509 接口的运行时非持久化实现,只公开这些属性。如果要使用互操作性,证书/PK 可以存储在凭证中,以便安全访问:

Class User.X509 Extends %RegisteredObject
{

Property PrivateKey As %VarString;
Property PrivateKeyPassword As %String;
Property Certificate As %VarString;
Property HasPrivateKey As %Boolean [ InitialExpression = {$$$YES} ];
ClassMethod GetX509() As User.X509
{
    set x509 = ..%New()
    set x509.PrivateKey = ..Key()
    set x509.Certificate = ..Cert()
    quit x509
}

/// Get X509 object from credential.
/// Username is a Cert, Password is a Private Key
ClassMethod GetX509FromCredential(credential) As User.X509
{
    set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    set x509 = ..%New()
    set x509.PrivateKey = credentialObj.Password
    set x509.Certificate = credentialObj.Username
    quit x509
}

ClassMethod Key()
{
    q "-----BEGIN RSA PRIVATE KEY-----"_$C(13,10)
    _"YOUR_TEST_KEY"_$C(13,10)
    _"-----END RSA PRIVATE KEY-----"
}

ClassMethod Cert() As %VarString
{
    q "-----BEGIN CERTIFICATE-----"_$C(13,10)
    _"YOUR_TEST_CERT"_$C(13,10)
    _"-----END CERTIFICATE-----"
}

}

您还可以通过以下方式生成 JWT:

ClassMethod JWT() As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set x509 = ##class(User.X509).GetX509()
    
    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
	Return sc
}

或者,您也可以使用动态对象来跳过类的创建,在这种情况下,它将看起来像这样:

ClassMethod JWT(credential) As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    Set x509 = {
        "HasPrivateKey": true,
        "PrivateKey": (credentialObj.Password),
        "PrivateKeyPassword":"",
        "Certificate":(credentialObj.Username)
    }

    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
    Return sc
}
Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· jan 27

Concours InterSystems Full Stack 2026

Salut les développeurs !

Nous sommes ravis d'annoncer le premier concours de programmation en ligne InterSystems de l'année :

🏆 Concours InterSystems Full Stack 🏆

Durée : du 2 février au 1er mars 2026

Prix: 12 000 $


Sujet :

Développer une solution complète utilisant InterSystems IRIS, InterSystems IRIS for Health ou IRIS Cloud Service comme backend. Par solution complète, nous entendons une application web ou mobile frontend permettant d’insérer, de mettre à jour ou de supprimer des données dans InterSystems IRIS via une API REST, une API native, ODBC/JDBC ou Python embarqué.

Exigences générales :

  1. Une application ou une bibliothèque doit être entièrement fonctionnelle. Il ne doit pas s'agir d'un import ou d'une interface directe pour une bibliothèque déjà existante dans un autre langage (sauf pour le C++, là il faut vraiment faire beaucoup de travail pour créer une interface pour Iris). Il ne doit pas s'agir d'un copier-coller d'une application ou d'une bibliothèque existante.
  2. Applications acceptées : nouvelles applications sur Open Exchange ou existantes, mais avec une améliorations significatives. Notre équipe examinera toutes les candidatures avant de les approuver pour le concours.
  3. L'application doit fonctionner sur IRIS Community Edition, IRIS for Health Community Edition ou IRIS Cloud SQL. Les deux peuvent être téléchargés en tant que versions hôtes (Mac, Windows) à partir du site d'évaluation, ou peuvent être utilisés sous la forme de conteneurs extraits d'InterSystems Container Registry ou de Community Containers : intersystemsdc/iris-community:latest ou intersystemsdc/irishealth-community:latest .
  4. L'application doit être Open Source et publiée sur GitHub ou GitLab.
  5. Le fichier README de l'application doit être en anglais, contenir les étapes d'installation, et la vidéo de démonstration ou/et une description du fonctionnement de l'application.
  6. Pas plus de 3 soumissions d’un développeur sont autorisées.

N.B. Nos experts auront le dernier mot quant à l'approbation ou non de la candidature au concours en fonction des critères de complexité et d'utilité. Leur décision est définitive et sans appel.

Prix ​​du concours :

1. Nomination des experts – les gagnants seront sélectionnés par l'équipe d'experts d'InterSystems :

🥇 1ère place - $5,000
🥈 2e place - $2,500
🥉 3e place - $1,000
🏅 4e place - $500
🏅 5e place - $300
🌟 6-10e places - $100

2. Gagnants de la communauté – candidatures qui recevront le plus de votes au total :

🥇 1ère place - $1,000 
🥈 2e place - $600
🥉 3e place - $300
🏅 4e place - $200
🏅 5e place - $100

❗ Si plusieurs participants obtiennent le même nombre de votes, ils sont tous considérés comme gagnants et la récompense est partagée entre eux.
❗ Les récompenses sont attribuées uniquement aux personnes pouvant prouver leur identité. En cas de doute, les organisateurs contacteront le ou les participants pour leur demander des informations complémentaires

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.

Délais importants :

🛠 Phase de développement et d'inscription de l'application :

  • 2 février 2026 (00h00 HNE) : Début du concours.
  • 22 février 2026 (23h59 HNE) : Date limite de dépôt des candidatures.

 Période de vote:

  • 23 février 2026 (00h00 HNE) : Début des votes.
  • 1er mars 2026 (23h59 HNE) : Clôture des votes.

Remarque : Les développeurs peuvent améliorer leurs applications tout au long de la période d'inscription et de vote.

    Ressources utiles :

    ✓ Exemples d'applications :

    ✓ Modèles à partir desquels nous vous suggérons de commencer :

    ✓ Pour les débutants avec IRIS :

    ✓ Pour les débutants avec ObjectScript Package Manager (IPM) :

    ✓ Comment soumettre votre application au concours :

    Besoin d'aide ?

    Rejoignez la chaîne du concours sur le serveur Discord d'InterSystems ou discutez avec nous dans les commentaires 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.

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