IS there some way to convert from a TDataset to TXDataJsonDataset. It wan´t to copy the fields and data from a normal TDataSet to a TXDataJsonDataset so i can send it as response of the xData-Server.
What do you mean by a TDataset, exactly? TXDataJsonDataset inherits from TDataset, so technically speaking it's already a TDataset.
Baiscally what i want to do is pass on a Dataset with xData. I have built a xData-Server with a Service for testing.
With this Service i would like to fetch data from another server (which gets delivered as TFDMemTable) and pass it on to the client or Access it through a connection in the client.
Is there a way to achieve this?
TXDataJsonDataset works with JavaScript objects. Any JSON you receive from a XData service (or any service) that you parse into a JS object can be provided to the TXDataJsonDataset. The property names will be bound to dataset field names.
Thus, all your XData service should do is return a simple Delphi DTO class representing such object, or you can do it at a lower level and simply return a TJSONObject from your XData service.
Your XData service should return such DTO object (or JSON object) with its properties filled. I believe there are built-in mechanisms in TFDMemTable that does that job for you, or you can simply fill the objects manually.
What´s the required format for the TXDataJsonDataset.SetJsonData(Data: JSValue) to work?
I´ve replicated the structure from this API in the samples. But when i set the dataset to active, it tells me that no fields habe been found.
My Json looks like the following example with some other fields from the database. The $id-Field and the @xdata.type-Field are set to fixed values.
{
"value": [
{
"$id": 1,
"@xdata.type": "MemData",
"FEILD1": "Test",
"FEILD2": "XXX",
"FIELD3": 3
},
{
"$id": 2,
"@xdata.type": "MemData",
"FEILD1": "Test",
"FEILD2": "XXX",
"FIELD3": 3
},
{
"$id": 3,
"@xdata.type": "MemData",
"FEILD1": "Test",
"FEILD2": "XXX",
"FIELD3": 3
}
]
}
Any idea on how to solve that?
Just a JSON array of JSON objects. Each property in each JSON object can be read through a field with same name in the JSON dataset.
You should set the content of value property in the dataset.
OK, that has worked :)
But back to my first question. Can i somehow copy the Records from a Dataset (TFDMemTable) to into a TXDataJsonDataset.
I´ve managed to copy the Fielddefs like following:
var
I: Integer;
lJsonDataSet: TXDataJsonDataset;
begin
lJsonDataSet := TXDataJsonDataset.Create(nil);
lJsonDataSet.FieldDefs := FDMemTable1.FieldDefs;
for I := 0 to lJsonDataSet .FieldDefs.Count - 1 do
begin
lJsonDataSet .FieldDefs[I].CreateField(lJsonDataSet );
end;
lJsonDataSet .Open;
lJsonDataSet.Insert; // Error at this line --> Data.DB >> TDataSet.Insert >> Buffer := ActiveBuffer;
lJsonDataSet.CopyFields(Datenmodul.pgmsql);
lJsonDataSet.Post;
end;
I´m kind of stuck with this now. Do you have an idea on how to fix that? I wan´t to send a list of TXDataJsonDataset as Result of a service.
With the normal TDataset this doesn´t work because i get a EJsonConverterNotFound-Error for TComponentname which is basically just a String:

Is it even possible to send a TXDataJsonDataset as Result?
A basic Dataset would suffice as well if we could solve the EJsonConverterNotFound-Error.
Best Regards and Thank you for the help so far
Max
Is anything here of interest?
I don't understand this:
What is TXDataJsonDataset? Is this code real? Because I'm not aware of any component named like that.
Even if you are referring to TXDataWebDataset, that's a component for TMS Web Core applications. And FireDac (and thus TFDMemTable) cannot be used in TMS Web Core applications, so it would also not make sense to mix both.
It´s defined in the XData.Web.JsonDataset:
My idea was to copy data from the TFDMemTable to a TXDataJsonDataset in the Service and then send the TXDataJsonDataset to the client.
TXDataJsonDataset is not available in the server. You should just return a normal JSON to it.
I believe FireDAC already as built-in converter to convert the dataset to a JSON format.
