Con la última versión 10.0.10 de Dynamics 365 for Finance and SCM nos llega una feature nueva que nos permitirá añadir acciones a la barra de mensajes usando la Messaging API, como lo que teníamos en AX2012 con la clase SysInfoAction.
Recordad que esto está en la última versión de preview. Podéis acceder a las previews si os apuntáis al Dynamics 365 Insider Program.
Messaging API
La Messaging API nos permite mostrar información a los usuarios en las barras de mensajes, el Action center o cajas de mensajes.
Barra de mensajes
Normalmente usamos la barra de mensajes para mostrar información en tareas síncronas en el formulario en el que estemos trabajando. Se puede mostrar en diálogos también.
El propósito es mostrar información en el formulario actual, si se cierra el formulario, adiosito mensajes.
Action center
El action center se usa para mostrar información de tareas asíncronas. Las notificaciones se quedan ahí hasta que el usuario las marca como leídas.
La cantidad de mensajes se muestra en la campana de la esquina superior derecha de MSDyn365FO. Recordad que la cantidad máxima de mensajes que se pueden mostrar es 500. Si necesitáis mostrar más de 500 mensajes igual lo mejor es crear algún tipo de logging en vez de usar el Action center.
Message boxes
Las message boxes interrumpen lo que sea que está haciendo el usuario. Se usa para operaciones sincronas que han finalizado. Se bloquea la UI hasta que se cierra.
Messaging API AddAction
Esto es algo que he echado de menos desde que salió AX7 y ahora se ha añadido a la Messaging API con el método Message::addAction():
static final int64 AddAction(MessageSeverity _severity, SysInfoLogStr _text, str _actionText, MessageActionType _type, str _payload)
{
int64 messageId = infolog.insertActionMessage(_severity, _text, '', _actionText);
action.MessageId = messageId;
action.Type = _type;
action.ActionData = _payload;
action.insert();
return messageId;
}
Necesitamos pasar los siguientes parámetros:
MessageSeverity _severity
Un enumerado con los valores Informational, Warning and Error. Está claro, lo mismo que en la clase infolog. Barras de mensaje Info (azul), Warning (yellow) y Error (red).
SysInfoLogStr _text
El texto del mensaje que vamos a mostrar. «Ha ocurrido un error», «Ha fallado la validación», lo que quieras.
str _actionText
El texto clickable de la acción. Esto será un link a un form (con un menu item display) o una acción (con un menu item action).
MessageActionType _type
El tipo de la acción, un enumerado con los valores ActionMenuItem, DisplayMenuItem y ApplyViewQuery.
Las acciones display y action están claras. Sobre la ApplyViewQuery: he estado mirando por el código buscando esta acción y el único sitio que he encontrado que se use es en el método rolloutView de la clase FormRunConfigurationClass, que es un método interno.
No estoy seguro del todo sobre esto, pero seguramente se está usando para loguear fallos en la telemetría cuando se carga la configuración de un formulario. Sólo he encontrado una referencia al enumerado en los metadatos y es en esta clase.
str _payload
La carga JSON simplemente es esto:
MenuItemMessageAction actionData = new MenuItemMessageAction();
actionData.MenuItemName(menuItemDisplayStr(CustParameters));
str jsonData = FormJsonSerializer::serializeClass(actionData);
Defines una nueva acci’on con un menu item de tipo display o action y se serializa. Hecho.
Un ejemplo
MenuItemMessageAction actionData = new MenuItemMessageAction();
actionData.MenuItemName(menuItemDisplayStr(CustParameters));
str jsonData = FormJsonSerializer::serializeClass(actionData);
Message::AddAction(MessageSeverity::Error, "An error ocurred: there's missing parameters", 'Go to Customer parameters', MessageActionType::DisplayMenuItem, jsonData);
Imagina que tienes un proceso que necesita algunos parámetros de la CustParameters. Validas que esos campos estén rellenados y sino lanzas un error. Ahora puedes añadir un enlace en el mensaje como en el código de arriba, y se ve así:
El usuario tendrá una forma más rápida de ir al formulario de parámetros de clientes y completar la configuración. Esto es especialmente útil para guiar a los usuarios a los sitios correctos.