使用 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
}
根据我在查询有效的日历视图时所见,似乎与开始日期和结束日期有关的唯一属性是 ListViewXml
和 HtmlSchemaXml
,但是这些都没有明确说明哪些字段用于视图中的开始和结束日期。
正确 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
}
}
以上注意事项-
RowLimit
设置为零 - 这是为了确保正确获取当前 month/week/day 的所有项目。
StartDate
映射到 ViewFields
中的第 0 个条目
EndDate
映射到 ViewFields
中的第一个条目
ViewData
有 5 个 FieldRef
条目 - 1 个用于月视图,2 个用于周视图和日视图。这些字段用作各个可视化的 'Title'。 如果缺少此项,您将看到 'fix' 日历视图的弹出窗口。
CalendarViewStyles
有 3 个 CalendarViewStyle
条目 - 将来会用到。即使缺少这个,视图创建也会成功。
ViewType2
是 MODERNCALENDAR
ViewTypeKind
是 1
- 映射到 HTML.
Query
可根据需要设置。
如果您有任何问题,请告诉我。
我一直在尝试通过 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
}
根据我在查询有效的日历视图时所见,似乎与开始日期和结束日期有关的唯一属性是 ListViewXml
和 HtmlSchemaXml
,但是这些都没有明确说明哪些字段用于视图中的开始和结束日期。
正确 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
}
}
以上注意事项-
RowLimit
设置为零 - 这是为了确保正确获取当前 month/week/day 的所有项目。StartDate
映射到ViewFields
中的第 0 个条目
EndDate
映射到ViewFields
中的第一个条目
ViewData
有 5 个FieldRef
条目 - 1 个用于月视图,2 个用于周视图和日视图。这些字段用作各个可视化的 'Title'。 如果缺少此项,您将看到 'fix' 日历视图的弹出窗口。CalendarViewStyles
有 3 个CalendarViewStyle
条目 - 将来会用到。即使缺少这个,视图创建也会成功。ViewType2
是MODERNCALENDAR
ViewTypeKind
是1
- 映射到 HTML.Query
可根据需要设置。
如果您有任何问题,请告诉我。