HowTo: Impersonar Otro Usuario Para Ejecutar Código en X++

!
Warning: This post is over 365 days old. The information may be out of date.

A pesar de que esto no es habitual y va contra unas cuentas Best Practices, en algunos casos muy específicos podemos necesitar ejecutar un framento de X++ (una llamada a un método) en el contexto de un usuario que no es el que está ejecutando la sesión actual, ya sea una sesión de cliente o un proceso Batch. Para ejecutar una llamada a un método con un usuario concreto, usamos este código:

// …

// Usuario que va a ejecutar el método UserId postingUserId = parms.PostingUserId != ’’ ? parms.PostingUserId : curUserId();

new RunAsPermission(postingUserId).assert();

// Llamada a: MyClass.myClassMethod(methodParm1, methodParm2)

// BP Deviation Documented runAs(postingUserId, classNum(MyClass), ‘myClassMethod’, [methodParm1, methodParm2]);

CodeAccessPermission::revertAssert();

// …

Insisto en que esto no es habitual y tiene, como siempre que hacemos estas cosas, algunos riesgos de seguridad. Pero dejo aquí el código para buscarlo la próxima vez que lo necesite ;)