SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Wie bekomme ich die die aktuelle Seiten-Url?

Unbeantwortet Dieser Beitrag hat 12 Antworten

Ohne Rang
216 Beiträge
Nachtschelm erstellt 16 Sept. 2010 11:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Forum,
ich brauch mal wieder Hilfe :). Mein Problem ist, glaube ich, eher trivial, aber ich komme zugegebenermaßen aufgrund meiner mangelnden Web-Sprechenkenntnisse nicht weiter. Das Szenario ist folgendes:
Ich habe eine Parent-Website auf der eine Liste mit Hyperlinks auf Child-Websites liegt. Diese Liste hat unter anderm auch eine Spalte "Status". Nun möchte ich auf jeder Child-Website den Status anzeigen, der in der Liste auf der Parent-Website gesetzt ist. Ich arbeite also auf er Child-Seite. Über REST-Services hole ich mir die Tabelle auf die Child-Website. Logischerweise bekomme ich aber die gesamte Spalte "Status" angezeigt und nicht nur das entsprechende Feld, das zu meiner Child-Website passt. Daher wollte ich eine if-Abfrage einbauen, die die Zeile heraussucht, in der der Hyperlink auf meine aktuelle Child-Seite enthalten ist. Ungefähr so:

<xsl-param name="PageUrl"/>
<xsl:if test="contains($PageUrl, substring-before(d:Firma,','))">
    <xsl:value-of select="d:StatusValue"/>
</xsl:if>

Die Variable "PageUrl" steht für die Url der aktuell geöffneten Child-Seite. Mein Problem ist nun, dass ich nicht weiß, wie ich diese Url abfragen und der Variable zuordnen kann.

Über Google habe ich viele Ansätze gefunden, die aber leider nur aus einzelnen Code-Fragmenten bestehen. Und da ich,wie eingangs erwähnt, in Sachen Web-Programmierung sehr schwach auf der Brust bin, konnte ich diese nicht erfolgreich einsetzen.

Wäre sehr glücklich, wenn mir da jmd weiterhelfen könnte :)

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Sept. 2010 13:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry, aber daraus werde ich nicht schlau :-S

Poste doch mal, was in $PageUrl und in d:Firma steht (laß es mit xsl:value-of ausgeben), dann kann man da bestimmt was machen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 16 Sept. 2010 14:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,
danke für Deine Antwort. Ich habe schon befürchtet, dass es nicht wirklich verständlich ist :s.

Ich versuch's nochmal zu erklären:

Ich habe eine Parent-Website mit einer Liste. Diese Liste enthält Hyperlinks auf Child-Websites und unter anderem eine  Status-Spalte, die "freigegeben" oder "erfasst" enthalten kann.

Hyperlink...Status
http://server/parentsite/childsite1 ... erfasst
http://server/parentsite/childsite2 ... erfasst
http://server/parentsite/childsite3 ... freigegeben

(d:Firma enthält den Hyperlink)

Diesen Status möchte ich nun auf der entsprechenden Child-Website anzeigen. Also Status "erfasst" auf childsite1 und childsite2 und den Status "freigegeben" auf der childsite3 (wie aus der Liste ersichtlich).
Dazu öffne ich die jeweilige Child-Website im SPD2010 und greife über REST-Services auf die Tabelle zu. Ziehe ich mir nun das Item "Status" (d:StatusValue) auf meine Child-Website, bekomme ich natürlich die komplette Spalte angezeigt. Auf der childsite1 und childsite2 möchte allerdings nur einmal "erfasst" haben und auf der childsite3 eben "freigegeben". Deswegen möchte ich auf jeder childsite eine if-Anweisung implementieren, die den Hyperlink aus der Tabelle mit der eigenen Url vergleicht. Bei einem Treffer lasse ich dann das Statusfeld aus der Zeile anzeigen. Ich weiß nur nicht, wie ich an die Url der childsite komme.

Abstrakt: Ich möchte in einer Website A eine Funktion haben, die ihre eigene Url (also die der Website A) in eine Variable auf der Website A speichert.
oder
Bespiel: Wie könnte ich beispielsweise die Url dieses Threads per Befehl im Beitrag erscheinen lassen?

Ich hoffe, das wurde jetzt etwas verständlicher :).

Viele Grüße
Nachtschelm

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Sept. 2010 15:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dein Ansatz mit dem <xsl:if test="contains(...)"> war schon richtig. Deshalb wollte ich ja wissen, was in den Variablen steht.

Ich würde zum den Test aber andersrum machen, d.h. prüfen ob in dem Hyperlink (d:Firma) die aktuelle URL vorkommt. Ob man die aktuelle URL automatisch bekommen kann, weiß ich nicht. Sicher nicht mit XSLT-Standard, aber vielleicht findet sich etwas im ddwrt-Namespace, der bei den Datenansichten immer eingebunden ist. Ansonsten einfach fest hinterlegen...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 16 Sept. 2010 17:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,
im ddwrt-Namespace habe ich zwei interessante Funktionen gefunden:

