Ändern des Edit-Formulars für eine SharePoint Liste

Vor kurzem kam ein Kunde mit einem Problem auf mich zu. Er hatte mit dem SharePoint-Designer ein eigenes Edit-Form für eine Liste erstellt und dieses als Standard-Editor-Formular der Liste zugeordnet. Mit der Zeit wurde die Liste angepasst und es sind neue Feld in die Liste dazugekommen. Leider werden diese neuen Felder von dem angepassten Formular nicht angezeigt.

Nun wollte der Kunde als das Standard-Formular wieder zurücksetzen. Leider wurde in der Zwischenzeit die Verwendung des SharePoint Designers in der Farm deaktiviert. Nun war also die Frage: wie kann ich das Standard Edit-Formular wieder zurücksetzen?

Klare Antwort: PowerShell!

$url = Read-Host "Enter URL" 
$listname = Read-Host "Enter List Name"
$editformurl = Read-Host "Enter Edit Form Url"

$web = Get-SPWeb $url 
$list = $web.Lists[$listname]

$list.DefaultEditFormUrl = $editformurl
$list.update()

So weit, so gut. Aber leider hatte der Kunde keinen Zugriff auf den Server. Somit hilft PowerShell an dieser Stelle leider einmal nicht weiter.

Was bleibt dann noch? JavaScript! Mit dem Client-Object-Model von SharePoint 2010 geht halt doch schon einiges.

<script type="text/javascript">
(function() {
    "use strict";

    var context;
    var list;

    SP.SOD.executeOrDelayUntilScriptLoaded(function () {
        context = new SP.ClientContext.get_current();
        list = context.get_web().get_lists().getByTitle("Test");
        context.load(list);
        context.executeQueryAsync(onSuccessLoadList, onFailure);
    }, "sp.js");

    function onSuccessLoadList() {
        list.set_defaultEditFormUrl("/users/eiben/Lists/Test/NewEditForm.aspx");
        list.update();
        context.executeQueryAsync(onSuccessUpdateList, onFailure);
    }

    function onSuccessUpdateList() {
        alert("done");
    }

    function onFailure(sender, args) {
        SP.UI.Notify.addNotification("Es ist ein Fehler aufgetreten ... " + args.get_message(), true, "", null);
        console.debug(args.get_stackTrace());
    }

})();
</script>

Das mal eben auf der Site z.B. in einem Content-Editor-WebPart einbinden – und voila!

Löschen von Elementen über die Ribbon Bar funktioniert nicht

Ich wurde vor Kurzem mit dem Problem konfrontiert, dass eine Löschung von SharePoint Listenelementen in einigen Webanwendungen per Checkbox  und Ribbon Bar nicht funktionierte – das Löschen direkt im Element oder über das Kontextmenü des Elements war kein Problem. Besonders ärgerlich ist dies, da es auch nicht möglich war mehrere Elemente auf einmal zu löschen.
Interessant war, dass dieses Problem nur in einer Webanwendung existierte – bei sämtlichen anderen Webanwendungen  funktionierte das Vorgehen problemlos.

Continue reading