Variable Interproceso y Colecciones

Una Duda.

En un archivo XLIFF tengo los mensajes en varios idiomas de una aplicación.
En Startup utilizando STRING LIST TO ARRAY lleno un Array interproceso.
Y los datos del Array los utilizo en los mensajes de Alerta.

Ahora quiero utilizar Colecciones. ¿Cómo lo hago?

  1. STRING LIST TO ARRAY.

  2. Crear una colección Compartida. New shared collection.

  3. Pasar los datos a la Colección Compartida utilizando ARRAY TO COLLECTION.

  4. Para que los diferentes procesos lean los datos de Alerta tengo que pasar la colección compartida como parámetro en un nuevo proceso: New process .

¿Este es el camino a seguir?

¿El nombre de la colección tiene que tener el símbolo de variable local ( $ ) o no importa?

¿A partir de las Colecciones puedo eliminar todas las variables Interproceso?

¿Una Colección no compartida solamente funciona dentro de un mismo proceso?

:wink:

Hola Joan,

Las colecciones y objetos compartidos son la forma de reemplazar las variables interproceso para cuando quieras crear procesos de hilo seguro.

Los pasos que propones suenan correctos excepto el 4to. La colección compartida la puedes acceder desde cualquier proceso si la agregas a Storage.

Ej:

En el método de On Startup defines tu colección compartida:
<code 4D>
C_COLLECTION($colec)

$colec:=New shared collection(1;2;3;4)

Use (Storage)
Storage.coleccion:=$colec
End use
</code 4D>

Y luego llamar Storage.coleccion desde cualquier proceso:

<code 4D>
$colec:=Storage.coleccion
</code 4D>

Saludos,

Perfecto, pero en algún sitio había leído (4d_tech) que también se podía pasar las colecciones en los parámetros siguiendo la Ley de Demeter.

Quizá sea más práctica la solución de Storage.

:wink:

El uso de las variables interproceso va en contra de la Ley de Demeter.

Sin embargo, dado que en 4D tener variables interproceso es fundamental para ciertas aplicaciones, y que por otro lado las variables interproceso no son compatibles con procesos multihilo, entonces se inventó Storage como mecanismo de tener valores que se pueden acceder desde cualquier parte de la aplicación.

No me referia a las variables interproceso, me referia a las colecciones pasarlas cómo parámetro.

De todas maneras gracias, ya tengo claro el concepto.

:smiley: