Dynamische Struktur in tieferer Ebene beginnen

Antworten
Christoph
Beiträge: 57
Registriert: 30. Mär 2016, 15:47
Kontaktdaten:

Dynamische Struktur in tieferer Ebene beginnen

Beitrag von Christoph » 18. Mai 2020, 15:40

Hallo,
ich möchte eine dynamische Struktur (oder Tree Link View) auf einer tieferen Ebene beginnen. Konkret möchte ich bei der Abfrage nach Standort nur die Gebäude einer Site in der Location-Hierarchie anzeigen, die ja mit "Global" beginnt. Wie lässt sich das mit den zur Verfügung stehenden Filterelementen bewerkstelligen?

Bei der Definition einer Tree Link View (Classic UI) gibt es ja zusätzlich zum "Knoten-Filterausdruck" (das entspricht wohl bei Strukturen dem Feld "Nur Ordner anzeigen, die folgendem Kriterium entsprechen [A-SQL]:") auch noch das Feld "Rekursiver WHERE-Ausdruck", den es bei Strukturen nicht gibt. Was hat es denn eigentlich damit auf sich. das steht in keiner Doku (zumindest hab ich nichts gefunden).

Ich habe versucht, dort einen rekursive A-SQL-Ausdruck zu verwenden
T(SPSCommonClassBase).Recursive(Location).T(SPSLocationClassBase).Name=’Unsere Site'
um den Subtree der Gebäude und Räume unter "Unsere Site" zu bekommen, aber das klappt so nicht.

Hat jemand eine Idee?

Danke schon mal und Gruß
Christoph

Steinbit
Beiträge: 77
Registriert: 30. Nov 2017, 16:32
Kontaktdaten:

Re: Dynamische Struktur in tieferer Ebene beginnen

Beitrag von Steinbit » 19. Mai 2020, 14:29

Fast richtig. Versuch mal folgenden Ausdruck bzw. den fetten Ausdruck hinzuzufügen. Das sollte klappen. Hatte dieses Statement in der Vergangenheit bereits eingesetzt: T(SPSCommonClassBase).Location.T(SPSLocationClassBase).T(SPSCommonClassBase).Recursive(Location).T(SPSLocationClassBase).Name = 'Your Site'

Weshalb man zuerst in Location und dann wieder zurück in die CommonClassBase springen muss, erschließt sich mir nicht aber es fuktioniert.

Christoph
Beiträge: 57
Registriert: 30. Mär 2016, 15:47
Kontaktdaten:

Re: Dynamische Struktur in tieferer Ebene beginnen

Beitrag von Christoph » 09. Jun 2020, 08:07

Hallo ,
danke für die Antwort und den Vorschlag zu dem Baum-Problem.
Leider hat das bei mir nicht funktioniert oder ich habe es nicht hinbekommen. Mir ist allerdings auch nicht ganz klar, wie die Feldeigenschaften korrekt ausgefüllt werden.

Klar ist:
Struktur Datendefinition: SPSLocationClassBase
Knotennamen-Ausdruck: Name
Elternnamen-Ausdruck: T(SPSCommonClassBase).Location

Unklar ist:
Filterausdruck
Knoten-Filterausdruck <-- ich hatte vermutet, dass man hier ansetzen muss, um den Subtree zu bekommen
Rekursiver WHERE-Ausdruck

Dein Vorschlag als Knoten-Filterausdruck eingesetzt ergibt einen leeren Baum bzw. keinen Baum. Als "Filterausdruck" hat er keine Wirkung, d.h. der Baum setzt bei "Global" an. Beim "Rekursiver WHERE-Ausdruck" kann ich eingeben, was ich will, das hat nie eine Wirkung. Vermute fast, dass das nicht verwendet wird. Bei der Definition von Strukturen, wo die Felder ansonsten identisch sind fehlt das Feld "Rekursiver WHERE-Ausdruck" auch, so dass ich kein sinnvolles Beispiel für die Verwendung gefunden habe.

Ich muss zugeben, dass mich dieser Teil der Formulardefinition extrem nervt, weil es für uns so wichtig ist und die Dokumentation dazu absolut nichts hergibt.

Viele Grüße
Christoph

Steinbit
Beiträge: 77
Registriert: 30. Nov 2017, 16:32
Kontaktdaten:

Re: Dynamische Struktur in tieferer Ebene beginnen

Beitrag von Steinbit » 09. Jun 2020, 22:55

Hi,

ich habe mir das Problem nochmal in der Test-Umgebung angeschaut und konnte es wie folgt lösen. Jedoch ist es je nach Grundstruktur nicht möglich komplett auf einer unteren Ebene zu starten, da hier nur 1 RootElement angegeben werden kann. Läuft der Baum früh auseinander, könntest du nachfolgende Idee verwenden und ggf. per custom_Validierung oder Message die Parent Objekte verbieten:

Object-Hierachy-picker1
DataDefinition: SPSLocationClassBase
FilterExpression: Model > custom_GetLocationTree
ParentExpression: T(SPSCommonClassBase).Location

custom_GetLocationTree (Context-Property: Advanced): String
var locArray= ['LocationName1','LocationName2'];
locArray = '\'' + test.join('\',\'') + '\'';

$value = "Recursive(LocationFor).T(SPSLocationClassBase).Name IN (" + locArray + ") OR ";
$value += "T(SPSCommonClassBase).Recursive(Location).T(SPSLocationClassBase).Name IN (" + locArray + ")";

return $value;
Der Grund ist das für die Darstellung der komplette Pfad von Kind zu Eltern-Objekt verfügbar sein muss. Daher wird Recursive(LocationFor) - für die Elternobjekte - und Recursive(Location) - für die Kinder vom Zielobjekt - benötigt. Die beiden Filteranweisungen verbinde ich per logischem ODER.

Antworten

Zurück zu „Customizing und Reporting“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast