Hello All,
I'm working in AX 2009. I have a form with a grid control, which I am trying to populate by using a Temporary table and an X++ query. The query is joining 4-tables, i.e., CustInvoiceTrans, CustInvoiceJour, InventDim, and CustTable.
The only range is on CustInvoiceTrans, InvoiceDate. I have set "Relations" to true for each, as CustInvoiceTrans.InvoiceId == CustInvoiceJour.InvoiceId and CustInvoiceTrans.InventDimId == InventDim.InventDimId and CustInvoiceJour.OrderAccount == CustTable.AccountNum.
The fields on the grid are from the temp table, which I dragged to the form's grid.
I have used a temp table before with success, but I am unable to get my grid to populate with data, although by placing a breakpoint in code and stepping thru the debugger I have been able to see data.
I have 3-methods in my project, the classDeclaration, the init, and a method named populateRecords, where I define the query class objects. The following is my code.
classDeclaration:
public class FormRun extends ObjectRun
{
CustInvoiceTrans custInvTransTmp;
CustInvoiceJour custInvJourTmp;
InventDim inventDimTmp;
CustTable custTableTmp;
TmpSales_by_State_Table tmpDS;
}
populateRecords()
void populateRecords()
{
Query query;
QueryRun queryRun;
QueryBuildDataSource qbds1,qbds2,qbds3,qbds4;
QueryBuildRange qr;
;
delete_from tmpDS;
query = new Query();
qbds1 = query.addDataSource(tableNum(CustInvoiceTrans));
qbds2 = qbds1.addDataSource(tableNum(CustInvoiceJour));
qbds2.relations(true);
qbds2.joinMode(JoinMode::InnerJoin);
qbds3 = qbds1.addDataSource(tableNum(InventDim));
qbds3.relations(true);
qbds3.joinMode(JoinMode::InnerJoin);
qbds4 = qbds2.addDataSource(tableNum(CustTable));
qbds4.relations(true);
qbds4.joinMode(JoinMode::InnerJoin);
qr = qbds1.addRange(fieldNum(CustInvoiceTrans, InvoiceDate));
queryRun = new QueryRun(query);
if (queryRun.prompt())
{
while (queryRun.next())
{
custInvTransTmp = queryRun.get(tableNum(CustInvoiceTrans));
custInvJourTmp = queryRun.get(tableNum(CustInvoiceJour));
inventDimTmp = queryRun.get(tableNum(InventDim));
custTableTmp = queryRun.get(tableNum(CustTable));
tmpDS.InvoiceId = custInvJourTmp.InvoiceId;
tmpDS.OrderAccount = custInvJourTmp.OrderAccount;
tmpDS.InvoiceDate = custInvTransTmp.InvoiceDate;
tmpDS.SalesId = custInvJourTmp.SalesId;
tmpDS.ItemId = custInvTransTmp.ItemId;
tmpDS.ExternalItemId = custInvTransTmp.ExternalItemId;
tmpDS.LineAmount = custInvTransTmp.LineAmount;
tmpDS.Qty = custInvTransTmp.Qty;
tmpDS.PurchaseOrder = custInvJourTmp.PurchaseOrder;
tmpDS.DueDate = custInvJourTmp.DueDate;
tmpDS.DeliveryName = custInvJourTmp.DeliveryName;
tmpDS.DlvCountryRegionId = custInvJourTmp.DlvCountryRegionId;
tmpDS.DeliveryCity = custInvJourTmp.DeliveryCity;
tmpDS.DlvState = custInvJourTmp.DlvState;
tmpDS.DlvZipCode = custInvJourTmp.DlvZipCode;
tmpDS.DeliveryAddress = custInvJourTmp.DeliveryAddress;
tmpDS.InventLocationId = inventDimTmp.InventLocationId;
tmpDS.InvoiceAccount = custInvJourTmp.InvoiceAccount;
tmpDS.InvoicingName = custInvJourTmp.InvoicingName;
tmpDS.InvCountryRegionId = custInvJourTmp.InvCountryRegionId;
tmpDS.InvoiceCity = custInvJourTmp.InvoiceCity;
tmpDS.InvState = custInvJourTmp.InvState;
tmpDS.InvZipCode = custInvJourTmp.InvZipCode;
tmpDS.InvoicingAddress = custInvJourTmp.InvoicingAddress;
tmpDS.insert();
}
}
TmpSales_by_State_Table.setTmpData(tmpDS);
}
init():
public void init()
{
super();
this.populateRecords();
}
It turned out that the Grid's DataSource property was lost after removing and readding fields to the grid. After resupplying this property, the grid successfully displays data.
I'm working in AX 2009. I have a form with a grid control, which I am trying to populate by using a Temporary table and an X++ query. The query is joining 4-tables, i.e., CustInvoiceTrans, CustInvoiceJour, InventDim, and CustTable.
The only range is on CustInvoiceTrans, InvoiceDate. I have set "Relations" to true for each, as CustInvoiceTrans.InvoiceId == CustInvoiceJour.InvoiceId and CustInvoiceTrans.InventDimId == InventDim.InventDimId and CustInvoiceJour.OrderAccount == CustTable.AccountNum.
The fields on the grid are from the temp table, which I dragged to the form's grid.
I have used a temp table before with success, but I am unable to get my grid to populate with data, although by placing a breakpoint in code and stepping thru the debugger I have been able to see data.
I have 3-methods in my project, the classDeclaration, the init, and a method named populateRecords, where I define the query class objects. The following is my code.
classDeclaration:
public class FormRun extends ObjectRun
{
CustInvoiceTrans custInvTransTmp;
CustInvoiceJour custInvJourTmp;
InventDim inventDimTmp;
CustTable custTableTmp;
TmpSales_by_State_Table tmpDS;
}
populateRecords()
void populateRecords()
{
Query query;
QueryRun queryRun;
QueryBuildDataSource qbds1,qbds2,qbds3,qbds4;
QueryBuildRange qr;
;
delete_from tmpDS;
query = new Query();
qbds1 = query.addDataSource(tableNum(CustInvoiceTrans));
qbds2 = qbds1.addDataSource(tableNum(CustInvoiceJour));
qbds2.relations(true);
qbds2.joinMode(JoinMode::InnerJoin);
qbds3 = qbds1.addDataSource(tableNum(InventDim));
qbds3.relations(true);
qbds3.joinMode(JoinMode::InnerJoin);
qbds4 = qbds2.addDataSource(tableNum(CustTable));
qbds4.relations(true);
qbds4.joinMode(JoinMode::InnerJoin);
qr = qbds1.addRange(fieldNum(CustInvoiceTrans, InvoiceDate));
queryRun = new QueryRun(query);
if (queryRun.prompt())
{
while (queryRun.next())
{
custInvTransTmp = queryRun.get(tableNum(CustInvoiceTrans));
custInvJourTmp = queryRun.get(tableNum(CustInvoiceJour));
inventDimTmp = queryRun.get(tableNum(InventDim));
custTableTmp = queryRun.get(tableNum(CustTable));
tmpDS.InvoiceId = custInvJourTmp.InvoiceId;
tmpDS.OrderAccount = custInvJourTmp.OrderAccount;
tmpDS.InvoiceDate = custInvTransTmp.InvoiceDate;
tmpDS.SalesId = custInvJourTmp.SalesId;
tmpDS.ItemId = custInvTransTmp.ItemId;
tmpDS.ExternalItemId = custInvTransTmp.ExternalItemId;
tmpDS.LineAmount = custInvTransTmp.LineAmount;
tmpDS.Qty = custInvTransTmp.Qty;
tmpDS.PurchaseOrder = custInvJourTmp.PurchaseOrder;
tmpDS.DueDate = custInvJourTmp.DueDate;
tmpDS.DeliveryName = custInvJourTmp.DeliveryName;
tmpDS.DlvCountryRegionId = custInvJourTmp.DlvCountryRegionId;
tmpDS.DeliveryCity = custInvJourTmp.DeliveryCity;
tmpDS.DlvState = custInvJourTmp.DlvState;
tmpDS.DlvZipCode = custInvJourTmp.DlvZipCode;
tmpDS.DeliveryAddress = custInvJourTmp.DeliveryAddress;
tmpDS.InventLocationId = inventDimTmp.InventLocationId;
tmpDS.InvoiceAccount = custInvJourTmp.InvoiceAccount;
tmpDS.InvoicingName = custInvJourTmp.InvoicingName;
tmpDS.InvCountryRegionId = custInvJourTmp.InvCountryRegionId;
tmpDS.InvoiceCity = custInvJourTmp.InvoiceCity;
tmpDS.InvState = custInvJourTmp.InvState;
tmpDS.InvZipCode = custInvJourTmp.InvZipCode;
tmpDS.InvoicingAddress = custInvJourTmp.InvoicingAddress;
tmpDS.insert();
}
}
TmpSales_by_State_Table.setTmpData(tmpDS);
}
init():
public void init()
{
super();
this.populateRecords();
}
It turned out that the Grid's DataSource property was lost after removing and readding fields to the grid. After resupplying this property, the grid successfully displays data.