New post

検索

Article
· Jun 27, 2024 6m read

Comment commencer à utiliser VsCode

Introduction

Dans les prochaines semaines, mes collègues prévoient de commencer à utiliser VSCode pour coder avec les produits d'InterSystems. Parmi les nombreux avantages, je soulignerais la possibilité de se connecter facilement à d'autres technologies, telles que GitHub. En outre, VSCode propose également une vaste boutique d'extensions, où vous pouvez trouver de nombreux add-ons gratuits qui rendent le codage plus rapide et plus efficace. Enfin, pour conquérir le cœur de tous les développeurs, c'est open source.

Discussion (0)1
Log in or sign up to continue
Article
· Jun 27, 2024 7m read

Cómo mantener los datos de IRIS en un contenedor Docker durante un largo período de tiempo.

Por defecto, todos los archivos creados dentro de un contenedor se almacenan en una capa writable del contenedor. Esto significa que:

  • Los datos no persisten cuando ese contenedor ya no existe, y puede ser difícil extraer los datos del contenedor si otro proceso los necesita.
  • La capa writable (en la que se puede escribir) de un contenedor está estrechamente ligada a la máquina anfitriona donde se está ejecutando el contenedor. No se puede mover fácilmente los datos a otro lugar.
  • Escribir en la capa writable (en la que se puede escribir) de un contenedor requiere un controlador de almacenamiento para gestionar el sistema de archivos. El controlador de almacenamiento proporciona un sistema de archivos en unión, utilizando el núcleo de Linux. Esta abstracción adicional reduce el rendimiento en comparación con el uso de volúmenes de datos, que escriben directamente en el sistema de archivos del anfitrión.

 

Para demostrar el comportamiento predeterminado del contenedor Docker, ejecutemos el contenedor utilizando el siguiente comando:

docker run -d --name iris-comm -p 1972:1972 -p 52773:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community:latest

 

#docker run command to create and start the container
docker run 
#-d -an option used to start container in deattach mode
-d 
#name of the container
--name iris 
#-p -an option is used to map the ports
-p 1972:1972 
-p 52773:52773 
#-e -an option to set environment variable
-e IRIS_USERNAME=demo
-e IRIS_PASSWORD=demo
#base image
intersystemsdc/iris-community:latest

Ejecutaremos el siguiente comando de Docker para listar los detalles de los contenedores en ejecución:

docker ps

Conectémonos al terminal de IRIS utilizando el siguiente comando de Docker:

docker exec -it iris-comm iris session iris

Guardaremos algunos datos en IRIS utilizando la variable global "DockerVolume".

Para ver el valor de la global, navegad al portal de gestión (demo | demo).
http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.GlobalList.zen?$NAMESPACE=USER
 
Para ver el valor, haced clic en la opción 'Ver'.

Ahora, recrearemos el contenedor para comprobar si los datos de IRIS persisten.

Para recrear el contenedor, debemos detener y retirar el contenedor.

Los siguientes comandos de Docker detendrán, retirarán y recrearán el contenedor.

# Stop the container
docker stop iris-comm

# Remove the container
docker rm iris-comm

# Create the container
docker run -d --name iris-comm -p 1972:1972 -p 52773:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community:latest



Conectémonos al terminal de IRIS y verifiquemos el valor de la variable global que guardamos anteriormente.

Nuestros datos no están disponibles una vez que recreamos el contenedor.

