Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
Delphi 10.4 Sydney
|
JSON in DataSet
31. Okt 2019, 15:15
Hallo Zusammen,
ich versuche gerade meine erste Client - Server Application zu erstellen. Ich nutze dazu xData von TMS und komme auch schon recht weit.
Ich habe einen Server erstellt, der die Abfragen ausführt. Er liefert als Ergebnis einen JSON-Stream zurück. Query_Main.SaveToStream(AStream, sfJSON);
In der VCL-Umgebung kann ich diesen Stream in eine TFDMemTable einlesen Table_Abteilung.LoadFromStream(LStream, sfJSON);
und dann mit einem DataSource zur Verfügung stellen. Das klappt auch sehr gut.
Für eine WEB_Aplication müsste ich das Ganze in ein DataSet versuchen zu bringen. Und dabei scheiter ich leider.
Delphi-Quellcode:
procedure TFrmMain.btnAbteilungClick(Sender: TObject);
procedure OnResponse(Response: TXDataClientResponse);
begin
XDS_Abteilung.SetJsonData(TJSArray(TJSObject(Response.Result)['value']));
XDS_Abteilung.Open;
end;
begin
XMyClient.RawInvoke('IData_xChangeService.Get_Abteilung',[], @OnResponse);
end;
Angeblich müsste es so funktionieren. Aber der Wert 'value' liefert null zurück. Ich muss wahrscheinlich einen anderen angeben. Trotz großer Mühe und Suche finde ich nicht heraus, wie der Pfad aussehen muss.
Hier der JSON-Stream:
Code:
{"FDBS":
{"Version":15,"Manager":
{"UpdatesRegistry":true,"TableList":[
{"class":"Table","Name":"Query_Main","SourceName":"abteilung","SourceID":1,"TabID":0,"EnforceConstraints":false,"MinimumCapacity":50,"ColumnList":[
{"class":"Column","Name":"AbteilungsID","SourceName":"AbteilungsID","SourceID":1,"DataType":"UInt32","Precision":10,"Searchable":true,"AllowNull":true,"AutoInc":true,"Base":true,"AutoIncrementSeed":-1,"AutoIncrementStep":-1,"OAllowNull":true,"OInWhere":true,"OInKey":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"AbteilungsID","SourcePrecision":10},
{"class":"Column","Name":"Abteilung","SourceName":"Abteilung","SourceID":2,"DataType":"AnsiString","Size":45,"Searchable":true,"AllowNull":true,"Default":true,"Base":true,"OAllowNull":true,"OInUpdate":true,"OInWhere":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"Abteilung","SourceSize":45},
{"class":"Column","Name":"Test","SourceName":"Test","SourceID":3,"DataType":"AnsiString","Size":45,"Searchable":true,"AllowNull":true,"Default":true,"Base":true,"OAllowNull":true,"OInUpdate":true,"OInWhere":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"Test","SourceSize":45}],
"ConstraintList":[],"ViewList":[],"RowList":[
{"RowID":0,"Original":
{"AbteilungsID":10,"Abteilung":"Verkauf","Test":"0"}
},
{"RowID":1,"Original":
{"AbteilungsID":20,
"Abteilung":"Anwendung & Entwicklung",
"Test":"0"}
},
{"RowID":2,"Original":
{"AbteilungsID":30,
"Abteilung":"Technische Büro",
"Test":"0"}
},
{"RowID":3,"Original":
{"AbteilungsID":40,
"Abteilung":"Arbeitsvorbereitung",
"Test":"0"}
},
{"RowID":4,"Original":
{"AbteilungsID":50,
"Abteilung":"Produktion",
"Test":"0"}
}]
}],
"RelationList":[]}
}
}
Kann mir irgendjemand einen Schups geben? Entweder das ich den Pfad erkennen kann oder wie man den Stream anderweitig in ein DataSet bekommt?
Vielen Dank
Patrick
Patrick
|