如何通过代码在线开发Sharepoint中的列表

时间:2019-01-29 17:30:51

标签: sharepoint-online sharepoint-list spfx

我们想在开发人员站点上的租户中创建列表。我们希望在开发人员站点中进行开发,而不是使用软件包(也许是sppkg)在客户端进行部署。

我们尝试使用Sharepoint加载项在Visual Studio 2017中创建列表,并通过使用SPFX框架在Visual Studio代码中创建列表,以及基于Microsoft spfx文档链接-https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/get-started/provision-sp-assets-from-package的教程。

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   <Field ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}"
       Name="SPFxAmount"
       DisplayName="Amount"
       Type="Currency"
       Decimals="2"
       Min="0"
       Required="FALSE"
       Group="SPFx Columns" />

   <Field ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}"
       Name="SPFxCostCenter"
       DisplayName="Cost Center"
       Type="Choice"
       Required="FALSE"
       Group="SPFx Columns">
   <CHOICES>
   <CHOICE>Administration</CHOICE>
   <CHOICE>Information</CHOICE>
   <CHOICE>Facilities</CHOICE>
   <CHOICE>Operations</CHOICE>
   <CHOICE>Sales</CHOICE>
   <CHOICE>Marketing</CHOICE>
   </CHOICES>
   </Field>

   <ContentType ID="0x010042D0C1C200A14B6887742B6344675C8B" 
       Name="Cost Center" 
       Group="SPFx Content Types" 
       Description="Sample content types from web part solution">
   <FieldRefs>
       <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" /> 
       <FieldRef ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}" />
   </FieldRefs>
   </ContentType> 

 <ListInstance 
       CustomSchema="schema.xml"
       FeatureId="00bfea71-de22-43b2-a848-c05709900100"
       Title="SPFx List" 
       Description="SPFx List"
       TemplateType="100"
       Url="Lists/SPFxList">
   </ListInstance>

</Elements>

使用SPFX,我们创建了webpart,并且在代码中,我们在elemnts.xml和schema.xml中创建了2个列表。比我们在某些内容类型ID上存在问题。因此,我们的问题是通过代码创建列表。谁能给我们建议来制定这些列表的最佳选择是什么?

这两个简单的列表

员工名称,确定名称 假期-员工,numberOfDays

2 个答案:

答案 0 :(得分:0)

不幸的是,XML的文档很难找到。这是到目前为止我使用SPFx所学到的内容的概述:

字段

