Hoy toca uno corto. Hace un tiempo ya expliqué como añadir un lookup multiselección a un diálogo de SysOperation, y en este post voy a contar como añadir un Menu Item a un diálogo de SysOperation como un Function Button.
Antes de que se introdujera el SysOperation Framework en AX2012, usábamos el RunBase Framework, y quizá hacer estas cosas parecía más fácil/rápido con el RunBase porque teníamos toda la lógica en una única clase. Pero al final lo que tenemos que hacer es prácticamente lo mismo pero en la clase UIBuilder.
Dejad que os muestre y explique el código. Sólo voy a enseñar el DataContract y la UIBuilder porque son las únicas que nos interesan en este caso.
Clase DataContract
[
DataContract,
SysOperationContractProcessing(classStr(AASMenuItemDemoUIBuilder)),
SysOperationGroup('VendGrp', 'Vendor', '1')
]
class AASMenuItemDemoDataContract
{
VendAccount vendAccount;
[
DataMember,
SysOperationGroupMember('VendGrp')
]
public VendAccount parmVendAccount(VendAccount _vendAccount = VendAccount)
{
vendAccount = _vendAccount;
return vendAccount;
}
}
Por favor, ignorad todo el hardcodeo 😛
En la clase Data Contract he definido un miembro de tipo VendAccount. También he creado un grupo usando el atributo SysOperationGroup y puesto el campo VendAccount dentro de este usando el atributo SysOperationGroupMember en el método parm.
También he definido la clase UIBuilder usando el atributo SysOperationContractProcessing.
Clase UIBuilder
class AASMenuItemDemoUIBuilder extends SysOperationAutomaticUIBuilder
{
FormBuildFunctionButtonControl menuItemBtn;
FormBuildGroupControl vendorGrp;
public void build()
{
super();
vendorGrp = this.dialog().formBuildDesign().control('VendGrp');
menuItemBtn = vendorGrp.addControl(FormControlType::MenuFunctionButton, 'AASVendTableBtn');
menuItemBtn.menuItemType(MenuItemType::Display);
menuItemBtn.menuItemName(menuItemDisplayStr(VendTable));
}
}
Todo lo que necesitemos modificar en el diálogo que genera el SysOperation Framework tiene que hacerse en la clase UIBuilder. Lo que tenemos que hacer es exactamente lo mismo que hubieramos hecho con una RunBase. Obtener los controles del diálogo y modificarlos o añadir elementos.
Obtenemos el grupo VendGrp que hemos creado en la clase Data Contract y le añadimos un control. Este control será del tipo MenuFunctionButton y una vez creado definimos sus propiedades y listo!