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
sábado, 30 de enero de 2010
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));
}
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
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
Suscribirse a:
Entradas (Atom)