検索

質問
· 2024年9月16日

What is the best way to do a silent install of an IRIS application?

We have an ObjectScript application that runs in Cache' and IRIS. Our typical installation involves a .zip file containing several files necessary for the installation and operation of the application. Steps are: expand the .zip file to a folder that will not be used by the application. Do ^%RI for the installation routines in the production namespace. Do the Installation routine. We have a customer that is trying to do a silent installation. He does not want to have to respond to any prompts on the installation. We do have a silent option for the Installation routine and that is working well. But he also does not want to have to respond to prompts for the Do ^%RI step. Currently we are doing set sc=$System.OBJ.Export(routineString,destinationPath.xml). And then we can do a set sc=$System.OBJ.Load(destinationPath.xml,"cuk",.errlog) in the installation script.

Is there a better way to do this?

3 Comments
ディスカッション (3)2
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月16日 5m read

Native Python dans IRIS, partie 2

Dans la section précédente, nous avons exploré le processus d'installation et initié l'écriture de l'IRIS en Python natif. Nous allons maintenant examiner la traversée globale et nous intéresser aux objets de classe IRIS. 

get : cette fonction est utilisée pour obtenir des valeurs à partir du nœud de traversée.

def traversal_firstlevel_subscript():
    """
    ^mygbl(235)="test66,62" and ^mygbl(912)="test118,78"
    """
    for  i in irispy.node('^mygbl'):
        print(i, gbl_node.get(i,''))

node et items : parcours à un seul niveau avec nœud et obtenir les mêmes valeurs que $Order(^mygbl(subscript), direction, data)

#single level traversal
def traversal_dollar_order_single_level():
    for  sub,val in irispy.node('^mygbl').items():
         print('subscript:',sub,' value:', val)
# multi level traversal
def traversal_dollar_order_multi_level():
    for  sub,val in irispy.node('^mygbl').items():
         print(f'sub type is: {type(sub)} {sub} and val type is {type(val)}')
         for sub1,val1 in irispy.node('^mygbl',sub).items():
            print('subscript:',sub1,' value:', val1)
        

nextsubscript : contrairement au code ci-dessus, vous pouvez utiliser nextsubscript pour obtenir facilement l'indice suivant

def traversal_dollar_order_use_nextsubscript():
      direction = 0
      next_sub = ''
      while next_sub != None:
            next_sub = irispy.nextSubscript(direction,'^mygbl', next_sub)
            print(f'next subscript = {next_sub}' )
            next_sub1=''
            if next_sub == None:return
            while next_sub1 != None:
                next_sub1 = irispy.nextSubscript(direction,'^mygbl',next_sub,next_sub1)
                print(f'1st subscript = {next_sub} next subscript {next_sub1}' )

Classes et objets

Vous pouvez appeler les méthodes de classe, les méthodes de la définition de classe en utilisant la fonction spécifique. Comme je l'ai mentionné plus tôt, les méthodes de conversion de type sont essentielles pour obtenir la réponse appropriée d'IRIS.

Avant cela, il est important de noter que, contrairement aux types de données IRIS, pour lesquels nous pouvons tout traiter comme des chaînes, les types de données Python tels que int, str, bool et list sont classés comme des objets. Chacun de ces types possède ses propres attributs et méthodes ; par exemple, le type de chaîne Python inclut des fonctions telles que .upper() et .lower(), qui ne sont pas applicables aux autres types de données. Par conséquent, IRIS est équipé de la capacité de convertir les valeurs de chaîne IRIS en objets de type de données pris en charge par Python grâce à l'utilisation de méthodes de conversion de type. Cette fonctionnalité s'applique également aux méthodes de classe, aux fonctions définies par l'utilisateur et aux procédures. Alternativement, il faut utiliser les fonctions de conversion de type de Python pour obtenir le type de données souhaité.

classMethodValue : appelez la méthode Classmethod depuis Python sans initialiser l'objet comme (ex : Do ##Class(Test.MYTest).FirstNameGetStored(1)) et obtenez la valeur par défaut de « string » en Python. Il existe différentes méthodes de conversion de type disponibles pour la valeur de retour attendue au lieu de la chaîne. Veuillez vous référer ci-dessous.

def get_clsmethod_value():
    print(irispy.classMethodValue('Test.MYTest','FirstNameGetStored',1)) #return string 
    date_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog') #return +$H value
    print(irispy.classMethodVoid('Test.MYTest','SetTestGlobal','test')) # no return resposne

classMethodObject : Fonction importante pour instancier un nouvel objet IRIS ou ouvrir l'objet existant. Définissez les propriétés et appelez les méthodes d'instance, etc.

Nouvel objet IRIS : initiez l'objet de classe pour Test.MYTest et définissez les propriétés.

def cls_object_new():
    """
    initiate new object and store
    """
    iris_proxy_obj = irispy.classMethodObject('Test.MYTest','%New','ashok','kumar')

    birthdate_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog','12/12/1990')
    horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog')
    iris_proxy_obj.set('BirthDate',birthdate_horolog) #set birthdate property
    iris_proxy_obj.set('RegisteredDate',horolog) #set the RegisteredDate property
    status = iris_proxy_obj.invoke('%Save') #call instance method
    return status

Ouvrez l'objet IRIS : dans le code ci-dessous. Ouvrez l'objet de classe Test.MyTest et récupérez les valeurs Birthdate et RegisteredDate à partir de l'objet avec l'ID  = « 2 » et convertissez RegisteredDate en liste Python

def cls_object_open():
    iris_proxy_obj = irispy.classMethodObject('Test.MYTest','%OpenId',2)
    birth_date = iris_proxy_obj.get('BirthDate')
    full_name iris_proxy_obj.InvokeString("GetFullName")
    data = [birth_date, iris_proxy_obj.get('RegisteredDate')]
    return data

Définition de la classe IRIS que j'ai utilisée pour la démonstration du code Python de classe et d'objet

 
Spoiler

Méthodes de conversion de type :

il s'agit de quelques méthodes de conversion de type permettant de récupérer les valeurs de retour appropriées d'IRIS

classMethodValue() - pour appeler des méthodes de classe générales

classMethodInteger - Renvoie une valeur integer
classMethodVoid - Aucune valeur de retour
classMethodValue - string par défaut
classMethodFloat - valeur float


invoke() - est utilisé pour appeler les méthodes d'instance. Vous devez initialiser l'objet pour appeler ces fonctions d'appel

invokeString - string par défaut
invokeFloat - float par défaut
invokeInteger - integer par défaut

Nous aborderons les fonctions, les appels de procédure dans les routines et d'autres fonctionnalités dans le prochain article.

ディスカッション (0)2
続けるにはログインするか新規登録を行ってください
お知らせ
· 2024年9月16日

HealthShare Unified Care Record Overview - Virtual October 8-9, 2024 - Registration space available

  • HealthShare Unified Care Record Overview – Virtual October 8-9, 2024
    • The HealthShare Unified Care Record Overview course is a great way for anyone to become familiar with Unified Care Record, but especially those who need to understand its capabilities but not how to configure HealthShare Unified Care Record.
    • This is a non-technical, instructor-led in person training course providing a comprehensive introduction to HealthShare Unified Care Record.
    • This course is for anyone who needs to know about the functionality and architecture of HealthShare Unified Care Record.  (If you need information on configuring and troubleshooting Unified Care Record, consider the HealthShare Unified Care Record Fundamentals class.)
    • No prior knowledge or experience is required for the Overview class and any InterSystems employee may enroll.
  • Self-Register Here
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2024年9月16日

padding zeros to the desired length

I receive a number as input

length = ln = 7

if input = 25
I need to add zeros to make make it as - 0000025 (a total length of ln)

if input = 9
I need to add zeros to make make it as - 0000009 (a total length ofln)

6 Comments
ディスカッション (6)4
続けるにはログインするか新規登録を行ってください
記事
· 2024年9月16日 1m read

Como baixar um arquivo de imagem de um servidor web utilizando ObjectScript

[FAQ] Preguntas frecuentes de InterSystems

O seguinte código baixa https://www.intersystems.com/assets/intersystems-logo.png e salva o arquivo como c:\temp\test.png.

É necessário definir uma configuração SSL chamada SSLTEST antes de executar esse código

ClassMethod download() As %Status
{
    Set sc = $$$OK
    Set httprequest=##class(%Net.HttpRequest).%New()
    set httprequest.Port = 443
    set httprequest.Https = 1
    set httprequest.SSLConfiguration = "SSLTEST"
    Set httprequest.Server="www.intersystems.com"
    Do httprequest.Get("/assets/intersystems-logo.png")
    Set httpresponse=httprequest.HttpResponse
    Set file=##class(%File).%New("c:\temp\test.png")
    Do file.Open("NWUK\BIN\")
    Do file.CopyFrom(httpresponse.Data)
    Do file.Close()
    Return sc
}
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください