sharepoint 日历 列表项 查询

我想在sharepoint中,利用日历实现设备预约这样一个功能。但是,日历中显示的内容中不能很明确的显示出某一设备的全部预定情况。于是我们采用了fullCalendar替代sharepoint的日历。我用jstree展示设备以及设备种类分组,当选择某一设备的时候,fullCalendar中显示该设备的预约情况。并且这些动作都只能用JS实现。原以为很简单的一件事,但是由于刚接触这东西,过程中遇到了很多问题。虽然不知道深层原因,但是总结一下,免得以后忘掉。

1.我用SP.CamlQuery查询数据,无法查询到重复列表项,因为它是一一条记录的形式存在的,例如:预约二月份每周一试用会议室A,那我只能得到一条记录。而不是四条记录。我开始是下面这种方法查询的。

            var clientContext = new SP.ClientContext(siteUrl);

            var oWebsite = clientContext.get_web();            

            var list2 = clientContext.get_web().getList(setubiUrl);

            var camlQuery2 = new SP.CamlQuery();

            camlQuery2.set_viewXml('<View><Query><Where></Where></Query></View>');

            var List2Items = list2.getItems(camlQuery2);

            clientContext.load(List2Items);

            clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);

逛了很多论坛帖子,总结大多数解决办法都是用SPServices的GetListItems,就可以解决这个问题。这个方法的说明可以百度。

这个方法的关键之处就是红字的那个条件,我也尝试在上面那种查询方式中追加这个条件,当时还是失败了,原因不明。

jQuery().SPServices({
    operation: "GetListItems",
    webURL: 地址,
    listName: 是列表名称不是地址中list/后边的那个id,
    async: false,
    CAMLQuery: '<Query>' +
         '<CalendarDate>' + strDate.toDateString() + '</CalendarDate>' +
         '<Where>' +
          '<DateRangesOverlap>' +
           '<FieldRef Name="EventDate" />' +
           '<FieldRef Name="EndDate" />' +
           '<FieldRef Name="RecurrenceID" />' +
           '<Value Type="DateTime">' +
             viewtype +
           '</Value>' +
          '</DateRangesOverlap>' +
         '</Where>' +
         '<OrderBy>' +
          '<FieldRef Name="EventDate" />' +
         '</OrderBy>' +
        '</Query>',
    CAMLQueryOptions: '<QueryOptions>' +
           '<CalendarDate>' + strDate.toDateString() + '</CalendarDate>' +
           '<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>' +
           '<ExpandRecurrence>TRUE</ExpandRecurrence>' +
           '</QueryOptions>',
    completefunc: function (xData, Status) {
     var tmpEvent;
     if (Status == 'success') {
      tmpEvent = jQuery(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({
       mapping: {},
       includeAllAttrs: true,
       removeOws: true,
       sparse: false
      });
     }

    });

2. 日历里追加重复列表项数据我是找到了,但是我又有了新的问题,我发现我查询出的数据中字段数不够,没有查询出我想要的字段。后来我查到一个帖子,说是需要指定一个参数ViewName,设置的参数是,你这个日历列表的一个视图,你设置的视图里有几个哪个字段,这块就能查询出哪个字段,其他筛选条件什么的,是没有影响的。问题解决。

 jQuery().SPServices({
    operation: "GetListItems",
    webURL: 地址,
    listName: 是列表名称不是地址中list/后边的那个id,
    ViewName: 视图名,
    async: false,
    CAMLQuery:

3.我想要用上面的2取解决这个问题,我必须定义一个我想要的视图,但是我客户不同意。客户说,他们的数据量大,不同意我做一个视图。其实是我只是想不让它用日历的默认视图而已,但是客户不同意,我也没办法。于是我又想另外一个办法,不指定视图,在CAMLQuery里把想要的字段都列出来。结果还是跟开始一样。我抱着试试看的态度,想一下那样指定查询字段。完全是蒙的,居然好用了。

   jQuery().SPServices({
    operation: "GetListItems",
    webURL: spweb_relativeUrl,
    listName: yoteihyoName,
    async: false,
    CAMLViewFields:'<ViewFields>' +
         '<FieldRef Name="ID" />' +
         '<FieldRef Name="EventDate" />' +
         '<FieldRef Name="EndDate" />' +
         '<FieldRef Name="fRecurrence" />' +
         '<FieldRef Name="Title" />' +
         '<FieldRef Name="Description" />' +
         '<FieldRef Name="Category" />' +
         '<FieldRef Name="Location" />' +
         '<FieldRef Name="Facilities"/>' +
        '</ViewFields>' ,

转载于:https://www.cnblogs.com/zhuzi920/p/6550038.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值