Artículo
· 8 mayo, 2024 Lectura de 2 min

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 diagram
ClassMethod 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:

   

Comentarios (2)2
Inicie sesión o regístrese para continuar

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.