Escrito por

Sales Engineer at InterSystems Iberia
Artículo Luis Angel Pérez Ramos · mayo 8, 2024 2m read

Establecer dinámicamente el objetivo de una <call> en BPL

Hola a todos,

Cuando estamos diseñando un BP que necesita ser reutilizado, a menudo necesitamos desarrollar un componente con un objeto <call> configurable, donde establecemos el destino de la llamada al objeto.

@process.TargetConfigName

Sí, se puede lograr.

Aquí está el código completo:

Property TargetConfigName As Ens.DataType.ConfigName;Parameter
SETTINGS = "TargetConfigName:Basic";/// BPL Definition
XData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]
{
<process language='objectscript' request='Ens.Request' response='Ens.Response' height='2000' width='2000' >
<sequence xend='200' yend='450' >
<call name='Call configurable target' target='@process.TargetConfigName' async='1' xpos='200' ypos='250' >
<request type='Ens.Request' >
<assign property="callrequest" value="request" action="set" />
</request>
<response type='Ens.Response' >
<assign property="response" value="callresponse" action="set" />
</response>
</call>
<sync name='Wait' calls='Call configurable target' type='all' xpos='200' ypos='350' />
</sequence>
</process>
}

Por otro lado, para mostrar el estilo de conexión también en la página de configuración de Producción, es necesario añadir el siguiente código:

/// Return an array of connections for drawing lines on the config diagramClassMethod OnGetConnections(Output pArray As%String, pItem As Ens.Config.Item)
{
	Do##super(.pArray,pItem)
	If pItem.GetModifiedSetting("TargetConfigNames",.tValue) {
		For i=1:1:$L(tValue,",") { Set tOne=$ZStrip($P(tValue,",",i),"<>W")  Continue:""=tOne  Set pArray(tOne)="" }
	}
}

El efecto es el siguiente:

  

Comments

Yone Moreno · mayo 10, 2024

Gracias por compartirlo Luis Ángel.

¿Entonces esto serviría para poner desde la Producción Web, el nombre de la Operación a la cual el Proceso envía?

Una duda: ¿serviría poner una lista de nombres separados por comas, para enviar a varias Operaciones?

Gracias por compartirlo, no sabía que esto era posible.

0
Luis Angel Pérez Ramos  mayo 10, 2024 to Yone Moreno

Efectivamente, con el uso del @process.TargetConfigName puedes definir dinámicamente el destino (enviando un ens.request y teniendo un ens.response).

Con respecto a tu duda, no creo que funcione automáticamente añadiendo valores separados por comas, pero lo que puedes hacer es meter en un bpl un bucle for en el que mediante el método piece recuperes la lista de valores separados por comas y hagas una llamada call or cada valor dentro del bucle.

0