65.9K
CodeProject 正在变化。 阅读更多。
Home

隐藏今日未发生的日历重复事件

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016年3月22日

CPOL

1分钟阅读

viewsIcon

7270

隐藏当前日期/当天未发生的日历重复事件

引言

客户希望隐藏对当前日期不相关的日历重复事件。日历视图没有筛选重复日期的选项。

背景

日历视图在“所有事件”视图中显示所有事件,即使这些事件对当前日期无效。客户不希望向用户显示对今天(当前日期)不相关的事件。以下代码将帮助从日历视图中隐藏不需要的事件。

Using the Code

可以在当前视图的内容编辑器 Web 部件中使用 jQuery 代码块。此代码将首先使用 SPServices 和 CAML 查询检索所有重复事件,可以根据需要修改 CAML 查询。需要 RecurrenceData 的值来检查事件日期,HideTableRow 函数将决定是否隐藏当前事件。

RecurrenceData 字段的值如下所示

<recurrence>
  <rule>
    <firstDayOfWeek>su</firstDayOfWeek>
    <repeat><weekly mo="TRUE" tu="TRUE" 
    weekFrequency="1" /></repeat>
    <repeatInstances>100</repeatInstances>
  </rule>
</recurrence>

HideTableRow 方法将决定是否从视图中隐藏当前事件,以下 jQuery 行将根据 用户名目的 字段的值隐藏事件。任何包含这些值的行都将从视图中隐藏。可以根据需求更改此筛选器。

 $('div#WebPartWPQ2 table.ms-listviewtable tr:(:contains("' + name + '") 
&& contains("' + purpose + '"))').hide(); 

以下是隐藏事件的完整代码

//
<script src="jquery.min.js" type="text/javascript"></script>
<script src="jquery.SPServices.min.js" type="text/javascript"></script>

$(document).ready(function(){
    $().SPServices({
        operation: "GetListItems",
        async: false,
        listName: "Calender",
        CAMLViewFields: "<ViewFields><FieldRef Name='Name' />
        <FieldRef Name='fRecurrence' /><FieldRef Name='RecurrenceData' />
        <FieldRef Name='Purpose' /></ViewFields>",
        CAMLQuery: "<Query><Where><Eq><FieldRef Name='fRecurrence' 
        Explicit='TRUE'/><Value Type='Recurrence'>1
        </Value></Eq></Where></Query>",
        completefunc: function (xData, Status){
            $(xData.responseXML).SPFilterNode("z:row").each(function(){
                var xml = $(this).attr("ows_RecurrenceData");
                var name = $(this).attr("ows_Name");
                var purpose = $(this).attr("ows_Purpose");
                var result = HideTableRow(xml);
                if(result==true){
                    name = name.split('#')[1];
                    $('div#WebPartWPQ2 table.ms-listviewtable tr:(:contains
                    ("' + name + '") && contains("' + purpose + '"))').hide();
                }
            });
        }
    });
});

function HideTableRow(xmlData)
{
    var today=new Date();var thisDay=today.getDay();var hideRow=false;
    $(xmlData).find('weekly').each(function() {
        $.each(this.attributes, function(i, attrib){
            var day = attrib.name;var value = attrib.value;
            if(day.length==2){
                if(!((thisDay==1 && day=="mo")||(thisDay==2 && 
                day=="tu")||(thisDay==3 && day=="we")||
                (thisDay==4 && day=="th")||(thisDay==5 && day=="fr"))){
                    hideRow=true;
                }
                else{hideRow=false;return false;}
            }
        });
    });
    return hideRow
}
//

关注点

我发现使用 jQuery 隐藏表格行很容易,可以在不编写复杂逻辑的情况下隐藏该行。:)

历史

  • 2016年3月22日:初始版本
© . All rights reserved.