Docker proporciona varias opciones para que los contenedores almacenen datos, permitiendo flexibilidad y personalización basada en diferentes casos de uso. Aquí están las principales opciones:

  • 1- Volúmenes

    Los volúmenes se almacenan en una parte del sistema de archivos del host que es gestionada por Docker (/var/lib/docker/volumes/ en Linux). Los procesos que no pertenecen a Docker no deben modificar esta parte del sistema de archivos. Los volúmenes son la mejor manera de persistir datos en Docker. Cuando creamos un volumen, este se guarda dentro de un directorio en el host de Docker. Cuando montamos el volumen en un contenedor, este directorio es lo que se monta en el contenedor. Esto es similar a cómo funcionan los bind mounts, excepto que los volúmenes son gestionados por Docker y están aislados de la funcionalidad principal de la máquina host. Al montar un volumen, puede ser nombrado o anónimo. Los volúmenes anónimos reciben un nombre aleatorio que es único dentro de un host Docker dado. Al igual que los volúmenes nombrados, los volúmenes anónimos persisten aunque se elimine el contenedor que los utiliza, a menos que se utilice la bandera  --rm al crear el contenedor, en cuyo caso el volumen anónimo se destruye. Si creamos varios contenedores consecutivamente que usan volúmenes anónimos, cada contenedor crea su propio volumen. Los volúmenes anónimos no se reutilizan ni se comparten automáticamente entre contenedores. Para compartir un volumen anónimo entre dos o más contenedores, debemos montar el volumen anónimo utilizando el ID de volumen aleatorio. Los volúmenes también admiten el uso de controladores de volumen, que permiten almacenar los datos en hosts remotos o proveedores de la nube, entre otras posibilidades.
  • 2- Montajes Bind

    Los montajes bind o bind mounts pueden almacenarse en cualquier lugar del sistema host. Los procesos que no pertenecen a Docker en el host de Docker o en un contenedor Docker pueden modificarlos en cualquier momento. Tienen funcionalidad limitada en comparación con los volúmenes. Cuando usamos un bind mount, un archivo o directorio en la máquina host se monta en un contenedor. El archivo o directorio se referencia por su ruta completa en la máquina host. El archivo o directorio no necesita existir previamente en el host de Docker. Se crea bajo demanda si aún no existe. Los bind mounts son rápidos, pero dependen de que el sistema de archivos de la máquina host tenga una estructura de directorios específica disponible. Si estamos desarrollando nuevas aplicaciones Docker, considera usar volúmenes nombrados en su lugar. No se pueden usar comandos de CLI de Docker para gestionar directamente bind mounts.
  • 3- tmpfs

    Docker también admite contenedores que almacenan archivos en memoria en la máquina host. Estos archivos no persisten. Si estáis ejecutando Docker en Linux, utilizad el montaje tmpfs para almacenar archivos en la memoria del sistema del host. Si estáis ejecutando Docker en Windows, se utilizad un named pipe para almacenar archivos en la memoria del sistema del host. Este tipo de almacenamiento en memoria puede ser utilizado por un contenedor durante su ciclo de vida para almacenar estado no persistente o información sensible. Por ejemplo, internamente, los servicios de Swarm utilizan montajes tmpfs para montajes "secretos" en los contenedores de un servicio.

Cómo conservar datos de IRIS en un contenedor Docker durante un período prolongado utilizando Docker Volume

Usar volúmenes de Docker es sencillo. Todo lo que necesitamos es crear un volumen y especificar el nombre del volumen mientras ejecutamos el contenedor.

A continuación se muestra el comando Docker para crear un nuevo volumen llamado irisVol:

docker volume create irisVol

Se crea el volumen irisVol.

Nota: no es necesario que creemos un volumen antes de usarlo en un contenedor. Docker creará automáticamente un volumen si especifica un nombre de volumen que aún no existe.

A continuación se muestra el comando de la ventana acoplable para inspeccionar el volumen:

$ docker volume inspect irisVol

De forma predeterminada, los volúmenes con nombre se crean en esta ruta:
/var/lib/docker/volumes/<nombre>/_data.

Ingresad el mismo comando usado anteriormente para ejecutar el contenedor, pero agregad la opción de volumen irisVol

docker run -d --name iris-comm -p 1972:1972 -p 52773:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo --mount source=mvol,target=/usr/irissys/mgr/user/ intersystemsdc/iris-community:latest

--mount source=mvol,target=/usr/irissys/mgr/user/:

  • Esta opción monta un volumen en el contenedor.
  • source=mvol especifica el nombre del volumen Docker que se utilizará.
  • target=/usr/irissys/mgr/user/ especifica el directorio dentro del contenedor donde se montará el volumen. Tened en cuenta que este es el directorio contenedor donde se almacena la base de datos de usuarios de iris.


Conectemos al terminal IRIS y establezcamos un valor global que comprobaremos si persiste

Detener y retirar el contenedor.

Recread el contenedor

Conectaos nuevamente al terminal iris y verificad el valor global ^DockerVolume


¡Éxito! Docker ha conservado los datos de IRIS

También podemos inspeccionar los detalles del volumen usando el siguiente comando:

$ docker container inspect iris-comm

