Die UserDisp.aspx Page enthält ein DelegateControl mit der ID = “ProfileRedirection”. Der SharePoint Server nutzt diese Möglichkeit um die Benutzerinformationen aus der MySite darzustellen.
Meine Frage war nun wie kann ich auf der Seite einfach nur die Toolbar austauschen um so mein Button hinzuzufügen ohne eine neue Page bereitzustellen?
Eine Lösung ist eine eigenes Form (Kopie von “UserListForm”) wo dann das “UserInfoListFormToolBar” ausgetauscht wird, da dieses nicht über TemplateName übersteuert werden kann. Alternativ kann auch ein Redirect auf eine eigene Page durchgeführt werden wo bei dann auch nur eine Kopie der UserDisp.aspx und UserListForm angelegt wird.
<SharePoint:UserInfoListFormToolBar runat="server" />
Ersetzen durch:
<SharePoint:FormComponent runat="server" TemplateName="MyUserInfoListDisplayFormToolBar" />
<SharePoint:RenderingTemplate id="MyUserInfoListDisplayFormToolBar" runat="server">
<Template>
<script type="text/javascript">
recycleBinEnabled = <SharePoint:ProjectProperty Property="RecycleBinEnabled" runat="server"/>;
</script>
<wssuc:ToolBar CssClass="ms-toolbar" id="toolBarTbl" runat="server" FocusOnToolbar=true>
<Template_Buttons>
<SharePoint:UserInfoListEditItemButton runat="server"/>
<SharePoint:UserInfoListDeleteItemButton runat="server"/>
</Template_Buttons>
</wssuc:ToolBar>
</Template>
</SharePoint:RenderingTemplate>
Implementierung des UserControls um das Form auszutauschen:
CodeBehind:
public partial class UserProfModify : UserControl, IFormDelegateControlSource
{
private static readonly Guid featureId = new Guid("0e2c460d-c1e1-4539-a88c-75db03816881");
private static bool IsMyUserSettingsEnabled(SPSite site)
{
return site.Features[featureId] != null;
}
#region IFormDelegateControlSource Member
public void OnFormInit(object objOfInterest)
{
SPListItem listItem = objOfInterest as SPListItem;
if (listItem != null)
{
// Prüfen ob es sich um eine Person handelt.
SPContentTypeId id = (SPContentTypeId)listItem["ContentTypeId"];
if (SPBuiltInContentTypeId.Person.IsParentOf(id))
{
// Prüfen ob für diese SiteCollection das angepasste Form erwünscht ist.
if (UserProfModify.IsMyUserSettingsEnabled(listItem.Web.Site))
{
// ctl00, PlaceHolderMain, UserListForm
Control t = Page.Controls[0].FindControl("PlaceHolderMain");
if (t != null)
{
FormComponent userForm = t.FindControl("UserListForm") as FormComponent;
if (userForm != null)
{
userForm.TemplateName = "MyUserListForm";
}
}
}
}
}
}
public void OnFormSave(object objOfInterest)
{
}
#endregion
}
UserControl (ascx)
<%@ Control Language="C#" AutoEventWireup="false" CodeBehind="UserProfModify.ascx.cs" Inherits="TestUserPage.WebControls.UserProfModify, $SharePoint.Project.AssemblyFullName$" %>
Feature:
<?xml version="1.0" encoding="utf-8"?><Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <Control Id="ProfileRedirection" Sequence="95" ControlSrc="~/_controltemplates/UserProfModify.ascx" /></Elements>
Thomas Customization, Deployment, SharePoint Customizing, SharePoint, SharePoint 2010, UserDisp.aspx