【问题标题】:Create Modern Calendar view for SharePoint Online List using the REST API使用 REST API 为 SharePoint Online 列表创建新式日历视图
【发布时间】:2021-07-20 02:37:55
【问题描述】:

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

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

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

我的查询正文是:

{ '__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 调用使用的开始和结束日期?

【问题讨论】:

    标签: sharepoint-online power-automate sharepoint-rest-api


    【解决方案1】:

    试试下面的 -

    {
        "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 设置为零 - 这是为了确保正确获取当前月/周/日的所有项目。
    2. StartDate 映射到 ViewFields 中的第 0 个条目
    3. EndDate 映射到 ViewFields 中的第一个条目
    4. ViewData 有 5 个 FieldRef 条目 - 1 个用于月视图,2 个用于周视图和日视图。这些字段用作相应可视化的“标题”。 如果缺少此项,您将看到“修复”日历视图的弹出窗口。
    5. CalendarViewStyles 有 3 个 CalendarViewStyle 条目 - 将来会使用。即使缺少此项,视图创建也会成功。
    6. ViewType2MODERNCALENDAR
    7. ViewTypeKind1 - 映射到 HTML。
    8. Query 可以根据需要设置。

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

    【讨论】:

    • 我真的很晚才回到这个问题,当时我最终用 PowerShell 做了一个完整的解决方法,但只是尝试了这个,它就像一个魅力!太感谢了!你能给我指点这方面的任何文件吗?我在搜索中找不到与现代日历视图有关的任何内容。
    猜你喜欢
    • 2020-12-27
    • 2018-05-12
    • 2018-05-25
    • 2022-11-10
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2016-01-08
    • 2019-06-06
    相关资源
    最近更新 更多