使用 REST API 为 SharePoint Online 列表创建新式日历视图

Create Modern Calendar view for SharePoint Online List using the REST API

我一直在尝试通过 Power Automate 使用 REST API 在 SharePoint 中创建现代日历列表。

使用 UI 时,我看到的唯一方法是首先创建一个现代列表,添加开始和结束日期字段,然后使用这些字段创建现代日历视图。 (为了我的目的,我只需要标题、开始日期和结束日期。)

通过 REST API 按照相同的过程,我能够很好地创建列表和字段。
但是,似乎没有任何关于指定开始和结束日期字段的文档现代日历视图,所以当第一次打开视图时,它会给出这个讨厌的弹出窗口,告诉用户 select 视图将使用的标题、开始和结束日期: Calendar View first opening popup

我查询的body是:

{ '__metadata': { 'type': 'SP.View'},
'ViewType': 'HTML',
'ViewType2':'MODERNCALENDAR', 
'Title': 'Calendar',
'DefaultView': true
}

根据我在查询有效的日历视图时所见,似乎与开始日期和结束日期有关的唯一属性是 ListViewXmlHtmlSchemaXml,但是这些都没有明确说明哪些字段用于视图中的开始和结束日期。
正确 ListViewXML 示例:

<View Name=\"{F0105F06-6621-44AD-9E25-F3D0928D3048}\" Type=\"HTML\" DisplayName=\"Calendar\" Url=\"/sites/Test-1/Lists/Calendar/Calendar.aspx\" Level=\"1\" BaseViewID=\"1\" ContentTypeID=\"0x\" ImageUrl=\"/_layouts/15/images/generic.png?rev=47\" ><Query /><ViewFields><FieldRef Name=\"Start_x0020_Date\" /><FieldRef Name=\"End_x0020_Date\" /><FieldRef Name=\"LinkTitle\" /></ViewFields><RowLimit Paged=\"FALSE\">30</RowLimit><JSLink>clienttemplates.js</JSLink><XslLink Default=\"TRUE\">main.xsl</XslLink><ViewType2>MODERNCALENDAR</ViewType2><ViewData><FieldRef Name=\"LinkTitle\" Type=\"CalendarMonthTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarWeekTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarWeekLocation\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarDayTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarDayLocation\" /></ViewData><Toolbar Type=\"Standard\"/></View>

正确 HtmlSchemaXml 示例:

<View Name=\"{F0105F06-6621-44AD-9E25-F3D0928D3048}\" Type=\"HTML\" DisplayName=\"Calendar\" Url=\"/sites/Test-1/Lists/Calendar/Calendar.aspx\" Level=\"1\" BaseViewID=\"1\" ContentTypeID=\"0x\" ImageUrl=\"/_layouts/15/images/generic.png?rev=47\"><Query /><ViewFields><FieldRef Name=\"Start_x0020_Date\" /><FieldRef Name=\"End_x0020_Date\" /><FieldRef Name=\"LinkTitle\" /></ViewFields><RowLimit Paged=\"FALSE\">30</RowLimit><ViewType2>MODERNCALENDAR</ViewType2><Toolbar Type=\"Standard\" /><ViewData><FieldRef Name=\"LinkTitle\" Type=\"CalendarMonthTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarWeekTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarWeekLocation\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarDayTitle\" /><FieldRef Name=\"LinkTitle\" Type=\"CalendarDayLocation\" /></ViewData><XslLink Default=\"TRUE\">main.xsl</XslLink><JSLink>clienttemplates.js</JSLink><ParameterBindings><ParameterBinding Name=\"NoAnnouncements\" Location=\"Resource(wss,noXinviewofY_LIST)\" /><ParameterBinding Name=\"NoAnnouncementsHowTo\" Location=\"Resource(wss,noXinviewofY_DEFAULT)\" /></ParameterBindings></View>

我的问题是,有没有更好的方法来做我想做的事情,或者有没有办法指定日历视图将通过 REST API 调用使用的开始和结束日期?

尝试以下 -

{
    "parameters": {
        "__metadata": {
            "type": "SP.ViewCreationInformation"
        },
        "Title": "CalendarViewTitle",
        "ViewFields": {
            "__metadata": {
                "type": "Collection(Edm.String)"
            },
            "results": [
                "StartDate",
                "EndDate",
                "Title"
            ]
        },
        "ViewTypeKind": 1,
        "ViewType2": "MODERNCALENDAR",
        "ViewData": "<FieldRef Name=\"Title\" Type=\"CalendarMonthTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarWeekTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarWeekLocation\" /><FieldRef Name=\"Title\" Type=\"CalendarDayTitle\" /><FieldRef Name=\"Title\" Type=\"CalendarDayLocation\" />",
        "CalendarViewStyles": "<CalendarViewStyle Title=\"Day\" Type=\"day\" Template=\"CalendarViewdayChrome\" Sequence=\"1\" Default=\"FALSE\" /><CalendarViewStyle Title=\"Week\" Type=\"week\" Template=\"CalendarViewweekChrome\" Sequence=\"2\" Default=\"FALSE\" /><CalendarViewStyle Title=\"Month\" Type=\"month\" Template=\"CalendarViewmonthChrome\" Sequence=\"3\" Default=\"TRUE\" />",
        "Query": "",
        "Paged": true,
        "PersonalView": false,
        "RowLimit": 0
    }
}

以上注意事项-

  1. RowLimit 设置为零 - 这是为了确保正确获取当前 month/week/day 的所有项目。
  2. StartDate 映射到 ViewFields
  3. 中的第 0 个条目
  4. EndDate 映射到 ViewFields
  5. 中的第一个条目
  6. ViewData 有 5 个 FieldRef 条目 - 1 个用于月视图,2 个用于周视图和日视图。这些字段用作各个可视化的 'Title'。 如果缺少此项,您将看到 'fix' 日历视图的弹出窗口。
  7. CalendarViewStyles 有 3 个 CalendarViewStyle 条目 - 将来会用到。即使缺少这个,视图创建也会成功。
  8. ViewType2MODERNCALENDAR
  9. ViewTypeKind1 - 映射到 HTML.
  10. Query可根据需要设置。

如果您有任何问题,请告诉我。