sábado, 30 de enero de 2010

Seleccionar Data de Varias Compañias mediante queries

Hola, tambien se puede seleccionar data de varias compañias mediante queries. Les dejo un ejemplo x++:

static void Acceso_CrossCompany_Query(Args _args)
{

    Query query = new Query();

    QueryBuildDataSource qbds = query.addDataSource(tableNum(InventTable));

    QueryRun queryRun;

    InventTable inventTable;
;

    qbds.addRange(fieldNum(InventTable, ItemId)).value(queryValue("1000001"));

    query.allowCrossCompany(true);//permitir cruce

    query.addCompanyRange("dm0");//compañia

   query.addCompanyRange("dm1");//compañia

   queryRun = new QueryRun(query);

   while (queryRun.next())

  {

      inventTable = queryRun.get(tableNum(InventTable));

     print inventTable.ItemId, " / ", inventTable.dataAreaId;

  }

   pause;

}
Saludos

Seleccionar Data de Varias Compañias

Hola, aca un fragmento de codigo que es util si es que desean seleccionar data de varias compañias a la vez.
static void getTotalLineAmount(Args _args)

{

        SalesLine salesLine;

       container companies = ['dmo', 'dm2', 'dm3']; // compañias
       ;

       select crossCompany : companies sum(LineAmount) from salesLine;
       info (num2str(salesLine.LineAmount,0,2,1,2));

}

Dynamics AX y .Net

Hola, aqui les paso un ejemplo de como llenar un grid de un formulario, trayendo data desde Dynamics AX mediante Business Conector .Net con lenguaje C - Sharp (C#)

1.- Lo primero es iniciar Visual Studio 2005/2008 y crear un nuevo

proyecto(WindowsFormsApplication).

2.- Nos vamos al explorador de soluciones y damos click derecho al

proyecto creado y seleccionamos agregar referencia(add reference),

luego aparece una ventana y nos vamos a la pestaña "Browser" y

buscamos la direccion del BusinnesConector .Net (por default la

direccion es: C:\Archivos de programa\Microsoft Dynamics AX\50

\Client\Bin)

3.- Al formulario arrastramos un datagridview, un boton y un label.

4.- Al boton le damos doble click y ponemos el siguiente codigo:

___4.1 Antes de empezar damos una referencia:

using Microsoft.Dynamics.BusinessConnectorNet;
private void btnAxDataAccess_Click(object sender, EventArgs e)

{

/*Objetos Business Conector .Net*/

Axapta ax;

AxaptaRecord axRecord;



/*Nombre de la tabla de la consulta*/

string strTable = "VendTable";



/*Campos de la tabla VendTable que va a llamar AxRecord.get_Field*/

string strVendAccountNumField = "AccountNum";

string strVendNameField = "Name";

string strVendPhoneField = "Phone";



/*Variables de salida para las llamadas de AxRecord.get_Field */

object vendAccNum, vendName, vendPhone;



/*Consulta a la tabla*/

string strQuery = "select * from %1";



try

{

/*Se inicia acceso a Microsoft Dynamics*/

ax = new Axapta();

/*cot es nombre de la empresa con la cual se va trabajar*/

ax.Logon("cot", null, null, null);



/*Se crea un objeto AxaptaRecord para la tabla VentTable*/

axRecord = ax.CreateAxaptaRecord(strTable);



/*Ejecutamos la consulta de la tabla*/

axRecord.ExecuteStmt(strQuery);



/*Se crea un DataTable*/

/*el metodo CreateVendorDataTable() se explica en el punto

5*/

DataTable dt = CreateVendorDataTable();

DataRow row;



/*Comenzamos un bucle de los registros*/

while (axRecord.Found)

{

/*Recuperando el registro de los datos de los campos especificados*/

vendName = axRecord.get_Field(strVendNameField);

vendAccNum = axRecord.get_Field(strVendAccountNumField);

vendPhone = axRecord.get_Field(strVendPhoneField);



/*llenamos filas del datatable*/

row = dt.NewRow();

row["Name"] = vendName.ToString();

row["AccNum"] = vendAccNum.ToString();

row["Phone"]=vendPhone.ToString();

dt.Rows.Add(row);



/*Avanza al siguiente registro*/

axRecord.Next();

}

/*Desechamos el objeto axRecord*/

axRecord.Dispose();



/*Termina acceso de Microsoft Dynamics*/

ax.Logoff();



/*Llenamos al dataGridView con el dataTable*/

dataGridView1.DataSource = dt;

lblResultado.Text = "Hay " + (dataGridView1.RowCount - 1) + " Registros";

}

catch (Exception ex)

{

lblResultado.Text = "Error encontrado {0}: " + ex.Message;

}

}
5.- Creamos el metodo CreateVendorDataTable(), que sirve para crear

las columnas del dataTable :
public DataTable CreateVendorDataTable()

{

DataTable dt = new DataTable();



dt = new DataTable();



DataColumn vendorNameColumn;

vendorNameColumn = new DataColumn("Name");

vendorNameColumn.DataType = Type.GetType("System.String");

dt.Columns.Add(vendorNameColumn);



DataColumn vendorAccNumColumn;

vendorAccNumColumn = new DataColumn("AccNum");

vendorAccNumColumn.DataType = Type.GetType("System.String");

dt.Columns.Add(vendorAccNumColumn);



DataColumn vendorPhoneColumn;

vendorPhoneColumn = new DataColumn("Phone");

vendorPhoneColumn.DataType = Type.GetType("System.String");

dt.Columns.Add(vendorPhoneColumn);
return dt;

}
6.- Presionamos F5 para ver los resultados.
Saludos