让我们从创建一些字段开始。如果要创建SharePoint列表,则字段将代表列表的。字段的基本轮廓如下(请注意,#1至#5仅供参考,并且 不应包含在任何最终代码中)

<Field
1   ID="{DAFF97CE-C27D-4D27-9863-4422526CC395}" 
2   Name="EmployeeName" 
3   DisplayName="Name" 
4   Description="Column for the employee's first name." 
5   Type="Text" 
/>
    字段的
  1. ID: GUID( G 局部 U nique ID 标识符)。您需要生成一个。使用在线生成器,例如this one-确保它为大写字母,连字符和大括号 (reference) 。如果您正在使用Visual Studio,则它具有内置的生成器。

  2. 名称:字段的内部名称。这是“在幕后”存在的名称。如果您通过编程方式与Field互动,那么您将使用该名称。

  3. DisplayName::字段的显示名称。这是SharePoint中显示的名称。通常仅用于演示目的。

  4. 描述:字段的文本描述。有助于记住字段的用途,但不重要。

  5. 类型:这是重要的。它定义了您将创建哪种列。在SharePoint Web界面中创建列时,您可能已经看到,有很多不同的类型,例如“单行文本”,“日期和时间”,“人或组”,“计算所得”等。类型属性直接映射到这些允许的选择。

类型

困难的部分是弄清 Type 的允许值是多少。值得庆幸的是,这些文件已记录在in the Field element specification中。向下滚动到“类型”行。

根据选择的类型检查文档中是否还有其他必需或可选属性。例如,对于 Number 类型,您可以具有其他属性 Decimals Min Max 。在下面,我们可以指定“天数”,您只能选择一个整数,不能少于1天,并且不能超过30天。

<Field
    ID="{B34A7173-5AB7-4ABC-812B-EF8D0386498F}" 
    Name="NumberOfDays" 
    DisplayName="Number of Days" 
    Description="The number of days employee will take off." 
    Type="Number" 
    Decimals="0"
    Min="1"
    Max="30"
/>

列表字段与网站字段

创建字段后,您可以选择进行以下操作:Should these fields be List Columns or Site Columns?

  • schema.xml中输入的字段将成为“列表列”;换句话说,仅限于该列表。
  • elements.xml中输入的字段将成为“站点列”。

请记住这一选择,并保留您创建的字段定义。我们将回到他们身边。

列表

现在让我们创建一个列表模式。您将不必(也不必)从头开始创建此东西-查看下面的样板并将其复制并粘贴到您的解决方案中(同样,左侧的数字仅供参考):

<List xmlns:ows="Microsoft SharePoint" 
1   BaseType="0" 
    Direction="$Resources:Direction;" 
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <MetaData>
        <ContentTypes />
2       <Fields></Fields>
        <Views>
            <View BaseViewID="1" 
                Type="HTML" 
                WebPartZoneID="Main" 
                DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" 
                DefaultView="TRUE" 
                MobileView="TRUE" 
                MobileDefaultView="TRUE" 
                SetupPath="pages\viewpage.aspx" 
                ImageUrl="/_layouts/images/dlicon.png" 
                Url="AllItems.aspx">
                <XslLink Default="TRUE">main.xsl</XslLink>
                <JSLink>clienttemplates.js</JSLink>
                <RowLimit Paged="TRUE">30</RowLimit>
                <Toolbar Type="Standard" />
3               <ViewFields>
                    <FieldRef Name="<FIELD_1>" />
                    <FieldRef Name="<FIELD_2>" />
                    <FieldRef Name="<FIELD_3>" />
                </ViewFields>
                <Query>
                    <OrderBy>
                        <FieldRef Name="ID" />
                    </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>
    </MetaData>
</List>
  1. BaseType::这表示您要创建的列表的类型。 See this documentation for the allowed values.通用列表(如果在SharePoint Web界面中单击“添加自定义列表”或“创建列表”,则将创建的类型)将为0,并且可能是最常见的类型。另一个常见的选择是文档库,它是1。

  2. 字段::如果您选择将字段创建为列表列,则可以在其中粘贴字段定义。创建列表后,将在列表中自动创建在此处添加的字段定义。 (如果要使用“网站栏”,请按原样保留Fields,并保存字段定义以备后用。)

        <!-- ... -->
        <ContentTypes />
        <Fields>
            <Field
                ID="{DAFF97CE-C27D-4D27-9863-4422526CC395}" 
                Name="EmployeeName" 
                DisplayName="Name" 
                Description="Column for the employee's first name." 
                Type="Text" 
            />
            <Field
                ID="{AA4D083E-1B32-4AF5-B572-DA06B3996A94}" 
                Name="EmployeeSurname" 
                DisplayName="Surname" 
                Description="Column for the employee's surname." 
                Type="Text" 
            />
        </Fields>
        <Views>
        <!-- ... -->
  1. ViewFields::ViewFields定义了在与其关联的View中可见的列。 (使用Views玩是另一篇文章的高级主题。)目前,请确保为添加到列表中的每个Field拥有一个FieldRef。确保指定每个字段的内部名称。 (无论您是要使用“列表列”还是“网站列”,都始终这样做。)
                <!-- ... -->
                <Toolbar Type="Standard" />
                <ViewFields>
                    <FieldRef Name="EmployeeName" />
                    <FieldRef Name="EmployeeSurname" />
                </ViewFields>
                <Query>
                <!-- ... -->

现在您有了一个列表架构,该架构定义了您需要了解的有关列表的所有信息。

注意:如果需要多个不同的列表,则必须创建多个列表架构文件。只需复制并粘贴样板模式,然后以与上述相同的方式添加修改。

元素

最后,让我们将所有内容捆绑在一起。 elements.xml是您将要配置的每个项目告知SPFx的地方。

要创建列表,您需要一个ListInstance元素。 Here is the documentation.下面是一个elements.xml文件的示例(再次,左边的数字仅供参考):

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

    <ListInstance
1       CustomSchema="schema-employees.xml" 
2       Description="List for employee name and surname." 
3       FeatureId="00bfea71-de22-43b2-a848-c05709900100" 
4       TemplateType="100" 
5       Title="Employee Names" 
6       Url="Lists/EmployeeNames"
    />

</Elements>
  1. CustomSchema:我们之前处理过的List Schema文件的名称。在这种情况下,我将其称为schema-employees.xml-您可以随意命名,只要确保名称匹配即可。

  2. 描述:列表的文本描述。不太重要。

  3. FeatureId:回想一下,在列表模式的前面,我们决定要使用BaseType="0"创建自定义列表。自定义列表具有相应的功能ID,该功能ID 必须匹配创建的列表类型。 See here for a list of feature IDs.找到CustomList的功能名称以再次检查功能ID是否相同。如果要提供其他类型的列表,例如文档库,则必须来到这里找到相应的FeatureId

  4. 模板类型:这是必须匹配创建的列表类型的另一部分。 See here for a list of template types.在这种情况下,看到GenericList映射到TemplateType中的100。文档库将是101,等等。

  5. 标题::列表的可见标题,将显示在网站的“网站内容”中。不太重要。

  6. 网址::这规定了可在其中找到此列表的Web URL。通常,您在使用SharePoint Web界面创建列表时可能已经注意到,自定义列表位于/sites/YOUR_SITE/Lists/下。上面的示例遵循此约定,但是您也可以将URL设置为其他值。

这就是ListInstance的全部。另外,如果您决定将您的字段实现为站点列,则elements.xml是粘贴字段定义的位置。只需确保将Field粘贴在ListInstance之前,否则SharePoint将不知道您所指的字段(尚未创建!)。

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

    <Field
        ID="{DAFF97CE-C27D-4D27-9863-4422526CC395}" 
        Name="EmployeeName" 
        DisplayName="Name" 
        Description="Column for the employee's first name." 
        Type="Text" 
    />

    <Field
        ID="{AA4D083E-1B32-4AF5-B572-DA06B3996A94}" 
        Name="EmployeeSurname" 
        DisplayName="Surname" 
        Description="Column for the employee's surname." 
        Type="Text" 
    />

    <ListInstance
        CustomSchema="schema-employees.xml" 
        Description="List for employee name and surname." 
        FeatureId="00bfea71-de22-43b2-a848-c05709900100" 
        TemplateType="100" 
        Title="Employee Names" 
        Url="Lists/EmployeeNames"
    />

</Elements>

已经指定了elements.xml,我们已经为要创建的列表成功创建了XML定义!

最后说明

不要忘记,为了使SPFx知道schema-employees.xmlelements.xml,您必须将它们作为功能定义的一部分包括在package-solution.json中。 the tutorial linked in the original question中已解决了此问题,但无论如何我都想记下来。

答案 1 :(得分:0)

非常感谢您提供完美的信息,这是我们正在寻找的! 您建议在VS(或其他IDE)中复制和粘贴列表定义。我想问一下您是否可以通过某种方式设计人员,查找,计算和另一个“高级”列的列表,并下载XML模式定义以复制并粘贴到VS中,因为我最终需要将解决方案打包到sppkg吗?这是因为我发现这种方法比VS中的所有代码都快得多。 谢谢。