Hoy traigo un post rápido y sencillo de X++ en el que aprenderemos a crear un campo encriptado en Dynamics 365 Finance and Operations.

Crear un campo encriptado en Dynamics 365 Finance and Operations es un proceso sencillo que puede ayudar a asegurar información sensible en tu ERP. Mediante el uso de una clave de cifrado para cifrar los datos, se garantiza que los datos permanezcan seguros incluso si acceden a ellos usuarios no autorizados.

Por campo cifrado me refiero a lo que se ve, por ejemplo, en el formulario Parámetros de correo electrónico para la contraseña SMTP:

Campo encriptados en los parámetros de correo
Campo encriptado en los parámetros de correo

El campo encriptado

Estos campos encriptados no se almacenan como texto plano en la base de datos, sino que se encriptan (como su nombre indica) utilizando una clave y se guarda ese valor.

Cabe mencionar que cada entorno tiene una clave de encriptación diferente, por lo que al refrescar un entorno sandbox o de desarrollo con datos de otro entorno, los valores de los campos encriptados se pierden porque no se pueden desencriptar con una clave diferente.

Creándolo

Si necesitas un nuevo campo en un formulario, ya sabes que el primer paso es crearlo en una tabla. Para este ejemplo, voy a añadir un campo a la tabla y formulario CustParameters.

Así que extiende la tabla en tu modelo y ve a los EDTs en el AOT y arrastra el EDT EncryptedField en la extensión de la tabla CustParameters. Dale el nombre que quieras, yo llamaré al mío AASEncryptedField, y seguimos.

A continuación, tenemos que crear una extensión de código para la tabla CustParameters. Como los campos encriptados se muestran en los formularios como un campo tipo edit, necesitamos un método para encriptar y desencriptar el contenido del campo, y eso es lo que haremos aquí:

[ExtensionOf(tableStr(CustParameters))]
final class CustParameters_aristeinfo_Extension
{
    public edit Name AASEncryptedNameEdit(boolean _set, Name _value)
    {
        return Global::editEncryptedField(this, _value, fieldNum(CustParameters, AASEncryptedField), _set);
    }
}

Este es un método edit de toda la vida, pero está llamando al método editEncryptedField de Global y allí está llamando a los métodos del núcleo EncryptForPurpose y DecryptForPurpose de la clase Appl que hacen el trabajo.

Definir un EDT como tipo de retorno en el método nos ayudará a mostrar la etiqueta correcta en el formulario, así que crea tus EDTs o usa uno que se ajuste a tu propósito. Yo estoy usando el de Name porque esto es sólo una demo.

Finalmente, añadiremos un campo de tipo string en el formulario y pondremos la tabla CustParameters como su propiedad Data Source, y el método CustParameters_aristeinfo_Extension.AASEncryptedNameEdit como su propiedad Data Method. Si el tipo de dato de tu campo no es una cadena, ¡tienes que añadir el tipo correcto de campo nuevo!

Sincronizamos, compilamos y echamos un vistazo al campo en la interfaz de usuario:

Esto no parece estar muy encriptado...
Esto no parece estar muy encriptado…

Ups, ¡me olvidé de algo! Tienes que establecer la propiedad del campo de formulario Password style en Yes. De lo contrario, sólo mostrará texto plano. Dejad que cambie eso…

Campo encriptado con el estilo de password
Campo encriptado con el estilo de password

Así está mucho mejor. Te estarás preguntando… si estaba mostrando texto plano antes de usar el estilo contraseña… ¿estaba realmente encriptado? Sí, lo estaba. Si echamos un vistazo al valor del campo en SQL Server Management Studio:

Valor encriptado en SSMS
Valor encriptado en SSMS

Ese es el valor encriptado almacenado en SQL Server. Estaba mostrando texto plano porque el método editEncryptedField de la clase Global se encarga de desencriptarlo. ¡Pero créeme que en SQL se almacena como un dato encriptado! ¡Listo!

Y así de fácil, has creado un nuevo campo encriptado y has añadido un poco más de seguridad a tus personalizaciones. Esto ha sido bastante fácil, y como siempre digo, si necesitas hacer algo que la aplicación estándar ya hace, échale un vistazo porque será la mejor forma de hacerlo.

¡Suscríbete!

Recibe un correo cuando se publique un nuevo post
Author

Microsoft Dynamics 365 Finance & Operations technical architect and developer. Business Applications MVP since 2020.

Write A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

ariste.info