Hi everyone,
I have a report based in PurchTable and PurchLine and i want to select a record in AX and show in report only the selected one. I have a button and a method clicked:
-----------------------------------------------------------
void clicked()
{
PurchTable purchTableLocal;
Args args = new Args();
for(purchTableLocal = getFirstSelection(PurchaseTable_ds);
purchTableLocal;
purchTableLocal = PurchaseTable_ds.getNext())
{
args.parm(purchTableLocal.PurchId);
new MenuFunction(menuitemActionStr(VSSReportPedidos), MenuItemType::Action).run(args);
}
super();
}
(get the value correctly)
--------------------------------------------------------------------------------------------------------------------
I have the clas Controller, Contract and Data provider:
------------------------------------------------------------------------------------------------------------------
public void processReport()
{
PurchId purchId;
Query query;
PurchTable purchTable;
PurchLine purchLine;
VSSPedidosContractClass dataContract;//coge la query del runtime usando una query dinámica
query = this.parmQuery();// coge los parámetros pasados de runtime
dataContract = this.parmDataContract();//as VSSPedidosContractClass;
purchId = dataContract.parmPurchId();
if(purchId)
{
select purchTable
where purchTable.PurchId == purchId;
pedidosTemp.DeliveryDate = purchTable.DeliveryDate;
pedidosTemp.OrderAccount = purchTable.orderAccount;
pedidosTemp.PurchaseType = purchTable.purchaseType;
pedidosTemp.PurchIdPedido= purchTable.purchId;
pedidosTemp.PurchStatus = purchTable.purchStatus;
pedidosTemp.CurrencyCode = purchTable.CurrencyCode;
while select LineAmount, LineNumber, Name, purchId, PurchPrice, PurchQty, CurrencyCode from purchLine
where purchLine.PurchId == purchId
{
pedidosTemp.LineAmount = purchLine.LineAmount;
pedidosTemp.LineNumber = purchLine.LineNumber;
pedidosTemp.Name = purchLine.Name;
pedidosTemp.PurchIdLinea = purchLine.PurchId;
pedidosTemp.PurchPrice = purchLine.PurchPrice;
pedidosTemp.PurchQty = purchLine.PurchQty;
pedidosTemp.CurrencyCode = purchLine.CurrencyCode;
pedidosTemp.insert();
}
}
if(!purchId)
{
ttsBegin;
while select * from purchTable
{
pedidosTemp.DeliveryDate = purchTable.DeliveryDate;
pedidosTemp.OrderAccount = purchTable.orderAccount;
pedidosTemp.PurchaseType = purchTable.purchaseType;
pedidosTemp.PurchIdPedido= purchTable.purchId;
pedidosTemp.PurchStatus = purchTable.purchStatus;
pedidosTemp.CurrencyCode = purchTable.CurrencyCode;
while select * from purchLine
where purchLine.PurchId == purchTable.PurchId
{
pedidosTemp.LineAmount = purchLine.LineAmount;
pedidosTemp.LineNumber = purchLine.LineNumber;
pedidosTemp.Name = purchLine.Name;
pedidosTemp.PurchIdLinea = purchLine.PurchId;
pedidosTemp.PurchPrice = purchLine.PurchPrice;
pedidosTemp.PurchQty = purchLine.PurchQty;
pedidosTemp.CurrencyCode = purchLine.CurrencyCode;
pedidosTemp.insert();
}
}
ttsCommit;
}
}
(DON'T get the value correctly)
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
[DataMemberAttribute("purchid")]
public purchid parmPurchId(PurchId _purchid = PurchId)
{
PurchId = _purchid;
return PurchId;
}
(get the value correctly)
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
protected void preRunModifyContract()
{
VSSPedidosContractClass contract = contract as VSSPedidosContractClass;
contract.parmPurchId(args.parm());
super();
}
----------------------------------------------------------------------------------------------------------------------------------
public static client void main(Args _args)
{
//definir un nuevo objeto para la clase controller
VSSPedidosControllerClass controllerClass;
controllerClass =new VSSPedidosControllerClass();
//pasar el caller args al controller
controllerClass.parmArgs(_args);
//Definir el nombre del report y del diseño del mismo
controllerClass.parmReportName(ssrsReportStr(ReportPedidosUnaTabla, PrecisionDesign1));
//Ejecutar el report
controllerClass.runToScreen(); //Abrir informe sin ventana de diálogo
}
(get the value correctly)
-------------------------------------------------------------------------------------------------------------------------------------------
So, my problem is PurchId don't reach Class Data Provider. I don't know if im doing something wrong, besides i put a break point in preRunModifyContract() and didn't stopped. So i tried put the code in method main:
public static client void main(Args _args)
{
VSSPedidosContractClass dataContract;
//definir un nuevo objeto para la clase controller
VSSPedidosControllerClass controllerClass;
controllerClass =new VSSPedidosControllerClass();
////////////////////////////////////////////////////////////////////
dataContract = new VSSPedidosContractClass();
dataContract.parmPurchId(_args.parm());
////////////////////////////////////////////////////////////////////
controllerClass.parmArgs(_args);
//Definir el nombre del report y del diseño del mismo
controllerClass.parmReportName(ssrsReportStr(ReportPedidosUnaTabla, PrecisionDesign1));
controllerClass.runToScreen(); //Abrir informe sin ventana de diálogo
}
(get the value correctly)
--------------------------------------------------------------------------------------------------------------------
I don't know what its wrong, am i forgetting somthing? i can't debug DataProvider class because of a problem with caches (error parameter RecId for preRun is missing). So i hope you can help me.
Thanks.
*This post is locked for comments