Main /

Verändern des Kontextmenüs einer Dokumentbibliothek im Sharepoint

Allgemein

Knowledge Base

Virtualisierung Emulation

Technik und Wissen

Community

Privat

%center%[[http://validator.w3.org/check?uri=referer|http://www.w3.org/Icons/valid-xhtml10.png]]%%

Verändern des Kontextmenüs einer Dokumentbibliothek im Sharepoint

Verändern des Kontext-Menüs einer Dokumentbibliothek beim Microsoft Sharepoint Portal Server 2003 oder Windows Sharepoint Services

In vielen Sharepoint-Projekten tritt das Problem auf, dass der Kunde mit den standard-Kontextmenüeinträgen nicht zufrieden ist. Sei es, weil man dort neue Funktionalitäten unterbringen (also Einträge hinzufügen) oder gar das Löschen unterbinden möchte (bestehende standard-Einträge entfernen). Beides ist mit Javascript möglich, denn das Kontextmenü ist ein rein clientseitiges Programm, das im Browser läuft.

Das Standard-Kontextmenü befindet sich in der Datei ows.js, die Bestandteil jeder SPS und WSS Installation ist. Das Standard-Kontextmenü wird von der Funktion AddDocLibMenuItems() erzeugt. Diese Funktion bietet glücklicherweise die Möglichkeit eine eigene Funktion namens Custom_AddDocLibItems() aufzurufen, sofern sie vorhanden ist.

Wir brauchen also praktisch nichts weiter zu tun, als auf der Sharepoint-Seite mit der Dokumentbibliothek ein Content-Editor-Web-Part zu plazieren, und dort im Quelltext-Editor folgendes hineinzuschreiben:

<script language="JavaScript">
function Custom_AddDocLibMenuItems(m, ctx)
{
   mach_Sachen();
}
</script>

Die eigentliche Arbeit liegt in der Funktion mach_Sachen(). Wenn man eigene Funktionen hinufügen möchte, kann man sich im prinzip in der ows.js ansehen, wie das geht. Wenn man standard-Einträge löschen will, muß man den ganzen Inhalt der ursprünglichen Funktion AddDocLibMenuItems() in Custom_AddDocLibItems() kopieren und die Teile die man nicht haben möchte löschen.

Da mir das auf Dauer zu mühsam ist, habe ich ein Script geschrieben, das beides kann. Es kann neben allen Einträge des Standard-kontextmenüs auch eigene erzeugen. Zusätzlich können alle Standard-einträge einfach durch Flags ausgeblendet werden. Das Script muß wie oben beschrieben einfach in ein Content-Editor-Webpart kopiert werden.

Ein- und Ausblenden von Standard-Menüeinträgen

Die Entscheidung welche der Standard-Einträge angezeigt werden sollen erfolgt über die Flags am Anfang des Scriptes. false bedeutet, dass ein Eintrag ausgeblendet wird, true dass er angezeigt wird, sofern Sharepoint ihn anzeigen würde (Manche Punkte sind z.B. nur bei Bildbibliotheken aktiv).

Einfügen eigener Menüpunkte

Dazu existiert die Funktion AddCustomUrlEntry(text, url, imagefile), die am Ende des Scripts definiert ist. Je nachdem wo der eigene Menüpunkt erscheinen soll muß ein Aufruf dieser Funktion in der Custom_AddDocLibMenuItems() untergebracht werden. Beispielhaft ist dies am Ende geschehen.

Hier ist das Script:

<script language="JavaScript">

// Javascript zum Ein- und Ausblenden einiger
// standard Sharepoint-Doklib-Kontenxtmenüeinträge
// und zum Hinzufügen von eigenen Einträgen
// (w) 2005 Stephan Elsner
// Dieses Script benutzt Code aus der ows.js (c) Microsoft

var Item_Properties_View          = false; // Eigenschaften ansehen
var Item_Properties_Edit          = false; // Eigenschaften bearbeiten
var Item_Edit_External            = true// In Programm bearbeiten
var Item_Delete                   = false; // Dokument löschen
var Item_Subscribe                = false; // Benachrichtigung
var Item_Checkin_Checkout         = true// Ein- /Auschecken
var Item_Moderate                 = true// Moderieren
var Item_DownloadImage            = true// Original Bild herunterladen
var Item_Discuss                  = true// Diskutieren

function Custom_AddDocLibMenuItems(m, ctx)
{
    var RootFolder = GetRootFolder(ctx);
    setupMenuContext(ctx);
    if (currentItemFileUrl == null)
        currentItemFileUrl = itemTable.ServerUrl;
    if (currentItemFSObjType == null)
        currentItemFSObjType = itemTable.FSObjType;
    var currentItemEscapedFileUrl = escapeProperly(
        unescapeProperly(currentItemFileUrl));

    // ------- Eigenschaften Anzeigen ----------------
    if (currentItemFSObjType != 1) {
        if (Item_Properties_View ) {
           strDisplayText = L_ViewProperties_Text;   
           strAction = "STSNavigate('" + ctx.displayFormUrl+"?ID="+
                       currentItemID +  "&Source=" +
                       GetSource() + RootFolder + "')";
           strImagePath = "";
           CAMOpt(m, strDisplayText, strAction, strImagePath);
        }
    }

    // ------- Eigenschaften Bearbeiten ----------------
    if (Item_Properties_Edit ) {
       strDisplayText = L_EditProperties_Text;   
       strAction = "STSNavigate('" + ctx.editFormUrl+"?ID="+
                   currentItemID + "&Source=" +
                   GetSource() + RootFolder + "')";
       strImagePath = ctx.imagesPath + "edititem.gif";
       CAMOpt(m, strDisplayText, strAction, strImagePath);
    }

    // ------- In Programm Bearbeiten ----------------


    if ((currentItemFSObjType != 1) && Item_Edit_External)
    {
        if (ctx.isWebEditorPreview == 0)
        {
            if (ctx.listTemplate == LISTTEMPLATE_IMAGE_LIBRARY && itemTable.IsImage == "1")
            {
                strDisplayText = L_EditInOIS_Text;
                strAction = "EditSingleImage('" + currentItemID  + "')";
                strImagePath = ctx.imagesPath + "oisweb.gif";
                CAMOpt(m, strDisplayText, strAction, strImagePath);
            }
            else
            {
                setDocType();
                if (currentItemAppName != "" && currentItemOpenControl != "")
                {
                    strDisplayText = StBuildParam(L_EditIn_Text, currentItemAppName);
                    strAction = "editDocumentWithProgID2('" + currentItemFileUrl + "', '" +
                                 currentItemProgId + "', '" + currentItemOpenControl + "')";
                    strImagePath = ctx.imagesPath + currentItemIcon;
                    CAMOpt(m, strDisplayText, strAction, strImagePath);
                }
            }
        }
    }

    // --------- Dokument löschen ----------------
    if (Item_Delete) {
       strDisplayText = L_DeleteDocItem_Text;
       strAction = "DeleteDocLibItem('" +
               ctx.HttpPath + "&Cmd=Delete&List=" + ctx.listName +
               "&ID=" + currentItemID + "&owsfileref=" +
               currentItemEscapedFileUrl + "&NextUsing=" + GetSource() + "')";
       strImagePath = ctx.imagesPath + "delitem.gif";
       CAMOpt(m, strDisplayText, strAction, strImagePath);
    }

    // ------------- Moderieren ------------------------
    if (ctx.isModerated == true && Item_Moderate )
    {
        strDisplayText = L_ModerateItem_Text;
        strAction = "STSNavigate('" + ctx.editFormUrl+"?ID="+ currentItemID +
                                  "&ChangeApproval=TRUE&Source=" +
                                  GetSource() + RootFolder + "')";
        strImagePath = "";
        CAMOpt(m, strDisplayText, strAction, strImagePath);
    }

    // ----- Original-Bild herunterladen (für Bildbibliothek) -------------
    if (currentItemFSObjType != 1 && ctx.listTemplate == LISTTEMPLATE_IMAGE_LIBRARY
        && Item_DownloadImage)
    {
        strAction = "DownloadOriginalImage(" + currentItemID + ")";
        strImagePath = ctx.imagesPath + "download.gif";
        strDisplayText = L_DownloadOriginal_Text;
        CAMOpt(m, strDisplayText, strAction, strImagePath);
    }

    // ------ Checkin / checkout --------------------
    if (currentItemFSObjType != 1 && Item_Checkin_Checkout)
    {
        CAMSep(m);
        AddCheckinCheckoutMenuItem(m, ctx, currentItemEscapedFileUrl);
        AddVersionsMenuItem(m, ctx, currentItemEscapedFileUrl);
                  CAMSep(m);
        if (ctx.PortalUrl != null && false)
        {
            strDisplayText = L_AddToMyLinks_Text;
            strAction = "Portal_Tasks('PinToMyPage')"; ;
            strImagePath = "";
            CAMOpt(m, strDisplayText, strAction, strImagePath);

            strDisplayText = L_AddToCategory_Text;
            strAction = "Portal_Tasks('Categorize')"; ;
            strImagePath = "";
            CAMOpt(m, strDisplayText, strAction, strImagePath);
            CAMSep(m);
        }
    }

    // ----------- Benachrichtigen ------------
    if (Item_Subscribe) {
       strDisplayText = L_Subscribe_Text;
       strAction = "NavigateToSubNewAspx('" + ctx.HttpRoot + "',
                                        'List="
+ ctx.listName + "&ID=" + currentItemID + "')";
       strImagePath = "";
       CAMOpt(m, strDisplayText, strAction, strImagePath);
    }

    // ----------- Diskutieren ----------------
    if (currentItemFSObjType != 1 && Item_Discuss)
    {
        strDisplayText = L_Discuss_Text;
        strAction = "STSNavigate('" + ctx.HttpPath + "&Cmd=COMMFRMS&URL=";
        if (ctx.isWebEditorPreview == 0)
            strAction += currentItemEscapedFileUrl;
        strAction += "')";
        strImagePath = ctx.imagesPath + "icdisc.gif";
        CAMOpt(m, strDisplayText, strAction, strImagePath);
        if (ctx.listTemplate != LISTTEMPLATE_IMAGE_LIBRARY)
                   AddWorkspaceMenuItem(m, ctx);
    }

    // Beispiel für einen eignen Eintrag im Kontextmenü
    AddCustomUrlEntry("Dokumentupload",
                      "<Dokumentbibliothekname>/Forms/Upload.aspx?RootFolder=","");

    // Rückgabewert true bedeutet, dass die Standardmenüeinträge der ows.js nicht
    // zusätzlich hinzugefügt werden. Es wird also _ausschließlich_ unsere Routine
    // durchlaufen, nicht nur _zusätzlich_
    return true;
}

// ---------------------------------------------------------------------
// Fügt einen eigenen Eintrag dem kontextmenü hinzu,
// der eine spezialle Seite aufruft
// Parameter:
// text: Text des Menüpunktes
// url: URL die beim Klick aufgerufen wird
// imagefile: Dateiname des Bildes (nicht pfad) -
//            Es genügt der name eines standardbildes
//            z.B. delitem.gif
function AddCustomUrlEntry(text,  url, imagefile) {
    strAction = "STSNavigate('" + url + "')";
    if (imagefile == "" || imagefile == null) {
       imagefile = "icdisc.gif";
    }
    strImagePath = ctx.imagesPath + imagefile;
    CAMOpt(m, text, strAction, strImagePath);
}

</script>
Frische Änderungen (All) | Edit SideBar Zuletzt geändert am 19.10.2005 13:50 Uhr Seite Bearbeiten | Seitenhistorie
Powered by PmWiki