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.
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.
