Cuando se desarrolla para Microsoft Dynamics AX es muy común tener que consultar tipos de datos, nombres de campos, tablas, etc. para mantener la coherencia entre objetos nuevos y estándar. Esta consulta se puede hacer mediante las propiedades de los formularios (el botón Configurar del menú contextual estándar) y consultando el diseño o la query que se muestra en este formulario o yendo directamente al objeto del AOT:
Pero si esta consulta la tenemos que hacer muy a menudo, como al principio de un gran desarrollo, es molesto tener que hacer todos estos pasos cada vez y se puede consultar mucho mas fácilmente de esta manera:
Modificar la la clase SysSetupFormRun para añadir el siguiente método:
// jaestevan.com - Nuevo - Información de campos con Ctrl+Z public int jaee_taskInfoCtrlZ(int _p1) { #task FormDataSource formDataSource; int ret; SysDictField df; FormControl fc; formStringControl fsc; DictEnum dictEnum = new DictEnum(enumnum(Types)); DictEnum dictEnums; ; // Si el usuario no tiene permisos de desarrollo, no hace nada if (!hasSecuritykeyAccess(securitykeynum(SysDevelopment), AccessType::Delete)) return ret; if (_p1 == 769) // 769 = Ctrl + Z { fc = this.selectedControl(); formDataSource = this.objectSet(); // Si está sobre un DataSource busca información sobre el registro if (fc && formDataSource) { fsc = fc; if (fsc.dataField() && formDataSource.table()) { info(strfmt('T.Field -> %2. %1', fieldId2Name(formDataSource.table(), fsc.dataField() - 65536), tableId2Name(formDataSource.table()))); // Si es un campo de una tabla df = new SysDictField(formDataSource.table(), fsc.dataField() - 65536); if (df) { info(strfmt('Type -> %1', dictEnum.index2Symbol(df.baseType()))); if(df.baseType() == typeOf(Types::Enum)) { dictEnums = new dictEnum(df.enumId()); info(strfmt('Enum Name -> %1', dictEnums.name())); } info(strfmt('Extends -> %1', extendedTypeId2name(df.typeId()) )); info(strfmt('Size -> %1', int2str(df.stringLen()) )); info(strfmt('Max.Rights -> %1', df.rights())); info(strfmt('Label -> %1: %2', df.labelLabel(), df.label() )); info(strfmt('Help -> %1: %2', df.helpLabelId(), df.help() )); } } // Si es un mét odo (display/edit) if (fsc.dataMethod()) { info(strfmt('METHOD %1.%2', tableId2Name(formDataSource.table()), fsc.dataMethod())); } } } return ret; }
Y añadir el siguiente código al final del método estándar task que ya existe en esa clase:
// jaestevan.com - Modificado - Información de campos con Ctrl+Z public int task(int _p1) { ... // - jaestevan.com - Información de campos con Ctrl+Z if (!ret) ret = this.jaee_taskInfoCtrlZ(_p1); // + jaestevan.com + end ret = super(_p1); return ret; }
El resultado es que estando encima de cualquier formulario del sistema, al hacer Ctrl+Z se mostrará la información del campo seleccionado directamente:
Y como el código esta diseñado para ignorarse si el usuario no tiene permisos de desarrollo no va a afectar a los usuarios finales. Pero en cualquier caso se puede eliminar limpiamente al pasar a producción.
NOTA: La idea de este código la obtube en otro blog pero no recuerdo en cual. Cuando lo encuentre actualizaré este post con el link original.
Descarga