Los resultados de este comando son largos, pero tened en cuenta que el área Montajes contiene información sobre vuestro volumen, que es este contenedor montado cuando se ejecuta inicialmente.
Al realizar este proceso con volúmenes montados, hay dos puntos clave que se deben comprender:

  • Los volúmenes existen fuera del sistema de archivos en capas de un contenedor. Esto significa que no se incluyen en el procedimiento habitual de copia en escritura cuando se manipulan archivos en la capa contenedora de escritura.
  • Podéis manipular archivos en la máquina host y hacer que esos cambios se propaguen sin problemas a un contenedor en ejecución a través de un volumen montado. Esta es una técnica popular para los desarrolladores que colocan en contenedores su entorno de ejecución, pero montan su código en desarrollo. De esta manera, podéis editar vuestro código usando vuestra máquina host y propagar esos cambios a contenedores en ejecución sin reconstruir ni reiniciar las máquinas.

Gracias!

Discussion (0)1
Log in or sign up to continue
Announcement
· Jun 26, 2024

[Video] Advanced Integration Monitoring & Alerting at UC Davis Interfaced with ServiceNow

Hi Developers,

Watch this video to learn how UC Davis Health is implementing a centralized operations-monitoring and alerting framework to handle notifications across its InterSystems IRIS infrastructure using ServiceNow, an IT service management platform:

⏯ Advanced Integration Monitoring & Alerting at UC Davis Interfaced with ServiceNow @ Global Summit 2023

🗣  Presenter: @Scott Nathanson, Integration Development Supervisor, UC Davis Health

Subscribe to our YouTube channel InterSystems Developers to get updated!

Discussion (0)1
Log in or sign up to continue
Article
· Jun 26, 2024 12m read

Exemplos para usar IRIS com Django

Introdução ao Django

Django é um framework web desenhado para desenvolver servidores e APIs, e lidar com bases de dados de uma maneira rápida, escalável e segura. Para garantir isso, o Django fornece ferramentas não apenas para criar o esqueleto do código, mas também para atualizá-lo sem preocupaçõs. Ele permite que o desenvolvedor veja as mudanças quase ao vivo, corrija erros com a ferramenta de debug, e cuide da segurança com facilidade.

Para entender como o Django funciona, vamos dar uma olhada na imagem abaixo:

 

Para resumir, o cliente envia uma requisição com uma URL. Essa URL endereça uma view que tratará a requisição adequadamente, com o auxílio de informações recuperadas do modelo alimentado pela base de dados. Uma vez que o tratamento está completo, a resposta é enviada de volta ao cliente por meio de um template. O Django faz todo esse processo complexo de uma forma menos problemática.

 

Introdução ao Django-iris

O Django utiliza backends customizáveis para lidar com qualquer base de dados que o desenvolvedor possa necessitar. MySQL, Postgre, Oracle, e outras já foram implementadas e são fáceis de encontrar no GitHub. Django-iris é um backend para adaptar o framework Django às bases de dados IRIS, o que significa que todos os recursos vindos das plataformas InterSystems podem ser utilizados lado a lado com ferramentas do Django.

Na prática, se dermos uma olhada na ilustração acima, a DATABASE seria IRIS no lugar de PostgreSQL.

O código fonte e informações sobre a aplicação e seus desenvolvedores podem ser encontrados em django-iris by caretdev.  

 

Começando

Eu aprendi na Innovatium que o melhor jeito de começar a aprender uma nova linguagem é aprender a fazer um simples sistema CRUD (Criar, Ler, Atualizar e Deletar - do inglês). Depois disso, será mais fácil entender como a linguagem funciona e evoluir para tarefas mais complicadas e específicas que você pode necessitar.

Com isso em mente, primeiro vou mostrar como construir o CRUD mais simples possível. Depois que tudo esteja claro e você começar a se sentir familiar com a ferramenta, vou discutir outros exemplos que o Django poderia ajudar. Finalmente, se tivermos sorte, conseguirei te convencer a usá-lo.

Você pode seguir esse tutorial no histórico de commits do repositório GitHub, começando em django-admin startproject irisCrud.

 

Pré-requisitos

Sua máquina deve ter Python, Django, alguma boa ferramenta de desenvolvimento como VSCode e acesso a uma instância IRIS. Aqui vai um breve guia:

Download VSCode (lembre-se de adicionar extensões Python para te ajudar no desenvolvimento)

Download Python

Digite pip install django no terminal

Digite pip install django-iris no terminal

 

Kick-off

Crie uma pasta para o seu projeto, mude o diretório do terminal para essa nova pasta e digitedjango-admin startproject NOMEDOPROJETO .

Você pode omitir o ponto no final para criar uma pasta dentro do diretório atual com o nome NOMEDOPROJETO. 

Isso deve criar os arquivos a seguir, onde CRUD foi o nome escolhido em NOMEDOPROJETO.