UrlBaseName

public string UrlBaseName(string szUrl);

Returns the basename of the file in the given URL szUrl. For example, if szUrl is /a/b/basename.ext, the value basename is returned.

UrlDirName

public string UrlDirName(string szUrl);

Returns the directory name of the file in the given URL szUrl. For example, if szUrl is "/a/b/basename.ext", the value "/a/b/" is returned.

Allerdings weiß ich bei beiden nicht, was ich als "szUrl" übergeben soll. IntelliSense des SPD kennt diese Funktionen anscheinend auch gar nicht. Ansonsten ist der ddwrt-Namespace leider wenig ergibig.
Hart coden ist auch nichtt gut, weil ich das ganze letztendlich in einer Vorlage verwenden möchte. Ich habe zwischenzeitlich mal versucht mit javascript was zu basteln. Sah am Ende so aus:

<xsl:param name="PageUrl">
    <script type="text/javascript">
        function createPageUrl() {
            document.write(
window.location.pathname);
        }
        createPageUrl();
    </script>
</xsl:param>

Leider sieht das ganze maximal nur gut aus, denn der SPD/SharePoint verarbeitet innerhalb des script-Tags nichts. Ich erhalte als Ergebnis den Code innerhalb des script-Tags als String. Füge ich allerdings den Code auf der Seite in ein Inhaltseditor-Webpart ein, erscheint das gewünschte Ergebnis: die site-relative Url.

Weißt Du, ob vllt an bestimmten Stellen im Website-Code kein JavaScript verwenden kann und wenn ja, wie ich diese Sache umgehe?

Viele Grüße
Nachtschelm

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Sept. 2010 09:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Problem ist, daß das XSLT zuerst (serverseitig) ausgeführt wird. Erst danach läuft (clientseitig) das JavaScript.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 17 Sept. 2010 09:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ah ok, verstehe. Kann ich dann vllt über asp was reißen, oder hat das auch so Tücken wie das JavaScript?

Viele Grüße
Nachtschelm

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Sept. 2010 10:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nein, geht auch nicht, weil ASP.NET Code in den Seiten nicht erlaubt ist.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 17 Sept. 2010 14:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Och, das ist aber schade. Heißt für mich also, dass ich keine Möglichkeit habe, die Url meiner Seite herauszbekommen, womit mein Plan hinfällig wäre. Besteht denn die Möglichkeit, dass ich den Status per Parameter in der Url übermittle und diese dann in eine Variable speichere, die ich dann im xsl-Code verwenden könnte?

Viele Grüße
Nachtschelm

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Sept. 2010 14:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das geht wiederum sehr einfach. Definiere einfach einen neuen Parameter für die Datenansicht vom Typ "Abfragezeichenfolge". Geht per SPD ganz einfach. Die Variable kannst Du dann im XSL so verwenden: $Variablenname (auf Groß-/Kleinschreibung achten!).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 17 Sept. 2010 15:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Andi, vielen Dank für Deine tatkräftige Unterstützung!

Allerdings habe ich's entweder nicht ganz verstanden oder es ist nicht genau das was ich brauche :).

 

Was mir gerade vorschwebt ist folgendes:

Hyperlink...Status
http://server/parentsite/childsite1 ... erfasst
http://server/parentsite/childsite2 ... erfasst
http://server/parentsite/childsite3 ... freigegeben

Ich klicke auf einen Hyperlink aus meiner Liste. Diesem soll der Status aus der gleichen Listen-Zeile als Parameter mitgegeben werden. Diesen mitgegebenen Status möchte ich dann auf der Seite, auf die der geklickte Hyperlink verweist (Childseite), anzeigen.

Wenn ich in meiner Datenansicht auf der Childseite diesen Parameter definiere, dann bekomme ich diesen ja noch nicht übergeben. Wie kann ich es erreichen, dass der Status, der zum angeklickten Hyperlink gehört, als Parameter übergeben wird?

Viele Grüße
Nachtschelm

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 Sept. 2010 16:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du bist jetzt also bei der Quelle der ganzen Aktionen? Bisher war es ja die Zielseite, oder?

Wenn die Quelle ebenfalls eine Datnansicht ist, dann mußt Du nur ein wenig im XSL basteln. Dort wo der Hyperlink erzeugt wird:
<a href="{@URL}">Linktext</a>

Einfach noch den Status mit übergeben:
<a href="{concat(@URL, '?Status=', @Status)}">...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 20 Sept. 2010 08:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,
da sich der Status ändern kann, wäre es nicht gut, wenn der Status im Link hart hinterlegt ist. Ich habe das ganze nochmal durchgedacht und glaube mittlerweile, dass es das sinnvollste ist, wenn ich das ganze über einen VS Workflow löse.

Ich bin Dir auf jeden Fall sehr dankbar für Deine Hilfe, hast meinen Horizont mal wieder erweitert :)

Viele Grüße
Nachtschelm