Archiv

Archiv für die Kategorie ‘Deployment’

Felder in Inhaltstypen nutzen

20. Dezember 2010

Bereitstellen von Feldern:

  • Felder können Global in der Site- oder WebCollection bereitgestellt werden
  • Felder können auch nur für ein ListTemplate im List Schema bereitgestellt werden

Bereitstellen von Inhaltstypen:

  • können Global in der Site- oder WebCollection bereitgestellt werden
  • können auch nur für ein ListTemplate im List Schema bereitgestellt werden

In der (globalen) Inhaltstypdefinition kann auf Felder verwiesen werden welche nur im ListTemplate vorhanden sind, also müssen diese nicht zwingend global definiert sein. Dann sollte der Inhaltstyp aber der Gruppen “_Hidden” hinzugefügt werden, da diese Felder im Websiteinhaltstyp nicht angezeigt werden! Listen welche auf Basis der Vorlage erstellt werden enthalten alle im Inhaltstyp definierten Felder da diese im Schema vorhanden sind.

Für Dependent Lookup Fields und Computed Fields ist diese Nutzung sehr gut geeignet da diese auch kein Platz im SQL Server belegen.

Thomas Deployment, SharePoint , ,

CustomForm in UserDisp.aspx

5. November 2010

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 , , ,