如何将自定义构建的webpart添加到列表定义项目中的自定义视图aspx页面

时间:2009-03-26 17:58:20

标签: sharepoint sharepoint-2007

我开发了一个列表定义项目,并创建了一个自定义视图aspx页面作为列表的默认视图。我现在想添加一个自定义webpart以显示在自定义视图aspx页面中。有关如何做到的任何想法?

3 个答案:

答案 0 :(得分:2)

您可以使用功能接收器并在功能激活期间管理Web部件的添加。这里有一些存根可以帮助您入门。

在功能激活的方法中,调用代码类似于以下内容:

        // Add web parts to the .aspx page that was provisioned
        SPFile page = site.GetFile(<<page url>>);

        Hashtable hashWebPartsOnPage = new Hashtable();

        using (SPLimitedWebPartManager mgr = page.GetLimitedWebPartManager(PersonalizationScope.Shared))
        {
            try
            {
                // First, let's clear the existing web parts off of the form
                foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in mgr.WebParts)
                {
                    hashWebPartsOnPage.Add(webPart.ID, webPart);
                }

                foreach (string webPartName in hashWebPartsOnPage.Keys)
                {
                    System.Web.UI.WebControls.WebParts.WebPart webPart = hashWebPartsOnPage[webPartName] as System.Web.UI.WebControls.WebParts.WebPart;
                    mgr.DeleteWebPart(webPart);
                }

                // Add Part to the proper Zone
                MyWebPart myWebPart = new MyWebPart();
                //set web part properties
                mgr.AddWebPart(myWebPart, "FullPage", 1);
            }
            finally
            {
                mgr.Web.Dispose();
            }

        }
        page.Update();

答案 1 :(得分:2)

在SharePoint 2010上,您可以在列表定义 Schema.xml 内的同一视图定义中添加自定义Webpart或SharePoint WebPart(我不是在谈论列表实例)。

虽然MSDN没有直接解释,但如果查看View Schema,则无法看到'&lt; WebParts&gt;'定义,你实际上可以做这样的事情:

<View BaseViewID="7" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:CILSS_defaultView" DefaultView="TRUE" MobileView="FALSE" MobileDefaultView="FALSE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="CI_Projects.aspx">
        <Toolbar Type="Standard" />
        <XslLink Default="TRUE">main_cilss.xsl</XslLink>
        <RowLimit Paged="TRUE">30</RowLimit>
        <ViewFields>
          <FieldRef Name="Attachments"></FieldRef>
          <FieldRef Name="LinkTitle"></FieldRef>
          <FieldRef Name="CILSS_ProjectDescription"></FieldRef>
        </ViewFields>
        <Query>
          <OrderBy>
            <FieldRef Name="LinkTitle" Ascending="TRUE"></FieldRef>
          </OrderBy>
        </Query>
        <ParameterBindings>
          <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
          <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
        </ParameterBindings>
        <WebParts>
          <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2">
            <![CDATA[<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
  <Title>Default Home Webpart</Title>
  <FrameType>None</FrameType>
  <Description>Use for formatted text, tables, and images.</Description>
  <IsIncluded>true</IsIncluded>
  <ZoneID>Left</ZoneID>
  <PartOrder>0</PartOrder>
  <FrameState>Normal</FrameState>
  <Height />
  <Width />
  <AllowRemove>true</AllowRemove>
  <AllowZoneChange>true</AllowZoneChange>
  <AllowMinimize>true</AllowMinimize>
  <AllowConnect>true</AllowConnect>
  <AllowEdit>true</AllowEdit>
  <AllowHide>true</AllowHide>
  <IsVisible>true</IsVisible>
  <DetailLink />
  <HelpLink />
  <HelpMode>Modeless</HelpMode>
  <Dir>Default</Dir>
  <PartImageSmall />
  <MissingAssembly>Cannot import this Web Part.</MissingAssembly>
  <PartImageLarge>/_layouts/images/mscontl.gif</PartImageLarge>
  <IsIncludedFilter />
  <Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
  <TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>
  <ContentLink xmlns="" />
  <Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor">
  <Value>&lt;div&gt;Create and view Project documents:&lt;/div&gt;
&lt;br/&gt;</Value></Content>
  <PartStorage xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
</WebPart>]]>
          </AllUsersWebPart>
        </WebParts>
      </View>

