Hi,
I got some troubles using aurelius, in particular with XData. I have a form with a AureliusDataSet where I set a Source List that I get from server. After that, if I double click a record on my dbgrid, it opens a form with the detail about it and I can close or change information. If I save new information, when I try to reload the list on the ListForm, I usually get an external exception and Aurelius Engine stops working: every operation I try to execute report me an Access Violation and I have to close my application. The same thing appens if i only close the detail form and open another one several times (like 10). I taught it was a xdata issue, so i tried also on a local database without xdata, but i got the same problem.
Here's the procedures where I get stucked:
//after throwing this procedure, Aurelius Engine gets blocked
procedure TProdottiPrinterLoadListPresenter.LoadPrinter(Sender: TObject);
var
LfrmProdottiLoadPrinter: TfrmProdottiPrinterLoad; //the detail form
LRestClient: TMP_RestClient; //class that contains procedure to call services from server
begin
LfrmProdottiLoadPrinter:= TfrmProdottiPrinterLoad.create(True);
try
LfrmProdottiLoadPrinter.ShowModal;
finally
LfrmProdottiLoadPrinter.free;
end;
LRestClient:= TMP_RestClient.create(rmGet);
try
//the aureliusdataset I use on my view
FfrmProdottiPrinterLoadList.getAureliusDataset('dstPS').Close;
FfrmProdottiPrinterLoadList.getAureliusDataset('dstPRINTERLOAD').Close;
LRestClient.ReturnedInstancesOwnership:= False;
if assigned(FPRINTERLOADList) then
begin
try
//I free my List and clear every object stored in it
FPRINTERLOADList.clearLista;
FPRINTERLOADList.Free;
except
FPRINTERLOADList:= nil;
end;
end;
//I call a service from DB to filter my data
FPRINTERLOADList:= TClearableList<TMP_PRODUCTLOAD>(
LrestClient.getPRODUCTLOADbyCATEGORY(1));
FfrmProdottiPrinterLoadList.setAureliusDatasetSource(FPRINTERLOADList,
'dstPRINTERLOAD');
FfrmProdottiPrinterLoadList.getAureliusDataset('dstPS').Open;
finally
LRestClient.Free;
end;
end;
//if I call the constructor several times during my application (maybe i close the form and I reopen it)
//I get the same situation
constructor TProdottiPrinterLoadListPresenter.create(
AfrmProdottiPrinterLoadList: IfrmProdottiPrinterLoadList;
AID_MASTER_DATA: integer);
var
LRestClient: TMP_RestClient;
begin
FfrmProdottiPrinterLoadList:= AfrmProdottiPrinterLoadList;
LRestClient:= TMP_RestClient.create(rmGet);
try
LRestClient.ReturnedInstancesOwnership:= False;
FPSList:= TClearableList<TMP_PS>(LRestClient.getPSbyPRODUCT_CATEGORY(1));
FPRINTERLOADList:= TClearableList<TMP_PRODUCTLOAD>(
LRestClient.getPRODUCTLOADbyCATEGORY(1));
finally
LRestClient.Free;
end;
end;
function TMP_RestClient.getPRODUCTLOADbyCATEGORY(
AID_CATEGORY: integer): TList<TMP_PRODUCTLOAD>;
var
LServices: IGetterServices;
begin
LServices:= XDataClient.Service<IGetterServices>;
result:= LServices.getPRODUCTLOADbyCATEGORY(
AID_CATEGORY);
end;
//My Service implemented on server
function TGetterServices.getPRODUCTLOADbyCATEGORY(
AID_CATEGORY: integer): TList<TMP_PRODUCTLOAD>;
begin
result:= TXDataOperationContext.Current.GetManager.
CreateCriteria<TMP_PRODUCTLOAD>.
CreateAlias('MP','mp').
CreateAlias('mp.PC','pc').
Add(TExpression.Eq('pc.ID_PC',AID_CATEGORY)).
Add(TExpression.Eq('ISASSIGNED',false)).
AddOrder(TOrder.Asc('YEAR')).
AddOrder(TOrder.Asc('NUMBER')).
List;
end;
In this case I use a service, but I also tried using TXDataClient.List<T>
I can't understand if there is some issue in my code (but it's strange that it appens not only with this procedure, but also when I open several times my ListForm and close it destroying everything) or something in Aurelius Engine.