English version (not available yet)
Descripción
Las acciones son elementos de un Dynamic Form que buscan agregar comportamiento a las propiedades (DynProperty) que componen un form dinámico. Se especifican a nivel de cada propiedad por lo que cada una puede definir un conjunto de acciones diferentes. Los caso de uso que intentan resolver son por ejemplo el siguiente:
Dado una propiedad en donde se debe ingresar el código de cliente (CustomerID), sería deseable tener un prompt de clientes. Mediante la adición de una Action de type "prompt" podríamos solucionar el caso anterior. La idea es que dicha acción dibujará un link (o botón) al lado del CustomerId de tal manera de que cuando se abra el prompt y se seleccione un valor el mismo será retornado sobre el campo CustomerID.
Los tipos de acciones existentes están bajo el dominio DynActionsTypes. Algo importante a tener en cuenta es que las acciones pueden aplicar solamente a un modo determinado (Edit ó View) como se verá más adelante.
Ejemplo
DynProperty
{
Id = "Name"
Name = "Name"
Type = DynBasicTypes.Character
Value = "John"
Actions
{
Action
{
Type = DynActionsTypes.NameLink
Value = "http://www.gxtechnical.com"
}
Action
{
Mode = DynModes.View
Type = DynActionsTypes.ValueLink
Value = "http://www.genexus.com"
}
Action
{
Id = "customAction"
Name = "Custom Action"
Mode = DynModes.Edit
Type = DynActionsTypes.Custom
UIType = DynActionsUITypes.Link
}
}
}
Estructura
-
Id: identificador único de la acción
-
Name: nombre de la acción. Contiene del link o botón a mostrar.
-
Mode: indica el modo en el cual debe mostrarse la acción. En caso de no ser especificado aplica a todos los modos.
-
Type: tipo de acción dado por el dominio DynActionTypes
-
UIType: indica el control que debe mostrarse para representar la acción. Está dado por el dominio DynActionsUITypes y puede tomar los valores Link o Button.
-
Value: valor de la cción
-
Metadata: metadata de la acción.
Tipo de acciones
Actualmente existen conjunto de acciones predefinidas pero el esquema de acciones es totalmente extensible por lo que se pueden ir agregando más acciones en el futuro. Los siguientes tipos de acciones se encuentra todos en el dominio DynActionTypes.
-
NameLink
Agrega un determinado link al Name de una propiedad.
Action
{
Type = DynActionsTypes.NameLink
Value = "http://www.gxtechnical.com"
}
-
ValueLink
Agrega un determinado link al Value de una propiedad.
Action
{
Type = DynActionsTypes.ValueLink
Value = "http://www.genexus.com"
}
-
Save
Dibuja un link o botón que al presionarlo retornará el valor de una propiedad al server. Para capturar el evento en el server deberá programarse lo siguiente:
Event dynamicForm1.OnSave
&xml = &dynForm.DynProperty.ToXml()
// do something...
EndEvent
Action
{
Id = "customAction"
Name = "Custom Action"
Mode = DynModes.Edit
Type = DynActionsTypes.Custom
UIType = DynActionsUITypes.Link
}
-
Custom
Sirve para definir acciones propias que serán identificadas a través del Id de la acción. Las acciones serán capturadas luego en el evento "OnAction" del Dynamic Form. Un ejemplo completo sería el siguiente:
Action
{
Id = "action1"
Name = "Custom Action"
Type = DynActionsTypes.Custom
UIType = DynActionsUITypes.Link
}
Event dynamicForm1.OnAction
if dynamicForm1.CurrentActionType = "action1"
// do something...
Endif
EndEvent
-
Prompt
La acción de prompt invocará a un cierto objeto GX que retornará un conjunto de valores. Con un ej. se explica su implementación:
DynProperty
{
Id = "myprop"
Name = "Property X"
Type = DynBasicTypes.Character
Actions
{
Action
{
Id = "Prompt"
Type = DynActionsTypes.Prompt
Value = "GxObject" //obligatorio: debe indicarse el nombre del objeto genexus que se desea invocar
Metadata
{
MetadataItem
{
Id = "image" //opcional: permite especificar la imagen asociada al prompt
value = MyImage.Link() //se debe especificar un link a la imagen
}
MetadataItem
{
Id = DynPromptParmType.In //opcional: identifica un parámetro de entrada solamente que se obtiene del formulario
value = "myprop" //id del DynProperty de donde se desea obtener el valor
}
MetadataItem
{
Id = DynPromptParmType.InConstant //opcional: identifica un parámetro de entrada con un valor constante
value = "una constante" //el valor constante debe estar en formato string
}
MetadataItem
{
Id = DynPromptParmType.InOut //opcional: identifica un parámetro de entrada-salida que se obtiene del formulario
value = "myprop" //id del DynProperty de donde se desea obtener el valor y donde se retornará el resultado
}
MetadataItem
{
Id = DynPromptParmType.Out //opcional: identifica un parámetro de salida solamente del formulario
value = "myprop" //id del DynProperty donde se retornará el resultado
}
MetadataItem
{
Id = DynPromptParmType.OutNull //opcional: identifica un parámetro de salida nulo
value = "" //no es necesario identificar nada más; cualquier valor que retorne el prompt simplemente será desestimado.
}
}
}
}
}
Notas:
-
Los parámetros se evalúan en el orden que se definen. Es decir si el prompt posee 2 parámetro X y Z, los mismos deben ser identificados en ese orden.
-
Si no se especifica parámetro alguno se entiende que el prompt posee sólo un parámetro de salida (Out) y que el valor devuelto se copia en la misma propiedad donde se definió el prompt.
-
El objeto a invocar como prompt no debe encriptar parámetros. Es una limitación temporal.
Modo de acciones
Las acciones pueden especificar un modo (atributo Mode) lo cual significa que la acción solo aplicará cuando el formulario se encuentre en el modo especificado. En caso de no especificar modo alguno, la acción aplicará a todos los modos.
Nota: actualmente los tipos de acciones implementados son NameLink, ValueLink, Save, Custom y Prompt.