此视图定义在列表视图中包含名为“CI_Projects.aspx”的内容编辑器Webpart 请记住分配WebPartZoneId并分配与List定义中包含的默认视图不同的BaseViewID。

将使用此列表定义在您创建的每个列表上配置webpart。 (显然只在你定义的命名view.aspx上)。

答案 2 :(得分:1)

我想访问列表定义视图页面,我认为无法使用上述site.GetFile()方法访问该页面。您认为我们可以使用任何其他选项来实现它。我尝试了以下步骤:

  1. 复制OOB“ViewPage.aspx”并将其放在与“CustomViewPage.aspx”相同的文件夹中

  2. 创建自定义Web部件,使用您的自定义方法显示视图的项目。

  3. 创建一个功能以配置“CustomViewpage.aspx”以及自定义Web部件。

  4. 创建自定义列表定义。在所有视图的定义的schema.xml文件中,提到“SetupPath”以引用“CustomViewPage.aspx”。在此步骤中,列表定义中提到的所有视图将使用“CustomViewPage.aspx”来创建视图页面,以及创建列表后创建的所有视图将使用“customViewPage.aspx”作为基础用于创建视图页面的页面。

  5. 第1步:

    只需复制OOB“ViewPage.aspx”并将其放在C:\ Program Files \ Common Files \ Microsoft Shared \ web服务器extensions \ 12 \ TEMPLATE \ Pages文件夹中,作为“CustomViewPage.aspx”

    第2步:

    创建自定义Web部件,使用您的自定义方法显示视图的项目。基本上使用GetViewfromUrl(“Lists //”)方法获取视图,然后检索Web部件中的项目。自定义Web部件的代码段如下所示:

    SPList list = SPContext.Current.List;

    String strViewName =

    SPView view = SPContext.Current.Web.GetViewFromUrl(“Lists / list /”+ strViewName);

    SPListItemCollection listItems = list.GetItems(view);

    获取列表项后,然后执行显示项目的自定义方法。

    构建Web部件DLL并将其放在GAC中。

    第3步:

    创建一个功能以配置“CustomViewPage.aspx”以及自定义Web部件。通过激活此功能,“Customviewpage.aspx”将嵌入您的自定义Web部件。元素清单文件内容如下所示:

    <File Url="Pages/CustomViewPage.aspx" Type="Ghostable">
    
      <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1">
    
        <![CDATA[
    
                   <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
    
                        <Assembly>CustomWebpartforView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e3483ddc8b0d437a</Assembly>
    
                        <TypeName> CustomWebpartforView.MyCustomview</TypeName>
    
                        <FrameType>None</FrameType>
    
                                                <IsVisible>true</IsVisible>
    
                        <Title>Custom Web part for View</Title>                                 
    
                   </WebPart>
    
                   ]]>
    
      </AllUsersWebPart>
    
    </File>
    

    此步骤为我提供了源文件路径的错误,我通过在文件标记中提供Path属性来修改

    第4步:

    现在,基本自定义视图页面随Web部件一起提供。现在,如何将自定义视图页面与列表定义集成。创建自定义列表定义,并为架构中定义的所有视图提及“SetupPath”以使用“CustomViewPage.aspx”。现在,自定义视图页面将用作列表定义中定义的所有视图的基本视图页面,以及稍后创建的视图也将使用“CustomViewpage.aspx”作为基页。用于声明schema.xml内部视图的示例代码段如下:

    安装并激活自定义列表定义的功能。

    现在通过所有这些步骤,当您基于此自定义列表定义创建列表时,创建的所有视图将使用“CustomViewPage.aspx”来创建视图页面,并且将呈现您的自定义Web部件而不是OOB dataformwebpart。在创建List(通过UI,通过对象模型)之后创建的视图也将使用“CustomViewpage.aspx”作为基页来创建视图页面。

    由于某些原因,我仍然无法使用自定义webpart查看CustomViewPage.aspx。我错过了某些内容,或者本文中缺少某些内容。