28.03.2012

Widerstand ist zwecklos! "Custom Actions" in SharePoint 2010

Was ist eine Custom Action, und wozu ist sie gut?

"Custom Actions" können verwendet werden um das Benutzerinterface  in SharePoint zu erweitern und anzupassen. Meistens geht es darum, einen Link an geeigneter Stelle zu hinterlegen um darüber zusätzliche Funktionalität mittels einer Application Page aufzurufen.

Es gibt drei Arten von Custom Actions:
  • CustomAction
    • Damit wird ein neues Element dem Benutzerinterface hinzugefügt. Dabei kann es sich um einen Eintrag im Menü (Site Actions oder Usermenü)  handeln, aber auch im Ribbon, oder auf den Settings-Seiten inkl. Central Admin.  
  • CustomActionGroup
    • Wenn man mehrere CustomActions zu einer Gruppe zusammenfassen kann oder möchte, dann bündelt man diese über eine CustomActionGroup.
  • HideCustomAction
    • Diese verwendet man, um existierende Elemente zu verstecken.
Und wie erstellt man eine Custom Action?

Eine CustomAction legt man am besten in Visual Studio als "Empty Element" an. Die Elements.xml für das Feature kann folgende Attribut beinhalten:
<CustomAction
  RequiredAdmin = "Delegated | Farm | Machine"
  ControlAssembly = "Text"
  ControlClass = "Text"
  ControlSrc = "Text"
  Description = "Text"
  FeatureId = "Text"
  GroupId = "Text"
  Id = "Text"
  ImageUrl = "Text"
  Location = "Text"
  RegistrationId = "Text"
  RegistrationType = "Text"
  RequireSiteAdministrator = "TRUE" | "FALSE"
  Rights = "Text"
  RootWebOnly = "TRUE" | "FALSE"
  ScriptSrc = "Text"
  ScriptBlock = "Text"
  Sequence = "Integer"
  ShowInLists = "TRUE" | "FALSE"
  ShowInReadOnlyContentTypes = "TRUE" | "FALSE"
  ShowInSealedContentTypes = "TRUE" | "FALSE"
  Title = "Text"
  UIVersion = "Integer">
</CustomAction>



Die Beschreibung zu jedem einzelnen Attribut kann man direkt bei Microsoft nachlesen.

Ein Beispiel für eine funktionierende Elements.xml kann so aussehen:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
 <CustomAction
   Id="A6B6CAF0-0BAE-42BA-A018-CBA014868CE8"
   Description="Display Table of contents for this site and it's webs."
   Title="Show TOC"
   Location="Microsoft.SharePoint.StandardMenu"
   ImageUrl="/_layouts/images/siteToc/denzman_icon.png"
   GroupId="SiteActions"
   Sequence="1000">
  <UrlAction Url="~site/_layouts/siteTOC/showTOC.aspx"/>
 </CustomAction>
</Elements>

So sieht das dann in SharePoint aus:



Sehr wichtig ist das Attribut Location und GroupId. Hierüber wird definiert an welcher Stelle im SharePoint Benutzerinterface die jeweilige CustomAction angezeigt wird. Eine Liste der standard Location's und GroupId's findet man bei Microsoft. 

Ein weiteres wichtiges Attribut ist die Sequence. Darüber wird festgelegt in welcher Reihenfolge CustomActions in der entsprechenden GroupId erscheinen.

Wie funktioniert das mit der CustomActionGroup?
Im Prinzip wird die CustomActionGroup einfach dafür verwendet die CustomActions zu einer Gruppe zu verpacken. D.h. eine CustomActionGroup kann mehrere CustomAction Definitionen enthalten. Das Gerüst für eine Custom Action Group sieht wie folgt aus:

<CustomActionGroup
  Description = "Text"
  Id = "Text"
  Location = "Text"
  Sequence = "Integer"
  Title = "Text">
</CustomActionGroup>

Letztendlich werden die CustomActions dann einfach in das CustomActionGroup Element gepackt. (Also vor dem Ende-CustomActionGroup-Tag)

Custom Action Group's verwendet man überwiegen wenn es darum geht einen Link auf einer Settings Page zu verwenden. Der nachfolgende Screenshot verdeutlicht das:

Die Elements.xml dafür sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
 <CustomActionGroup
   Description = "Denzman custom action group"
   Id = "A6B6CAF0-0BAE-42BA-A018-CBA014868CE7"
   Location = "Microsoft.SharePoint.SiteSettings"
   ImageUrl="/_layouts/images/siteToc/denzman_icon.png"
   Sequence = "1000"
   Title = "Denzman features">
 </CustomActionGroup>

 <CustomAction
 Id="A6B6CAF0-0BAE-42BA-A018-CBA014868CE9"
 Description="Display Table of contents for this site and it's webs."
 Title="Show TOC"
 Location="Microsoft.SharePoint.SiteSettings"
 GroupId="A6B6CAF0-0BAE-42BA-A018-CBA014868CE7"
 Sequence="1000">
  <UrlAction Url="~site/_layouts/siteTOC/showTOC.aspx"/>
 </CustomAction>
</Elements>


Und wie geht das mit dem HideCustomAction?
Mit HideCustomAction lassen sich existierende Elemente der Benutzeroberfläche entfernen/verstecken. Meistens wird das verwendet um die Benutzeroberfläche klarer zu gestalten, so dass man entweder nicht so viele Elemente sieht, oder als weiteren Grund, dass man diese gar nicht erst über die entsprechende CustomAction nutzen kann. Natürlich bleibt die Funktion hinter der CustomAction erhalten, so dass eine mögliche Application Page weiterhin verfügbar bleibt. Jedoch in dem Fall dann zumindest nicht mehr über die CustomAction die man versteckt hat. Es handelt sich also nicht um eine Art Schutz vor unbefugtem Zugriff!

Eine HideCustomAction wird wie folgt beschrieben:
<HideCustomAction
  GroupId = "Text"
  HideActionId = "Text"
  Id = "Text"
  Location = "Text">
</HideCustomAction>

Mehr zur Beschreibung und Definition von HideCustomAction liest man am besten auf der Microsoft Seite nach.

Fazit
Mit Custom Action's lässt sich eine Menge anstellen. Egal, ob man einen Link platzieren, oder verstecken möchte, beides ist möglich. Gezielt eingesetzt kann damit die Benutzerfreundlichkeit in SharePoint verbessert werden, wenn man es jedoch übertreibt, bewirkt es das Gegenteil!


Keine Kommentare:

Kommentar veröffentlichen