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
ObjectScriptObjectScript
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>
}
ObjectScriptObjectScript
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)="" }
}
}
ObjectScriptObjectScript
El efecto es el siguiente:
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.