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.




SP 2013: Bearbeiten-Button in View manipulieren (Link-Target ändern)

Geprüfte Antwort Dieser Beitrag hat 4 Antworten

Ohne Rang
6 Beiträge
Preko erstellt 28 Nov. 2018 08:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe die Anforderung, dass ich bei einer View auf eine Liste, die auf Ebende der übergeordneten Seite (Landing Page) liegt, den "Bearbeiten"-Button in der Listenübersicht auf jeweils eine individuelle "editForm"-Seite lenken muss.

Ich habe sämtliche Möglichkeiten, die mir per JavaScript eingefallen sind, ausprobiert, leider ohne Erfolg, wie z. B.:

<script type="text/javascript">
$(document).ready(function(){

    $('a[href$="https://MeinProjekt/sites/ersteUnterseite/_layouts/15/listform.aspx?PageType=6&ListId=%7B2A977D39%2D3304%2D4563%2D8AE3%2DFC08A5792377%7D&ID=1"]').attr("href", https://MeinProjekt/sites/landingPage/Lists/Termine/editErsteSeite.aspx?ID=1)

});
</script>

Habe es auch mit "_spBodyOnLoadFunctionNames.push("MeineFunktion");" vergeblich versucht!

Dieser Weg funktioniert außerhalb SharePoint 2013, aber auf der SharePoint Seite bleibt es außer Funktion. Hat jemand eine zündende Idee, wie sich das Ganze bewerkstelligen lässt?

Beste Grüße!

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Nov. 2018 08:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Alle onload-Funktionen kommen zu früh, weil die Ansicht der Elemente selbst auf diese Weise gerendert wird. Du brauchst also etwas, das wartet bis die Ansicht da ist, z.B. eine Verzögerung durch settimeout. Viel besser wäre aber, wenn Du das per JSLink/CSR machst -> Google

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
6 Beiträge
Preko Als Antwort am 29 Nov. 2018 09:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Deshalb habe ich ja auch u. a. "_spBodyOnLoadFunctionNames.push("MeineFunktion");"  benutzt, was eine SharePoint-eigene Geschichte ist, die erst abwartet, bis die Seite komplett aufgebaut ist um dann die aufgeführte Funktion aufzurufen.

Ist also das SharePoint Pendant zu jQuerys "$(document).ready(function(){}".

Ohne Rang
6 Beiträge
Preko Als Antwort am 29 Nov. 2018 10:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@ Andi:

Habe nun mal einen Vorschlag umgewandelt wie folgt:

<script type="text/Javascript" language="javascript" >
   function changeUrl() {
      $('a[href$="https://MeinProjekt/sites/ersteUnterseite/_layouts/15/listform.aspx?PageType=6&ListId=%7B2A977D39%2D3304%2D4563%2D8AE3%2DFC08A5792377%7D&ID=1"]').attr("href", https://MeinProjekt/sites/landingPage/Lists/Termine/editErsteSeite.aspx?ID=1)
      alert("URL change done!");
    }
    setTimeout(changeUrl, 1000);
}

Soweit, so gut. Der Timeout läuft und dann wird die Funktion aufgerufen. Anscheinend funktioniert das Ganze und wenn ich nun den Cursor über das "Bearbeiten"-Piktogramm (Blatt mit Stift) halte, erscheint auch der "neue", ausgetauschte Link.

Klicke ich nun auf das Symbol, so werden ich jedoch trotzdem auf die Standard-Edit-Seite geleitet und nicht auf die o. g. individuelle Edit-Seite (editErsteSeite.aspx).

Ohne Rang
6 Beiträge
Preko Als Antwort am 29 Nov. 2018 13:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

So, habe nun die Lösung gefunden!

Damit das Ganze bei mehreren Listeneinträgen auf einer Seite funktioniert, müssen logischerweise folgende Schritte durchgeführt werden:

  1. ID-Werte der betroffenen Datensätze ermitteln,
  2. und in einem Array speichern
  3. Iterierend die Linkänderung auf der Seite durchlaufen,
                    - zuerst pro ID den "onclick"-Event, dann
                    - erst das Link-Ziel ändern => ACHTUNG: Reihenfolge einhalten!

Nachfolgend, wie angekündigt, der Punkt 3. als Essenz des Ganzen dargestellt:

<script type="text/Javascript" language="javascript">

   function changeUrl() {
        // Ändert das Link-Ziel, welches auch angezeigt wird, wenn der Cursor über dem Bearbeiten-Symbol ist
        $('a[href$="../sites/ersteUnterseite/_layouts/15/listform.aspx?PageType=6&ListId=%7B2A977D39%2D3304%2D4563%2D8AE3%2DFC08A5792377%7D&ID=1"]').attr("onclick", "EditItemWithCheckoutAlert(event, '../sites/landingPage/Lists/Termine/editErsteSeite.aspx?ID=1', '', '', 'undefined', '../sites/landingPage', '', '26');return false;");

        // Ändert den "onclick"-Event auf das neue Link-Ziel mit den für SharePoint notwendigen Parametern

         $('a[href$="../sites/ersteUnterseite/_layouts/15/listform.aspx?PageType=6&ListId=%7B2A977D39%2D3304%2D4563%2D8AE3%2DFC08A5792377%7D&ID=1"]').attr("href", ../sites/landingPage/Lists/Termine/editErsteSeite.aspx?ID=1);     
    }
    _spBodyOnLoadFunctionNames.push("changeUrl");
}
</script>

Die (SharePoint-) Angaben für den "onclick"-Event habe ich mir über die "Entwickler-Tools" (F12) im Browser rauskopiert und entsprechend in die Funktion eingefügt.

Punkt 1 und 2 müssten dann entsprechend umgesetzt werden und der o. g. Lösungsweg eingebunden werden.