Verschachteltes Array
Hallo,
ich stecke wieder etwas fest bei der Erstellung eines verschachtelten Array, welches ich für den neuen Druckgenerator benötige (steht in einem FX-Feld für Testzwecke).
Ich möchte gerne auf der ersten Ebene das Feld Name auf der zweiten Ebene das Feld Bil (und weitere Felder wie ek etc. ) und auf der Dritten Ebene das Feld GJ. Momentan erstellt der Code ein Array ohne Verschachtelungen. Da ich hier noch keine Erfahrung habe, wie ich dies ändern kann, wäre ich um Unterstützung dankbar.
var Table := ((select Bundesanzeiger where 'Geschäftsjahr' > 2016) order by 'Fonds Dienstleister'.Name).{
Name: 'Fonds Dienstleister'.Name,
GJ: 'Geschäftsjahr',
Bil: 'Bilanzsumme (T€)',
ek: 'Eigenkapital (T)'
};
Table
Frank
2 Antworten
-
So ganz klar aus dem Script ist mir nicht ersichtlich, weshalb das so gebaut werden soll, aber mit nachfolgendem Script wird der gewünschte Ebenenaufbau erzeugt:
{"Name":"UweG",vTable1:{"GJ":"2022", vTable2:{"Bil":"1000,00 €"}}} usw.
In Carbone sieht die Variable dann wie folgt aus um an den Wert der dritten Ebene zu gelangen:
{d.vTable.vTable1.vTable2.Bil}
Wenn es eine Tabellenrepitition ist:
{d.vTable[i].vTable1[i].vTable2[i].Bil}
Für Carbone baut man (verschachtelte / nested)-Arrays meist aus dem Grund, dass Verknüpfungen in Tabellenform gedruckt werden sollen und sich die Daten in Ninox auf verschiedenen Ebenen befinden.
In diesen Fällen bietet es sich an, das JSON selbst zu erzeugen.
Im Script hat sich nachfolgendes Schema für das Erzeugen verschachtelter Tabellen-Array's bewährt:--------------------
"// Untertabelle2-Array mit JSON-Object für jeden einzelnen Record erstellen //";
function fx_UnterTabelle2(Untertabelle1_ID : number) do
let vArray1 := [];
let vArrayObj1 := [];
let vObj1 := {};
for i in Untertabelle1.Untertabelle2[Untertabelle1 = Untertabelle1_ID] do
vObj1 := {
vWert_21: i.NinoxFELD_21,
vWert_21': i.NinoxFELD_22
};
vArrayObj1 := [vObj1];
vArray1 := array(vArray1, vArrayObj1)
end;
vArray1
end;
"// Untertabelle1-Array mit JSON-Object für jeden einzelnen Record erstellen //";
let vArray := [];
let vArrayObj := [];
let vObj := {};
for i in Untertabelle1 do
vObj := {
vWert_11: i.NinoxFELD11,
vWert_12: fx_UntertTabelle(number(i.Nr))
};
vArrayObj := [vObj];
vArray := array(vArray, vArrayObj)
end;
{"vTable" : "vArray"}
------------------------------------------Man erzeugt das Array aus der mit dem Record vorhandenen Verknüpfung, indem man das Array aus einer Funktion erzeugt, da man darüber die Verknüpfung-ID übergeben kann und damit die dem Record zugehörigen Daten erhält.
Wenn man aus Untertabelle2 eine 3. Ebene erzeugen möchte, muss man ein weiteres Array über eine Funktion erzeugen, -
Hallo Uwe, vielen Dank für die tatkräftige Unterstützung. Ich werde mir das ansehen und versuchen umzusetzen.
Frank
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 2Antworten
- 101Ansichten
-
2
Folge bereits