Introducción
Sobre la base de esos blogs, en esta entrada de blog documentaré mis conocimientos sobre la exploración de acciones en el Informe de lista y la Página de objetos utilizando únicamente anotaciones.
Esta publicación de blog tiene como seguimiento la siguiente publicación posterior:
Explicación del escenario POC y sus recursos.
Usaremos el proyecto de muestra. “acciones-op-cap-fe-lr” que he compartido en GitHub aquí para explicar los conceptos. Examinemos brevemente el proyecto y algunos de sus archivos esenciales.
Estructura del proyecto | Carpeta o archivo | Objetivo |
base de datos/ | El modelo de datos se define en esquema.cds | |
srv/ |
Los servicios se definen en servicio.cds Las capacidades de los servicios se definen en anotaciones.cds |
|
aplicación/ | Contiene la aplicación UI. | |
aplicación/anotaciones | contiene todos los archivos de anotaciones. | |
anotaciones.cds | anotaciones para enumerar vistas de informes | |
acciones-genéricas.cds | anotaciones para acciones genéricas (explicadas en la sección 1 de Explicación Detallada) | |
acciones-determinantes-globales.cds | anotaciones para acciones globales y determinantes | |
acciones-de-grupo-de-campo.cds | anotaciones para acciones en el grupo de campos | |
tabla-acciones.cds | anotaciones para acciones en la tabla | |
chart-actions.cds | anotaciones para acciones en el gráfico | |
variedades-de-accion.cds | anotaciones para tipos de acciones |
Servicio “cap_fe_lr_op_actions_service» proporciona el siguiente conjunto de datos: raíces, elementos, Categorías, CriticidadesMuestras.
Tenga en cuenta que en esta publicación de blog, mi énfasis está en ilustrar la funcionalidad de presentar tablas en varias configuraciones. Vale la pena señalar que el servicio utilizado con fines de demostración puede no ser perfecto y se utiliza únicamente para explicar las funcionalidades.
Explicación detallada
Nota: Esta publicación de blog no profundiza en acciones personalizadas ni en la navegación a otras aplicaciones.
En SAP Fiori Elements, las acciones se refieren a operaciones o funcionalidades específicas que los usuarios pueden realizar dentro de una aplicación. Estas acciones suelen estar asociadas con botones que permiten a los usuarios activar comportamientos específicos, ejecutar tareas predefinidas o navegar a otras aplicaciones.
Hay dos formas de agregar acciones a las aplicaciones basadas en Fiori Elements.
Las acciones se pueden dividir en 2 categorías según cómo se agregan:
1. Acciones genéricas
Tanto en el informe de lista como en la página de objetos, SAP Fiori Elements ofrece acciones estándar como Crear (+), Eliminar, Editar, Exportar, Personalización, etc. Estas acciones se pueden personalizar habilitándolas o deshabilitándolas según los requisitos de su aplicación.
//======>>Service Annotaions<<======
annotate service.Roots with @(
Capabilities.Insertable: false
);
//========>>UI Annotaions<<========
annotate service.Roots with @(
UI.CreateHidden: true
);
//======>>Service Annotaions<<======
annotate service.Roots with @(
Capabilities.Updatable: false
);
//========>>UI Annotaions<<========
annotate service.Roots with @(
UI.UpdateHidden: true
);
Deshabilitar la acción de edición en el nivel de servicio no ocultará el botón de edición en la interfaz de usuario; en cambio, resulta en un error.
Además, es factible controlar dinámicamente la acción de edición en función de un elemento específico de la entidad o mediante el uso de expresiones dinámicas.
/* disableUpdation,enableUpdation
are elements of Roots entity. */
//======>>By Property<<======
annotate service.Roots with @(
UI.UpdateHidden: disableUpdation
);
//======>>By Dynamic Expression<<======
annotate service.Roots with @(
UI.UpdateHidden : {$edmJson: {$Ne: [
{$Path: 'enableUpdation'},
true
]}}
);
Esto ocultará dinámicamente el botón siempre que se cumpla la condición según el valor de la entidad.
//======>>Service Annotaions<<======
annotate service.Roots with @(
Capabilities.Deletable: false
);
//========>>UI Annotaions<<========
annotate service.Roots with @(
UI.DeleteHidden: true
);
La desactivación de la acción de eliminación basada en propiedad o expresión dinámica se aplica exclusivamente en la página del objeto.
/* disableDeletion,enableDeletion
are elements of Roots entity. */
//======>>By Property<<======
annotate service.Roots with @(
UI.DeleteHidden: disableDeletion
);
//======>>By Dynamic Expression<<======
annotate service.Roots with @(
UI.DeleteHidden : {$edmJson: {$Ne: [
{$Path: 'enableDeletion'},
true
]}}
);
"controlConfiguration": {
"@com.sap.vocabularies.UI.v1.LineItem": {
"tableSettings": {
"enableExport": false,
"personalization": {
"sort" : false,
"filter": false,
"column": false
}
}
}
}
2. Acciones específicas de la aplicación
Según la posición o ubicación, se pueden agregar los siguientes diferentes tipos de acciones en el informe de lista o en las páginas de objetos mediante anotaciones:
annotate service.Roots with @(UI.Identification: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.ga_op_calculate',
Label : 'Trigger Calculation',
Criticality: #Negative
},
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.EntityContainer/ga_op_ub_replication',
Label : '(Unbound) Trigger Replication',
Criticality: #Positive
}
]);
/*==========>> Button on ToolBar <<==========*/
annotate service.Roots with @(UI.LineItem: [
{
$Type : 'UI.DataFieldForAction',
Action: 'cap_fe_lr_op_actions_service.ta_lr_toolbarAction',
Label : 'Toolbar Action',
}
]);
/*==========>> Button as Column <<==========*/
annotate service.Roots with @(UI.LineItem: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.ta_lr_inlineAction',
Label : 'Inline Action',
Inline : true,
Criticality: #Positive
}
]);
annotate service.Roots with @(UI.LineItem: [
{
$Type : 'UI.DataFieldForAction',
Action: 'cap_fe_lr_op_actions_service.EntityContainer/ta_lr_ub_toolbarAction',
Label : '(Unbound) Toolbar Action'
}
]);
En este caso, la selección de la fila no tiene ningún impacto y no se pasa el contexto, por lo que se denominan acciones independientes del contexto. Además, la propiedad Acción se refiere a la acción independiente de su servicio en el formato ‘{ServiceName}.EntityContainer/{ActionName}’.
annotate service.Roots with @(UI.LineItem: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.ta_lr_inlineIconAction',
Label : 'Inline Icon Action',
Inline : true,
IconUrl : 'sap-icon://da',
Criticality: #Negative
}
]);
annotate service.Roots with @(UI.FieldGroup #Details: {
$Type: 'UI.FieldGroupType',
Data: [
{
$Type : 'UI.DataFieldForAction',
Action: 'cap_fe_lr_op_actions_service.EntityContainer/fg_op_ub_triggerRefresh',
Label : '(Unbound) Section Trigger'
},
{
$Type : 'UI.DataFieldForAction',
Action: 'cap_fe_lr_op_actions_service.fg_op_triggerInlineAction01',
Label : 'Inline Trigger 01',
Inline: true
}
]});
annotate service.Roots with @(UI.FieldGroup #MoreDetails: {
$Type: 'UI.FieldGroupType',
Data : [
{
$Type : 'UI.DataFieldForAction',
Action: 'cap_fe_lr_op_actions_service.fg_op_triggerAction',
Label : 'Section Trigger'
},
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.fg_op_triggerInlineAction02',
Label : 'Inline Trigger 02',
Inline: true
}
]});
Los botones de acción también se pueden agregar a la barra de herramientas del gráfico definiendo la propiedad Acciones en el término de anotación UI.Chart.
Aquí hay un ejemplo:
UI.Chart #ROChart: {
$Type : 'UI.ChartDefinitionType',
Title : 'Amount By Item',
ChartType : #Bar,
Dimensions : [iname],
DimensionAttributes: [{
$Type : 'UI.ChartDimensionAttributeType',
Dimension: iname,
Role : #Category
}],
DynamicMeasures: ['@Analytics.AggregatedProperty#itemamount_sum'],
Actions : [
{
$Type : 'UI.DataFieldForAction',
Action : 'ca_op_ub_chartAction',
Label : '(Unbound) Chart Action',
Criticality: #Positive
}
]
}
Nota: Solo se pueden agregar acciones independientes a la barra de herramientas del gráfico.
Determinar acciones
annotate service.Roots with @(UI.Identification: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.da_op_clearParymentAction',
Label : 'Clear Payment Action',
Determining: true,
Criticality: #Negative
},
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.EntityContainer/da_op_ub_clearOutstanding',
Label : '(Unbound) Clear Outstanding',
Determining: true,
Criticality: #Positive
}
]);
Funciones varias
annotate service.Roots with actions{
ta_lr_inlineAction @Core.OperationAvailable: disableUpdation;
ta_lr_inlineIconAction @Core.OperationAvailable: {
$edmJson: {$Gt: [{$Path: 'totalAmount'}, 1000]}
};
ta_lr_toolbarAction @Core.OperationAvailable: disableUpdation;
};
En el ejemplo anterior, ta_lr_inlineAcción se deshabilitará o habilitará (se podrá hacer clic en él) según el valor en el elemento ‘disableUpdation’ de la entidad Roots. similar ta_lr_inlineIconAcción se deshabilitará o habilitará si ‘totalAmount’ es mayor que 100 de la entidad Roots.
annotate service.Items with @(UI.LineItem #Items: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.ta_op_item_inline',
Label : 'Item Inline Action',
Inline : true,
Criticality: #Positive,
![@UI.Hidden]: {$edmJson: {$Ne: [{$Path: 'enableItem'}, true]}}
}
]);
resultado:
annotate service.Items with @(UI.LineItem #Items: [
{
$Type : 'UI.DataFieldForAction',
Action : 'cap_fe_lr_op_actions_service.ta_op_item_inline2',
Label : 'Action on Edit',
Inline : true,
Criticality: #Negative,
![@UI.Hidden]: IsActiveEntity
}
]);
Tenga en cuenta que EsEntidadActiva es una propiedad dentro de Fiori Elements y se establece en falso cuando la entidad está en modo de edición.
Conclusión
En esta publicación de blog, hemos profundizado en la utilización de diferentes anotaciones para incorporar acciones en diferentes posiciones en el Informe de lista y las Páginas de objetos junto con algunas características diversas.
Juntos, el modelo de programación de aplicaciones en la nube y Fiori Elements mejoran la experiencia de los desarrolladores al mismo tiempo que aumentan la productividad y aceleran el desarrollo de aplicaciones listas para la empresa.
Puede encontrar más información sobre Fiori Elements con el modelo de programación de aplicaciones en la nube aquí. Puede seguir mi perfil para recibir notificaciones de la próxima publicación del blog sobre CAP o Fiori Elements. No dude en proporcionar cualquier comentario que tenga en la sección de comentarios a continuación y hacer sus preguntas sobre el tema en la comunidad SAP usando este enlace.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073