Archiv para junio, 2010

Optimización SQL Traza 4136

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

El mes pasado Microsoft liberó las actualizaciones acumulativas de Microsoft SQL Server 2008 Sp1 y SQL Server 2005 Sp3, las cuales contienen una importante actualización que mejora de forma muy considerable el rendimiento en los clientes que utilizan Axapta.

Siendo esta instalación altamente recomendable para todas aquellas personas que utilicen SQL Server con Dynamics AX.

Podemos obtener más información en el blog de Dynamics Ax Performance Team, y una explicación técnica en el siguiente enlace.

Exportar Excel desde Table Browser

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

En muchas ocasiones, nos encontramos con la necesidad de ver el contenido de las tablas mediante el AOT, función abrir tabla.

Al realizar esta acción podemos comprobar como las opciones de la barra de herramientas estándar de Dynamics Ax, no se pueden utilizar en esta venta, tales como exportar a Excel, siguiente registro, último registro …, pero existe una manera muy sencilla de poder arreglar esto.

Para ello buscaremos dentro del AOT el siguiente formulario: SysTableBrowser y dentro del Nodo Design\Design, cambiaremos la propiedad WindowsType = PopUp, por WindowsType = Standar

Una vez modificado el siguiente campo pasaremos de tener la siguiente visión al explorar una tabla

A tener la barra de herramientas y poder utilizarla para exportar a excel, o utilizar los iconos de acceso rápido.

Ventanas dentro del Workspace

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

Desde la nueva introducción de Dynamics Ax, hemos visto como se ha pasado de tener todas las ventanas que abrimos de Axapta dentro de un mismo Workspace, a tener cada ventana que se abre fuera de Axpata, siendo esto en algunas ocasiones un poco molesto para ciertos usuarios.

Si queremos cambiar este comportamiento, podemos modificar la clase SysSetupFormRun el método Init con el siguiente código:

public void init()
{
	//INI - www.dynamicsax.es 
	if(this.form().design().windowType()==FormWindowType::Standard)
		this.form().design().windowType(FormWindowType::Workspace);
	// END - www.dynamicsax.es
 
	super();
 
	SysSecurityFormSetup::loadSecurity(this);
	this.dimensionFieldCtrls();
	this.inventStorageDimFieldCtrls();
 
	if (this.isWorkflowEnabled())
	{
		workflowControls = SysWorkflowFormControls::construct(this);
		workflowControls.initControls();
	}
}

Una vez modificado este código veremos que las ventanas, se abren dentro del Workspace de Dynamics Ax, como podemos ver en el siguiente ejemplo:

WorkFlow error: No se encuentra el grupo de usuarios

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

En instalaciones con idioma Español, cuando configuramos los Workflows como “Asignar a:” basado en Roles y escogemos Originador del flujo de trabajo.

Nos encontramos que este nunca es asignado a ningún usuario y en tiempo de ejecución nos encontramos con el siguiente error:

No se encuentra el grupo de usuarios

Esto es debido a un error en la clase SysWorkflowProviderService método resolveParticipant.

El problema lo encontramos en la línea del IF

if (strcmp(enum2str(WorkflowActorType::Originator), _participant) == 0)

Esto es debido a que el parámetro _participant tiene una longitud de 20 caracteres y el texto que pasamos es mayor a 20, produciendo que siempre se devuelva FALSE en la función

_participant = Originador del flujo de trabajo

La manera de resolver el siguiente error es cambiando el tamaño del Extended WorkFlowParticipantToken a 40 caracteres.

Como copiar registros

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

En ciertas ocasiones, necesitamos poder copiar un registro, sin utilizar el método Data(),sino que lo que queremos es ir recorriendo uno a uno todos los campos de un registro seleccionado y copiarlo en otro variable del mismo tipo.

Para ello podemos utilizar el siguiente ejemplo, el cual se llamaría de la siguiente forma: copyFields(custTable, custTableTo);

static void CopyFields(Common _from, Common _to)
{
	DictTable 	t;
	DictField 	f;
	int 		i;
	fieldId 	id;
	FieldName 	fieldname;
	;
 
	t = new DictTable(_to.TableId);
	if (t)
	{
		for (i=1; i<=t.fieldCnt(); i++)
		{
			id = t.fieldCnt2Id(i);
			f = new DictField(_to.TableId,t.fieldCnt2Id(i));
 
			//Aqui podemos excluir campos del sistema como DataAreaid, RecId, CreatedDateTime ..
			if (f && !f.isSystem())
			{
				_to.(id) = _from.(id);
			}
		}
	}
}