【问题标题】:In SharePoint, what is the easiest way to create a custom list 'schema.xml' file?在 SharePoint 中,创建自定义列表“schema.xml”文件的最简单方法是什么?
【发布时间】:2009-01-13 23:10:21
【问题描述】:

与许多其他 SharePoint 用户一样,我必须创建自定义列表定义。经过很多麻烦,我设法创建了一个(我想,让我先解决所有错误),但是我可以从那里开始使用“基本”模式,或者为Schema.xml 一代专门构建的编辑器?

【问题讨论】:

    标签: sharepoint list sharepoint-2007 wss-3.0


    【解决方案1】:

    为了创建自定义列表定义,我总是使用一些内置列表定义作为模板。
    创建新功能,然后从现有功能复制 schema.xml(可能还有其他文件,如果存在),并使用一些文本编辑器直接修改 schema.xml 文件。我没有为此尝试过任何自定义编辑器,并且总是通过复制粘贴和更改属性值来完成工作。

    内置列表定义位于 12 个配置单元中作为功能:

    • 自定义列表 - Features/CustomList/CustList/schema.xml;
    • 文档库 - Features/DocumentLibrary/DocLib/schema.xml;
    • 日历 – Feature/EventsList/Events/schema.xml;
    • 使用搜索查找其他人。

    【讨论】:

      【解决方案2】:

      我的建议以及最接近最终版本的方法是使用 SharePoint Web 界面,根据需要设置列表,包括视图、自定义列等。然后,将列表另存为模板。

      您获得的 .stp 文件基本上只是一个具有有趣名称的 .cab 文件。重命名为 cab 并提取清单,其中将包含一个几乎可以使用的 schema.xml 文件供您使用。

      您需要更改的是列表表单的路径或设置路径。您将在 manifest.xml 文件的底部找到这些。如果您使用默认的 SharePoint 列表,这些表单可以设置为 SetupPath="pages/form.aspx"。以下是自定义列表表单元素的示例:

          <Form Type="DisplayForm" Url="DispForm.aspx" 
      SetupPath="pages\form.aspx" WebPartZoneID="Main" />
          <Form Type="EditForm" Url="EditForm.aspx" 
      SetupPath="pages\form.aspx" WebPartZoneID="Main" />
          <Form Type="NewForm" Url="NewForm.aspx" 
      SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      

      您还需要更新每个视图的视图路径,如果在原始站点中使用默认表单,则应该是 SetupPath="pages/viewpage.aspx"。

      请注意,您还需要修改其他属性,但如果您确保遵循 wss.xsd 架构并且您的自定义列表 schema.xml 验证到 wss.xsd 架构,您应该没问题。

      .b

      【讨论】:

        【解决方案3】:

        Windows SharePoint Services 3.0 Tools: Visual Studio 2008 Extensions, Version 1.2 附带了一个名为“SharePoint Solution Generator 2008”的应用程序。此应用程序有一些限制(最糟糕的是 IMO that lookup columns disappear),但它会创建您需要创建的文件,即现有 SharePoint 列表中的一项功能。这包括 schema.xml。

        【讨论】:

          【解决方案4】:

          我总是使用 Gary Lapointes STSADM 扩展来提取这类内容。也就是说,我首先使用 GUI 创建它,然后使用适当的方法提取列表、内容类型、网站栏等。

          STSADM/PowerShell Commands 中查看 Garys 的扩展列表。

          【讨论】:

            【解决方案5】:

            您可以使用SharePoint manager 选择您想要架构的列表并将其用作模板。

            任何架构生成都将依赖于上下文,因为任何自定义字段的 GUID 将特定于该 SharePoint 网站集,除非它们是作为先前指定功能的一部分安装的(依赖于已创建的 XML 架构)。

            SharePoint 管理器是一个很好的工具,不是因为它专门针对这个问题,而是因为它是一种非常从 SharePoint 实例中获取各种信息(如架构)的有用方法.

            【讨论】:

              【解决方案6】:

              我自己和 Rich Finn 编写了一个名为 SPSource 的工具,它可以对列表进行逆向工程以列出模板、内容类型和站点列。请在http://spsource.codeplex.com/查看它,那里有详细的用户指南和网络广播向您展示如何使用它。

              【讨论】:

                【解决方案7】:

                您通常复制的所有 schema.xml 文件的一个大问题是 90% 的代码位于各种视图元素中。有一个非常简单的解决方案 - 使用默认的 ViewStyles 之一。

                这是一个简单易读的简约架构。阅读http://mo.notono.us/2009/02/moss-dreaded-schemaxml.html了解详情。 除非你真的、真的需要调整渲染的 html,否则不要打扰视图 caml:

                <?xml version="1.0" encoding="utf-8"?>
                <List xmlns:ows="Microsoft SharePoint" Id="{AB426CDE-98F2-432A-B296-880C7931DEF3}"
                     Title="Setting" Url="Lists/Setting" BaseType="0"
                     FolderCreation="FALSE" DisableAttachments="TRUE" VersioningEnabled="FALSE"
                     Direction="$Resources:Direction;"
                     xmlns="http://schemas.microsoft.com/sharepoint/">
                       <MetaData>
                              <Fields>
                                     <Field Type="Text" Name="Title" DisplayName="Name" Required="TRUE" />
                                     <Field Type="Text" Name="Value" DisplayName="Value" Required="TRUE" />
                              </Fields>
                              <Views>
                                     <View BaseViewID="0" Type="HTML" WebPartZoneID="Main" DisplayName="All Items" DefaultView="TRUE"
                                         MobileView="True" MobileDefaultView="False" SetupPath="pages\viewpage.aspx"
                                         ImageUrl="/_layouts/images/issues.png" Url="AllItems.aspx">
                                           <ViewStyle ID="17"/>
                                           <RowLimit Paged="TRUE">100</RowLimit>
                                           <Toolbar Type="Standard" />
                                           <ViewFields>
                                                  <FieldRef Name="Edit" />
                                                  <FieldRef Name="Title"/>
                                                  <FieldRef Name="Value"/>
                                           </ViewFields>
                                           <Query>
                                                  <OrderBy>
                                                         <FieldRef Name="Title"/>
                                                  </OrderBy>
                                           </Query>
                                     </View>
                              </Views>
                              <Forms>
                                     <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
                                     <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
                                     <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
                              </Forms>
                              <DefaultDescription>Settings used in the application.</DefaultDescription>
                       </MetaData>
                </List>
                

                【讨论】:

                  【解决方案8】:

                  添加到 EG 的答案中,如果您只想更改附加到现有列表的字段(但保留视图等基本相同),您必须在两个地方进行更改:List/MetaData/字段和列表/元数据/视图/视图/视图字段。

                  字段部分相对简单,假设您关注the documentation

                  要让列显示在给定视图中,您必须编辑给定视图的 ViewFields 部分。例如,如果您希望在视图中显示名为 Title、Author 和 Publisher 的列,请找到该视图的 ViewFields 部分并按如下方式进行编辑:

                  <ViewFields>
                    <FieldRef Name="Title" />
                    <FieldRef Name="Author" />
                    <FieldRef Name="Publisher" />
                  </ViewFields>
                  

                  这些字段(并且只有那些字段)随后应显示在该视图中。

                  【讨论】:

                    【解决方案9】:

                    使用浏览器选项创建要在本地开发环境中开发的列表。将网站另存为模板。将其下载到本地文件系统。

                    现在使用模板创建一个新的 Visual Studio 项目,从解决方案包中导入。找到存储在文件系统上的解决方案包。现在,当您看到解决方案时,您将找到您创建的列表。文件schema.XML 将位于列表定义中。复制内容类型、字段和视图内容并将其粘贴到您的 schema.xml 文件中。

                    【讨论】:

                      猜你喜欢
                      • 2014-01-28
                      • 2011-02-10
                      • 1970-01-01
                      • 2011-10-10
                      • 2012-03-23
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多