matthiasforberg
Occasional Collector

Mehr Details aus getIncomingReferences()?

Jump to solution

Hallo allerseits,

ich bastele grad an einem Skript, das bestimmte Verlinkungen überprüft und verbotene Querverlinkungen aus bestimmten Ordnern anzeigt. Ich lasse das über die Seiten in der Struktur laufen und prüfe über PageRef.getIncomingReferences(), wo überall Links auf die jeweilige Seite gesetzt sind.

Mein Problem ist jetzt, dass das noch relativ ungenau ist, da ich über ReferenceEntry.getReferencedObject() immer die ganze Seite bekomme, aber ich kann nicht herausfinden, aus welcher Sprache der (falsche) Link kommt oder in welcher Eingabekomponente er genau gesetzt ist.

Gibt es da eine Möglichkeit, das weiter einzugrenzen?

Grüße

Matthias

0 Kudos
1 Solution

Accepted Solutions
gockel
Crownpeak employee

Hallo Matthias,

die Datengrundlage des Referenzgraphen kennt diese Informationen nicht.

Die Kardinalität ist dem Referenzgraph auch nicht bekannt. Es wird jede Referenz also nur maximal 1 mal als eingehende Kante zu einem bestimmten Element geliefert unabhängig davon, wie oft diese in den Daten referenziert wird und von wo.

View solution in original post

0 Kudos
6 Replies
aVogt
Returning Creator

Hallo Matthias,

bei mir kommt zumindest eine Section:

<SECTION editor="2766" id="1105017" name="fliesstext" revision="56252" sectiontemplate="65">

    <LANG displayname="Flie&#xdf;text" language="DE"/>

</SECTION>

Darüber müsstest Du zumindest an die Sprache kommen.

Getestet mit:

ss = context.getProject().getUserService().getStore(Store.Type.SITESTORE, false);

st = ss.getStoreElement("startseite", IDProvider.UidType.SITESTORE_LEAF);

ReferenceEntry[] ref = st.getIncomingReferences();

for (int i = 0; i < ref.length; i++){

    context.logInfo(i + ": " + ref[i].getReferencedObject());

}

Vielleicht geht das ja erst ab einer bestimmten FS Version? Ich habs gerade mit  5.0.424 getestet.

Was zeigt Dir denn der Abhängigkeitsgraph direkt in FS an, von einer pageRef? Auch die Seite oder den Absatz?

Grüße

Andreas

0 Kudos

Hallo Andreas,

danke für die schnelle Antwort. Klar, getReferencedObject gibt natürlich ganz unterschiedliche Klassen zurück. Ich bekomme in meinem Testprojekt referenzierte Objekte der Typen Page, Section, GCAPage, Content2, Template, TableTemplate etc.

Am wichtigsten sind natürlich erst mal die aus Page und Section. Beides ist möglich, je nachdem, wo der Link angelegt ist. Aber auch aus Section kann ich keine Sprache erkennen. Beipiel:

<SECTION editor="98627" id="906613" name="text_box" revision="240156" sectiontemplate="996">

    <LANG displayname="Text Box" language="EN"/>

    <LANG displayname="Text Box" language="DE"/>

    <LANG displayname="Text Box" language="ES"/>

</SECTION>

diese Sprachen bezeichnen ja nur die (gesetzten) Anzeigenamen des Absatztes. Die Referenz ist aber in der Sprache PT gesetzt. Das kann ich so nicht erkennen und wenn getReferencedObject schon die Section zurückliefert, sehe ich keine Möglichkeit mehr, darin zu erkennen, wo der Link genau gesetzt ist. Der Referenzgraph zeigt mir auch nur den Absatz an, da sind keine Informationen über Sprache oder Name der Eingabekomponente angegeben.

Ich hatte gehofft, dass es vielleicht irgendwo eine (undokumentierte) Methode zum direkten Auslesen aus der ReferenceEntry gibt, also noch vor getReferencedObject. Um bei Deinem obigen Beispiel zu bleiben, z.B. sowas in der Art:

for (ref : st.getIncomingReferences()){

    context.logInfo(ref.getReferenceLanguage() + ", " + ref.getReferenceAttribute());

}

Aber ich befürchte, man muss in der gefundenen Referenz bzw. dem referencedObject wieder rekursiv durch alle Sprachen und Attribute gehen und die outgoingReferences vergleichen, um herauszufinden, wo genau die Referenz versteckt ist Smiley Sad

Grüße

Matthias

0 Kudos

Der http://www.e-spirit.com/odfs50/dev/?de/espirit/firstspirit/agency/ValidationAgent.html könnte dir weiterhelfen. Damit kannst du etwaige Regelverletzungen und auch die Sprachen, in denen es Probleme gibt, ermitteln.

Danke Christoph!

Der bringt mich zwar grad nicht weiter, weil es noch um die Version 4.2 geht, aber den merke ich mir auf jeden Fall mal für die Zukunft.

Grüße

Matthias

0 Kudos
gockel
Crownpeak employee

Hallo Matthias,

die Datengrundlage des Referenzgraphen kennt diese Informationen nicht.

Die Kardinalität ist dem Referenzgraph auch nicht bekannt. Es wird jede Referenz also nur maximal 1 mal als eingehende Kante zu einem bestimmten Element geliefert unabhängig davon, wie oft diese in den Daten referenziert wird und von wo.

0 Kudos

Hallo Matthias,

benötigst Du noch weitere Hilfe oder hat Dir die Antwort von Sebastian bereits geholfen?

In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere

Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Thorsten

0 Kudos