Agora você pode conduzir sua primeira migração e rodar seu server ao digitar os comandos a seguir no terminal. Nesse ponto, você deve notar que alguns outros arquivos foram criados.

python manage.py migrate

python manage.py runserver

Se você seguir o link http://127.0.0.1:8000/, verá a pagina inicial defult para projetos Django.
Seu próximo passo será criar o super usuário com python manage.py createsuperuser. O terminal pedirá um usuário, email e senha. Tome cuidado: quando escrever a senha, não verá os digitos, mas o terminal estará lendo o que estiver digitando.

 

Adicionando requisitos para o django-iris

Crie um arquivo na pasta raiz, chame de requirements.txt e cole o texto a seguir.

# Django 
django>=4.0.0
# InterSystems IRIS driver para Django
django-iris==0.2.2

No terminal, digitepip install -r requirements.txt e terá seu django-iris pronto para usar no projeto.

Agora abra o arquivo settings.py e procure pela configuração DATABASES. Mude-a para algo similar ao que segue:

DATABASES = {
    'default': {
        'ENGINE': 'django_iris',
        'NAME': 'USER',
        'USER': '_SYSTEM',
        'PASSWORD': 'SYS',
        'HOST': 'localhost',
        'PORT': 1972,
    }
}

Onde

  • ENGINE deve apontar para ‘django_iris’;
  • NAME deve indicar o namespace desejado
  • USER e PASSWORD devem referir a um usuário com os privilégios adequados;
  • HOST e PORT devem levar à sua instância. Você pode checar isso no InterSystems IRIS Server Manager.

 

Criar uma aplicação

Volte ao terminal e digite python manage.py startapp NOMEDOAPP.

Você terá uma pasta similar à iliustrada abaixo.

Agora você pode criar um modelo ao editar models.py  e ao criar uma classe com os nomes e campos requisitados. Por exemplo:

class Book(models.Model):
	title  = models.CharField(max_length=50)
	author = models.CharField(max_length=30)

Cada campo deve ser especificado como uma propriedade de "models". Você pode checar todos os campos disponíveis aqui. Você também pode configurar opções como tratamento de campos nulos e em branco, ou alternativas possíveis para os valores do campo.

Para ter certeza que o programa reconhecerá essa nova aplicação, volte em settings.py e adicione o nome da aplicação à lista INSTALLED_APPS:

INSTALLED_APPS: [
 …
‘books’,
]

 

Ao finalizar o passo anterior, digite python manage.py makemigrations no terminal para configurar migrações futuras. Observe o arquivo migrations/__pycache__/0001_initial.py para entender melhro o que esse comando faz. Então, digite python manage.py migrate para aplicar mudanças.

Vá ao Portal de Administração > Explorer do Sistema > SQL, escolja o namespace que você colocou na configuração DATABASES, e procure por SQLUser. Você verá as novas tabelas criadas no IRIS:

Se você selecionar um schema na tabela, verá nome da classe. Ali você pode abrir e fazer mudanças (por sua conta e risco) pelo Studio ou qualquer outra ferramenta de desenvolvimento.

 

Um pouco de front-end

Se você abrir o arquivo urls.py da pasta do projeto (CRUD), verá um path já construído que leva para a administração. Se você seguir o link http://127.0.0.1:8000/admin, receberá uma requisição para entrar com um usuário e senha. Você pode usar a que escolheu quando rodou o comando createsuperuser e dar uma olhada no que o Django tem para te oferecer nessa página.

Contudo, podemos ter mais páginas. Para criar uma URL custom baseada na nova aplicação, importe include de django.urls e adicione um novo caminho (path) apontando para a aplicação.

from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('books/', include('books.urls')),
]


Isso deve te redirecionar para o arquivo books/urls.py (você deve criá-lo primeiro), onde vamos adicionar um outro caminho que nos leve até a view. O arquivo deve ter o código a seguir:

from django.contrib import admin
from django.urls import path
from .views import home
urlpatterns = [
	path(‘’, home)
]


Agora é a hora de criar a view a qual estamos sendo direcionados. Vá para o arquivo books/views.py e adicione a definição com a request como parâmetro.

def home(request):
	return render(request, “index.html”)

Finalmente, crie o index.html. Ele deve ser adicionado à pasta books/templates. Observe a imagem abaixo para ter uma referência de como está a pasta books.

Se estiver usando VSCode, você pode digitar !+ENTER dentro do arquivo. Isso deve gerr um esqueleto de uma página HTML, então você já pode adicionar um "Hello World" ou algo similar ao body. Observe o exemplo abaixo.

