Search the FirstSpirit Knowledge Base
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
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.
Hallo Matthias,
bei mir kommt zumindest eine Section:
<SECTION editor="2766" id="1105017" name="fliesstext" revision="56252" sectiontemplate="65">
<LANG displayname="Fließ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
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
Grüße
Matthias
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
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.
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