Archiv

Archiv für November, 2010

ID im Display und Edit Form anzeigen

25. November 2010

 

Field Definition:


<Field ID="{f1be43e9-418d-41b2-982e-8894e7ee6e13}"
       Type="Computed"
       Name="TaskID"
       StaticName="TaskID"
       DisplayName="Task ID"
       Group="_Hidden"
       SourceID="http://schemas.microsoft.com/sharepoint/v3">
  <FieldRefs>
    <FieldRef Name="ID" />
  </FieldRefs>
  <DisplayPattern>
    <Column Name="ID" />
  </DisplayPattern>
</Field>

 

ContentType Definition:

<FieldRef ID="{f1be43e9-418d-41b2-982e-8894e7ee6e13}" Name="TaskID" ShowInDisplayForm="TRUE" ShowInEditForm="TRUE" ShowInNewForm="FALSE"/>

 

Es ist auch möglich über das UI eine berechnete Spalte zu erzeugen und dort als Formel =[ID] einzutragen.

Der Typ Computed hat aber den Vorteil das dieser keine Spalte im SQL Server benötigt im Gegensatz zu Calculated (SqlVariant)

Thomas Customization, SharePoint ,

Interna von SP.UI.Dialog

10. November 2010
Optionen

folgenden Optionen werden zum anzeigen vom SP.UI.ModalDialog.showModalDialog unterstützt:

  • width: 100px (null)
  • height: 100px (null)
  • autosize: true|false (null=true)
  • dialogReturnValueCallback: callback Methode
  • url: <url>
  • html: htmlNode
  • x: 10px (null)
  • y: 10px (null)
  • title: Text
  • allowMaximize: true|false (null=true)
  • showMaximized: true|false (null=false)
  • showClose: true|false (null=true)

wird width und height nicht gesetzt sollte autosize nicht auf false gesetzt werden.

Sollte im Dialog ein Html Element statt eine Url angezeigt werden kann diese Html Element in der Seite als nicht sichtbar gesetzt werden (übergeordnetes Element) und dann über element.cloneNode(true) in der options Property html gesetzt werden. Sollte man kein Clone des Nodes durchführen wird der Dialog beim schließen, diesen Node löschen. Diesen Node kann aber in eine Variable gespeichert werden so das dieser erhalten bleibt.

Dialog nach einen PostBack schließen

Sobald die benötigte Funktionalität auf der Serverseite ausgeführt wurde kann der Dialog wie folgt geschlossen werden:

this.Page.Response.Clear();
this.Page.Response.Write("<script type=\"text/javascript\">window.frameElement.commonModalDialogClose(1, 1);</script>");
this.Page.Response.End();

Parameter1 (SP.UI.DialogResult): –1 = invalid, 0 = cancel, 1 = OK

Parameter2: Result Value

Weitere windows.frameElement Methoden:

  • cancelPopup()
  • commitPopup(ReturnValue)
  • overrideDialogResult(DialogResult)
  • navigateParent(url)
  • commonModalDialogClose(DialogResult, ReturnValue)
  • dialogArgs(args)
  • autoSize(arg)

Thomas SharePoint ,

Ribbon GroupTemplates (CMDUI.XML)

8. November 2010
TemplateName
Title Type Template
Alias
DisplayMode
Ribbon.Templates.Flexible
Large OneRow o1 Large
Medium ThreeRow o1 Medium
MediumTwoRows TwoRow o1 Medium
Small ThreeRow o1 Small
Popup     Large

Ribbon.Templates.Flexible2

LargeLarge OneRow o1 Large
  OneRow o2 Large
LargeMedium OneRow o1 Large
  ThreeRow o2 Medium
LargeSmall OneRow o1 Large
  TreeRow o2 Small
MediumLarge ThreeRow o1 Medium
  OneRow o2 Large
MediumMedium ThreeRow o1 Medium
  ThreeRow o2 Medium
MediumSmall ThreeRow o1 Medium
  ThreeRow o2 Small
SmallLarge ThreeRow o1 Small
  OneRow o2 Large
SmallMedium ThreeRow o1 Small
  ThreeRow o2 Medium
SmallMedium ThreeRow o1 Small
  ThreeRow o2 Medium
SmallSmall ThreeRow o1 Small
  ThreeRow o2 Small
Popup     LargeMedium

 

Diese Templates sind vom Type “OverflowSection” und ermöglichen damit eine Dynamische Anzahl von Steuerelementen. 

  • Small = Icon (16×16) ohne Label Text
  • Medium = Icon (16×16) mit Label Text
  • Large = Icon (32×32) mit Label Text (unterhalb)

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