HowTo: Impersonar Otro Usuario Para Ejecutar Código en X++
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 ;)