In einem für einen Kunden entwickelten WebPart werden offene Aufgaben (d.h. Aufgaben, deren Status ungleich “abgeschlossen” ist) des angemeldeten Benutzers gesucht und in einem SPGridView angezeigt. Der Kunde hatte zusätzlich den Wunsch, Aufgaben direkt im WebPart abschließen (genauer: den Status einer Aufgabe auf „abgeschlossen“ setzen) und bearbeiten zu können.

Hierfür wurde dem SPGridView ein SPMenuField und diesem ein MenuTemplate mit entsprechenden MenuItemTemplates hinzugefügt:

MenuTemplate myTaskMenu = new MenuTemplate {ID = "myTaskMenuID"};

myTaskMenu.Controls.Add(new MenuItemTemplate
{
   Text = "Aufgabe bearbeiten",  
   ImageUrl="_layouts/images/EDITITEM.gif",
   ClientOnClickScript = "editTask('%PATH%');"
}); 

myTaskMenu.Controls.Add(new MenuItemTemplate 
{
   Text = "Aufgabe abschließen",
   ClientOnClickScript = 
     "completeTask('%SPSITEURL%/_layouts/UserProject/CompleteTask.aspx?Path=%PATH%');"
});

Controls.Add(myTaskMenu);

SPMenuField titleField = new SPMenuField
{
   MenuTemplateId = myTaskMenu.ID, 
   HeaderText = "Titel",
   TextFields = "Title", 
   TokenNameAndValueFields = "PATH=Path,SPSITEURL=SPSiteUrl"
}; 

mySPGridViewMyTasks.Columns.Add(titleField);

Der zugehörige JavaScript-Code:

function completeTask(url) {
   var options = {
      title: "Aufgabenabschluss",
      width: 400,
      height: 100,
      url: url, 
      allowMaximize: false,
      dialogReturnValueCallback: NotifyIfResultOk
   }
   SP.UI.ModalDialog.showModalDialog(options);
}

function editTask(url) {
   var editUrl = url.replace("DispForm.aspx", "EditForm.aspx");
   SP.UI.ModalDialog.ShowPopupDialog(editUrl);
}

function NotifyIfResultOk(dialogResult, returnValue) {
   if (dialogResult == SP.UI.DialogResult.OK) {
      SP.UI.Notify.addNotification("Aufgabe wurde abgeschlossen", false);
   }
   setTimeout('SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);', 1000);
}

Bei “Aufgabe bearbeiten” wird über SP.UI.ModalDialog.ShowPopupDialog(editUrl) der bekannte Bearbeiten-Dialog geladen. Die Aktion “Aufgabe abschließen” lädt die Seite CompleteTask.aspx über die Funktion SP.UI.ModalDialog.showModalDialog(options). In CompleteTask.aspx wird versucht, den Status der Aufgabe auf “abgeschlossen” zu setzen. Gelingt dies, wird SP.UI.DialogResult.OK zurückgegeben und die Erfolgsmeldung über SP.UI.Notify.addNotification() eingeblendet.

Wir wünschen allen Lesern einen Guten Rutsch ins Neue Jahr!

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.