如何解决使用 REST API 为 SharePoint Online 列表创建新式日历视图
我一直在尝试通过 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
}
从我查询有效的日历视图时所看到的情况来看,似乎与开始日期和结束日期有关的唯一属性是 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
设置为零 - 这是为了确保正确获取当前月/周/日的所有项目。 -
StartDate
映射到ViewFields
中的第 0 个条目
-
EndDate
映射到ViewFields
中的第一个条目 -
ViewData
有 5 个FieldRef
条目 - 1 个用于月视图,2 个用于周视图和日视图。这些字段用作各个可视化的“标题”。 如果缺少此项,您将看到“修复”日历视图的弹出窗口。 -
CalendarViewStyles
有 3 个CalendarViewStyle
条目 - 将来会使用。即使缺少此项,视图创建也会成功。 -
ViewType2
是MODERNCALENDAR
-
ViewTypeKind
是1
- 映射到 HTML。 -
Query
可以根据需要设置。
如果您有任何问题,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。