<!DOCTYPE html>
<html>
 <body> hello world! </body>
</html>

Digite python manage.py migrate para aplicar as mudanças e siga para http://127.0.0.1:8000/books. Talvez você tenha que rodar o servidor com python manage.py runserver outra vez. Depois disso, deve funcionar sem mais problemas.

 

Adicionar objetos da página de administração

De volta à página de administração, agora podemos relizar todas as ações de CRUD no modelo criado. Para isso, entre em books/admin.py, importe o modelo de .models e o registre.

from .models import Book
admin.site.register(Book)

Se você entrar em http://127.0.0.1:8000/admin, agora deve ver tabela BOOKS com opções CRUD. Eu recomendo que você adicione alguns livros para os próximos passos.

Você tem a opção de implementar a função __str__ na classe de modelo para ter uma versão mas legível do objeto. Por exemplo, ela pode ser algo tão simples como o código abaixo.

 

def __str__(self):
	return self.title+” “+self.author

Se você não é familiarizdo com esse conceito, tire um tempo para dar uma olhada em qualquer artigo sobre POO (Programação Orientada a Objeto) em Python. Aqui você pode encontrar um bom texto, especialmente se quiser aprender mais sobre o método __str__.

As imagens abaixo mostram o portal de administração antes e depois de implementá-lo.

  

 

Mostrando os objetos na página inicial CRUD Read

Volte ao arquivo views.py, onde definimos a função home. Importe seu modelo e o adicione à função. Isso irá permitir que você o acesse pelo HTML.

from .models import Book
def home(request):
	books = Book.objects.all()
	return render(request, “index.html”, {“books”:books})


Agora, no arquivo index.html, você pode acessar todos os campos do seu modelo diretamente. Por exemplo, eu escolhi mostrar uma lista inteira de todos os itens com o código a seguir:

<body><ul>
    {% for book in books %}
    <li> {{book.id}} - {{book.title}} by {{book.author}} </li>
    {% endfor %}
  </ul>
</body>

Novamente, se você não está familiarizado cmo esse tipo de código, pode dar uma olhada em qualquer documentação confiável sobre o básico de HTML, e pode também clicar aqui para ler mais sobre as tags, como {%%} e {{}}. 

Vamos dar uma olhada na imagem no começo deste artigo. Ela nos mostra que o cliente envia uma requisição (por exemplo, abre o site), e a URL o endereça para uma view (a função home), que responde com os modelos contendo informações sobre a base de dados. Essa resposta é enviada de volta ao cliente em um template (HTML). Nesse momento, esse template deve se parecer com a imagem abaixo.


 

Adicionar novos objetos - CRUD Create

Primeiramente, precisamos decidir sobre como planejamos obter a informação para o novo objeto. Eu escolhi criar um simples formulário. Contudo, é preciso especificar o token para proteger o site de interações maliciosas. Você pode ler mais sobre segurança aqui.

<body><form action=”{% urlsave’ %}” method=”POST”>
    {% csrf_token %}
    <input type=”text” name=”title”>
    <input typetextname=”author”>
    <button type=”submit”>save</button>
  </form>
</body>

Outra vez temos uma requisição do cliente (i.e. o usuário preenche o formulário) e precisamos de uma URL que direcione para a view. A ação no formulário pode especificar essa URL, então vamos criá-la.

Em books/urls.py, vamos importar o "save" das views e adicionar um novo caminho:

from .views import home, save
urlpatterns = [
…
path(‘save/’, save, name=”save”),
]

Finalmente, criamos a view:

def save(request):
	formsTitle = request.POST.get(“title”)
	formsAuthor = request.POST.get(“author”)
	Book.objects.create(title=formsTitle, author=formsAuthor)
	books = Book.objects.all()
	return render(request, “index.html”, {“books”: books})

Se recarregarmos a página, veremos os inputs e o botão. Você também pode adicionar alguns outros objetos para checar que funcionam. Além disso, você pode abrir o portal SQL no Portal de Administração do IRIS para ver como o formulário envia a informação direto à tabela IRIS.

 

 

Editar objetos existentes - CRUD Update

Similar às operações que criamos anteriormente, para o update vamos precisar construir algo para enviar a requisição. Por exemplo, podemos adicionar um link próximo a cada objeto que deve direcionar um formulário análogo ao que criamos na seção anterior.

Começaremos modificando o index.html:

