lunes, 16 de agosto de 2010

Ventanas dentro del Workspace

A partir de la version 2009 las ventanas se abren fuera del workspace, para algunos usuarios esto les parece molestoso. Con este codigo podremos volver al estilo de las anteriores versiones:
* Agregar el siguiente codigo en el método Init de la clase SysSetupFormRun

public void init()
{
//CODIGO AGREGADO
if(this.form().design().windowType()==FormWindowType::Standard)
this.form().design().windowType(FormWindowType::Workspace);
//CODIGO AGREGADO

super();
SysSecurityFormSetup::loadSecurity(this);
this.dimensionFieldCtrls();
this.inventStorageDimFieldCtrls();

if (this.isWorkflowEnabled())
{
workflowControls = SysWorkflowFormControls::construct(this);
workflowControls.initControls();
}
}

Saludos.

viernes, 13 de agosto de 2010

Utilizar campo create/modifiedDateTime de las tablas

Hola, mediante este código podremos utilizar los campos create/modifiedDateTime de las tablas.

static void CapturaCreatedDateTime(Args _args)
{
PurchTable ptable;
purchid id;
;
id = "000007";
Select ptable Where ptable.PurchId == id;

print DateTimeUtil::date(purchtable::find(ptable.PurchId).createdDateTime);
pause;
}

Saludos.

martes, 10 de agosto de 2010

Ejecutar directamente sentencias T-SQL desde Dynamics AX

Hola, bueno no es muy recomendable hacer esto, pero es un camino más que nos podria servir para resolver algún problema:

Vamos a crear un metodo en la clase Global:
server static void DAXExecuteSQL(str _sql)
{
str ddl = '';
SqlStatementExecutePermission ssep;
Statement statement;
Connection connection;
;

ddl = _sql;

connection = new Connection();
connection.ttsbegin();

ssep = new SqlStatementExecutePermission(ddl);
ssep.assert();
statement = connection.createStatement(ResultSetType::Dynamic, ResultSetConcurrency::Updatable);

// BP deviation documented
statement.executeUpdate(ddl);
connection.ttscommit();
}

Luego para utilizar este metodo, tenemos que poner esto:
DAXExecuteSQL('Cualquier Consulta T-SQL');

Saludos.

Ocultar mensaje de ajuste de reporte

Hola, me imagino que se han topado con esta clase de mensaje: "Informe se ha definido en xx por ciento para ajustarlo a la página". Bueno esto es normal cuando el reporte contiene mucha informacion y se tiene que ajustar al reporte.
Si queremos evitar este mensaje simplemente tendremos que poner este codigo en el init del reporte.
element.printJobSettings().SuppressScalingMessage(true);

Saludos.

lunes, 9 de agosto de 2010

Envío de varios parámetros a la vez mediante args

Hola con este pequeño desarrollo, se podrá enviar varios parámetros de distintos tipos a un reporte ó formulario, mediante args y parmobject, para esta demostración enviaré dos parámetros a un reporte para que haga un filtro.

Paso1: creamos la clase “ParametrosReporte”, que recibirá todos los parámetros que necesitamos.
class ParametrosReporte
{
str para1;
str para2;
}
public str parm1( str _para1 = para1 )
{
;
if (!prmisdefault( _para1 ))
{
para1 = _para1;
}
return para1;
}
public str parm2( str _para2 = para2 )
{
;
if (!prmisdefault( _para2 ))
{
para2 = _para2;
}
return para2;
}

Paso 2: la mayoría de veces se tendrá que poner este código en un botón, pero por motivo de explicación lo he realizado en un job.
static void ParametrosVarios(Args _args)
{
Args args = new Args();
ReportRun reportRun;
ParametrosReporte parametrosReporte = new ParametrosReporte();
;
parametrosReporte.parm1( "1101" ); //código de cliente
parametrosReporte.parm2( "1102" ); //código de cliente
args.parmObject( parametrosReporte );
args.name(reportstr(Parametros));
reportRun = classFactory.reportRunClass(args);
reportRun.init();
reportrun.run();
}

Paso 3: creamos el reporte “Parametros”, con el datasource custtable y agregamos algunos campos al diseño del formulario. Luego en el método init() ponemos:
public void init()
{
ParametrosReporte parametrosReporte;
;
super();
if( element.args().parmObject() )
{
parametrosReporte = element.args().parmObject(); //recuperamos parametros
}
element.query().dataSourceName('CustTable').addRange(fieldnum(Custtable, accountNum)).value(parametrosReporte.parm1() + ".." +parametrosReporte.parm2());
this.query().userUpdate(false);
}

Saludos.