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.TargetConfigNameSí, 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
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.
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.