<body><ul>
  {% for book in books %}
    <li>
      {{book.id}} - {{book.title}} by {{book.author}} 
      <a href=”{% urleditbook.id %}”>Edit</a>
    </li>
    {% endfor %}
  </ul></body>

Agora, em urls.py devemos adicionar a nova URL, com o parâmetro ID:

from .views import home, save, edit
urlpatterns = [
…
path(‘edit/<int:id>’, edit, name=”edit”),
]

Então, podemos criar a view de edição em views.py:

def edit(request, id):
	book = Book.objects.get(id=id)
	return render(request, “update.html”, {“book”: book})

A view de edição enviará ao usuário um novo template para que ele possa fornecer as informações para atualizar o objeto. O arquivo update.html deve ser criado em books/templates. Abaixo temos um exemplo de template que preenche os requisitos que precisamos:

<!DOCTYPE html>
<html>
  <body>
    <form action=”{% urlupdatebook.id %}” method=”POST”>
      {% csrf_token %}
	 <input type=”text” name=”title” value=”{{book.title}}”>
	 <input type=“text” name=”author” value=”{{book.author}}”>
	 <button type=”submit”>update</button>
    </form>
  </body>
</html>

Agora que temos uma nova URL, vamos criá-la em urls.pye especificar sua view em views.py:

# file books/urls.py
from .views import home, save, edit, update
urlpatterns = [
…
path(‘update/<int:id>’, update, name=”update”),
]
# file books/views.py
from django.shortcuts import redirect
def update(request, id):
	book = Book.objects.get(id=id)
	book.title = request.POST.get(“title”)
	book.author = request.POST.get(“author”)
	book.save()
	return redirect(home)

Agora nosso return voltará ao template retornado pela view home.

Nesse ponto, você pode recarregar o programa e testar tudo, checando as informações correspondentes no IRIS.

 

Apagar um objeto - CRUD Delete

Precisamos habilitar uma maneira que o cliente possa interagir com o servidor para deletar informações. Há muitas maneiras de tornar isso possível. Eu vou simplesmente adicionar mais um link contendo uma URL, que direciona a informação a uma view, até a lista de exibição.

Modifique o index.html  como demonstrado abaixo:

<body><ul>
    {% for book in books %}
    <li>
      {{book.id}} - {{book.title}} by {{book.author}} 
      <a href=”{% urleditbook.id %}”>Edit</a>
      <a href = “{% urldeletebook.id %}”>Delete</a>
    </li>
    {% endfor %}
  </ul></body>

Eu acredito que agora você já conhece o suficiente desse processo para adivinhar que o próximo passo será criar um caminho em urls.py:

from .views import home, save, edit, update, delete
urlpatterns = [
…
path(‘delete/<int:id>’, delete, name=”delete”),
]

E, por fim, criar a view:

def delete(request, id):
	book = book.objects.get(id=id)
	book.delete()
	return redirect(home)

Recarregue a página. Seu novo link está pronto para ser testado:

 

Conclusão

Nesse artigo, criamos a base para quase todo servidor. Deve ser fácil para você, nesse momento, imaginar como evoluir o que fizemos hoje para um sistema de registro ou cobrança, ou até um blog, simplesmente adicionando alguns recursos de segurança (e, é claro, uma boa pitada de CSS).

Contudo, ainda podemos aprofundar o que aprendemos aqui para criar portais que podem exibir qualquer informação que você tenha na sua instância IRIS, evoluindo nosso servidor para um portal de administração para controlar fluxo de dados, interação de usuário, exibição de informações sobre logs e até envio de emails. Além disso, podemos usar Django para criar um endpoint, como uma página amigável ao usuário para interagir com APIs que construímos do IRIS, incluindo todo tipo de tratamento de dados, transformação e monitoramento que as plataformas InterSystems fornecem.

Discussion (0)1
Log in or sign up to continue
Question
· Jun 26, 2024

How to pass the cloned-object from one rule to another, and send the modified object to target Process or Operation in Rule Editor?

Each DTL calls “ConstructClone” to make a copy of the message before making any changes to it. There will be hundreds of cloned-objects in case of hundreds of DTLs

It is expected to run the rules chain by using Rule Editor without DTL, namely against a SINGLE cloned-object (for example HL7 2.3, ORU_R01) with a FunctionSet in case of hundreds or thousand of rules under same protocol

Question is how to pass the cloned-object from one rule 1 to rule 2, and send the modified object to target Process or Operation in Rule Editor?
 

Discussion (0)1
Log in or sign up to continue