Ejecutar procesos externos desde Axapta

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

En algunas ocasiones, nos encontramos con la necesidad de poder ejecutar ficheros externos desde Axapta, ya se un fichero .exe o de cualquier otra extensión.

Desde la introducción de Dynamics Ax 2009, la ejecución de estos ficheros desde el servidor, ha sido modificada para agregar políticas de seguridad, a todo aquello que ejecutemos en procesos Batch, por lo cual si queremos ejecutar un fichero desde el servidor, tendremos que utilizar el siguiente método:

Donde _process, es el nombre del ejecutable que queremos ejecutar, como por ejemplo ‘Notepad.exe’.

static server int executeOnServer(str _process = 'notepad.exe',str _arguments)
{
	InteropPermission          perm = new InteropPermission(InteropKind::ClrInterop);
	System.Diagnostics.Process p;
	int                        exitCode;
	;
 
	perm.assert();
	p = System.Diagnostics.Process::Start(_process,_arguments);
	p.WaitForExit();
	exitCode = p.get_ExitCode();
 
	return exitCode;
}

Referencia entre tablas

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

Muchas veces nos encontramos, que al crear una tabla nueva, y utilizar está, cuando intentamos relacionarla con tablas del sistema, no nos aparece la referencia con otra tablas.

Para solucionar este problema, tenemos que actualizar la referencias cruzadas de Axapta, que son las encargadas de mostranos estas relaciones, para ello tenemos que ejecutar el siguiente Job desde el AOT:

static void daxUpdateRefTableRelation()
{
	Dictionary dict = new Dictionary();
	TableId tableId = 0;
	DictTable dictTable;
	;
 
	tableId = dict.tableNext(tableId);
	while(tableId)
	{
		dictTable = dict.tableObject(tableId);
 
		info(int2str(dictTable.id()) + dictTable.name());
		xRefTableRelation::updateTableId(dictTable.id());
 
		tableId = dict.tableNext(tableId);
	}
}

Borrado de Tabla

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en X++

Si deseamos poder borrar una tabla mediante X++, como si utilizamos la sentencia de SQL Delete From, podemos utilizar el método DeleteTable() de la clase Global.

Al realizar el borrado mediante este método, no se ejecutan los siguientes putntos:

1- El código existente en los métodos Delete de la tabla que deseemos borrar.

2- Las DeleteActions asociadas a la tabla

3- Borra la cache existente de la tabla

De esta manera podemos optimizar el borrado de toda una tabla via X++, sin tener que recurrir a sentencias SQL, ya que no siempre podemos tener acceso al gestor de Base de datos.

 

Depurar WorkFlow

1 Estrella2 Estrella3 Estrella4 Estrella5 Estrella (Sin calificar)
Cargando…
Escrito por René Roca el . Posteado en WorkFlow

Para depurar código X++ en los WorkFlow de Dynamics Ax 2009, primero de todo debemos habilitarlo para el entorno de desarrollo. Ya que la ejecución de código X++ en los WorkFlows se realiza usando la clase RunAsPermission y la depuración de código no está permitida en la sessión de usuario RunAsPermission, por este motivo debemos desactivar esta carácteristica para poder depurarlos.

Pasos para configurar la depuración de WorkFlows

1. Abrimos el AOT de la aplicación, expandimos el nodo Macros, buscamos la macro WorkFlow, y la editamos.

2. El el editor de código, bajamos hasta la parte final de todo, y buscamos la siguiente línea #define.WorkflowRunAsDebug(false) y la modificamos por la siguiente #define.WorkflowRunAsDebug(true). Esto desabilita  las opciones de la clase RunAsPermission y la ejecución del código X++ de los Workflows, se ejecutará en la sesión de usuario. Debemos modificar la cuenta de ejecución de WorkFlows, por la de un usuario que tenga permisos de administrador.

3. Guardamos los cambios, y cerramos el editor de código.

4. En el AOT, expandimos el nodo de Classes, y seleccionamos la clase SysWorkFlowHelper y la editamos.

5. Compilamos la clase, y ya tenemos activada la depuración de workFlows

 

NoteNota

Después de depurar los WorkFlows, recuerde en volver a desactivar el modo de depuración, y volver a compilar la clase SysWorkflowHelper