ORDA – Compartir una selección de entidades entre procesos

Traducido automáticamente de Deepl

4D v16 R6 introdujo un nuevo concepto de comunicación entre procesos: ¡variables de objetos y colecciones compartidas! Gracias a esto, podrá compartir fácilmente información entre procesos.

Hasta ahora, las selecciones de entidades no se podían compartir entre procesos. Sin embargo, eso ha cambiado… ¡nos complace anunciar que en 4D v18 R5 las selecciones de entidades son compartibles!

Se acabaron los días de construir una lista de claves primarias para mover una selección de entidades a otro proceso. Mejore su código multiproceso incluyendo las selecciones de entidades ORDA como objetos compartidos.

Siga leyendo para saber más.

HDI: Compartir selecciones de entidades ORDA

principio

Con 4D v18 R5, la mayoría de las selecciones de entidades son compartibles . Esto significa que

  • no son modificables (no permiten añadir nuevas entidades).
  • pueden ser compartidas entre varios procesos o trabajadores.

Algunas selecciones de entidades son no compartibles (por ejemplo, si han sido creadas con dataClass.newSelection() o Create entity selection()). Esto significa que

  • son alterables (permiten añadir nuevas entidades)
  • no pueden ser compartidas entre varios procesos

selecciones de entidades compartibles

A partir de 4D v18 R5, las selecciones de entidades más utilizadas (recuperadas con query(), all(), …) son compartibles.

Veamos un ejemplo para entenderlo mejor.

Ejemplo

En el siguiente ejemplo, construimos dos selecciones de entidades:

  • una para las facturas pagadas.
  • una para las facturas no pagadas.

Podríamos querer pasarlas a un trabajador para delegar el envío

  • correos electrónicos de acuse de recibo para las facturas pagadas.
  • correos electrónicos de recordatorio para las facturas impagadas.

Este es el código:

If Storage
End use

CALL WORKER Storageinfo(Storage.info=Null)
Use (Storage)
Storage .info:=New shared object()
End use
End if

Use (Storage.info)
//Put entity selections in a shared object
.info.paid:=ds.Invoices.query("status=:1"; "Paid")
Storage .info.unpaid:=ds.Invoices.query("status=:1"; "Unpaid") xml-ph-0034@de

Este es el método sendMails :

var $info; $1: Object
var $paid ; $unpaid: cs.InvoicesSelection
var $invoice : cs.InvoicesEntity
var $server ; $transporter; $email; $status: Object

//Prepare emails s
$server :=New object
$server .host:="exchange.company.com"
$server .user:="myName@company.com"
$server .password:="mi contraseña"

$transporter :=SMTP New transporter($server)

$email :=New object
$email .from:="myName@company.com"

//Get entity selections
$info:=$1
$paid:=$info.paid
$unpaid:=$info.unpaid

//Loops on entity selections
For each ($invoice; $paid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Payment OK for invoice #"+String($invoice.number)
$status :=$transporter.send($email)
End for each

For each ($invoice; $unpaid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Please pay invoice # "+String($invoice.number)
$status :=$transporter.send($email)
End for each

Como se puede ver, el trabajador puede ocuparse de las selecciones de entidades

yendo y viniendo entre las selecciones de entidades compartibles / no compartibles

En algunos casos, puede tener una selección de entidades no compartible. Si necesita compartirla con otro proceso, sólo tiene que utilizar la función new .copy() disponible en los objetos de selección de entidades.

Aquí hay un ejemplo de eso:

El Form.products es una nueva selección de entidad vacía obtenida con la función de clase newSelection(). Por lo tanto, no es compartible y acepta añadir una entidad.

Form.products:=ds.Products.newSelection()

//Form.product is entered by the user
Form .products.add(Form.product)

Si intentas ponerlo «tal cual» en el objeto compartido $sharedObj, obtendrás un error:

var $sharedObj : Object
$sharedOb j:=New shared object()

Use ($sharedObj)
//Error "Not supported value type in a shared object or a shared collection"

$sharedObj.products:=Form.products
End use

Desde que ORDA piensa en todo, hay una nueva .copy() disponible en los objetos de selección de entidades.

Devuelve una copia de la selección de entidades dada, por lo que podemos pedir que esta copia sea compartible o no.

var $sharedObj : Object
$sharedObj :=New shared object()

Use ($sharedObj)
//Returns a shareable copy of the Form.products entity selection
$sharedObj .products:=Form.products.copy(ck shared)
End use

Eso es todo.

Por supuesto, con esta nueva función de clase, también puede convertir una selección de entidad compartible en una no compartible omitiendo el parámetro opcional.

Tenga en cuenta que el comando OB Copy también ha sido actualizado:

  • acepta una selección de entidades como parámetro.
  • Las selecciones de entidades anidadas en el objeto a copiar también se copian según la opción pasada.

Descargue el IDH y consulte la documentación para obtener más información.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.