SharePointCommunity
Die deutschsprachige Community für SharePoint, Office 365 und mit Azure

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

bewertet von 0 Usern
Beantwortet Dieser Beitrag hat 1 Geprüfte Antwort | 4 Antworten | 1 Follower

Ohne Rang
6 Beiträge
Preko erstellt in 28 Nov 2018 8:58

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!

Beantwortet Geprüfte Antwort

Ohne Rang
6 Beiträge

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.

Alle Antworten

Top-10-Beitragsschreiber
18.855 Beiträge

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

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

@ 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

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.

Seite 1 von 1 (5 Elemente) | RSS