设为首页 收藏本站
查看: 712|回复: 0

[经验分享] SharePoint Event Calendar Recurrence Event

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-25 10:24:04 | 显示全部楼层 |阅读模式
在SPList Item 的Recurrence 属性,例如设置 开始时间 20090201,结束时间 20090228,Recurrence 设置一个星期一次,这下以前的webpart Calendar 就识别不了一个星期一次,默认将日期 20090201 -20090228 所有日子当作 EventDate  .......
没试过设置还真的被它搞了一头雾水,后来通过SPCAMLEditor tool 的使用,点击list name -》 Current Events
查看了它的SchemaXml 的query 发现它是这样查询的
DSC0000.gif DSC0001.gif Code
<Query>
  <Where>
    <DateRangesOverlap>
      <FieldRef Name="EventDate" />
      <FieldRef Name="EndDate" />
      <FieldRef Name="RecurrenceID" />
      <Value Type="DateTime">
        <Now />
      </Value>
    </DateRangesOverlap>
  </Where>
  <OrderBy>
    <FieldRef Name="EventDate" />
  </OrderBy>
</Query>
所以那个Calendar 的webpart 就要改了 ~~
思路 是先查 当天有没有Recurrence =0的Event,没有的话再查有没有Recurrence =1的Event, 有就跳出 绑定 ~


Code
namespace SharePoint.Panda.Calendar {
    [Guid ( "9c7c129b-9442-4d16-a30f-c1d43c35c0e3" )]
    public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart {
        public WebPart1 () {
        }
        System.Web.UI.WebControls.Calendar cal;
        string url;
        Literal redire = new Literal ();

        private string _eventName = "CLP.SRS.Events";
        [Personalizable ( PersonalizationScope.Shared ), WebBrowsable ( true ), WebDisplayName ( "Event name" ), WebDescription ( "Input event name" )]
        public string eventName {
            get { return _eventName; }
            set { _eventName = value; }
        }

        private DateTime _monthStartDate;

        public DateTime MonthStartDate {
            get { return _monthStartDate; }
            set { _monthStartDate = value; }
        }

        private DateTime _monthEndDate;

        public DateTime MonthEndDate {
            get { return _monthEndDate; }
            set { _monthEndDate = value; }
        }

        private bool setMonth = false;

        protected override void OnInit ( EventArgs e ) {
            this.EnsureChildControls ();
            this.Load += new EventHandler ( Calendar_Load );
            base.OnInit ( e );
        }
        void Calendar_Load ( object sender, EventArgs e ) {
            if ( string.IsNullOrEmpty ( Page.Request.Url.ToString () ) ) {
                return;
            }
            if ( this.WebPartManager.DisplayMode == WebPartManager.EditDisplayMode ) {
                return;
            }
        }

        protected override void CreateChildControls () {
            cal = new System.Web.UI.WebControls.Calendar ();
            this.cal.ID = "Calendar";
            this.cal.CssClass = "CLPSRS_Calendar";
            this.cal.BorderWidth = Unit.Pixel ( 0 );
            this.cal.BorderStyle = BorderStyle.None;
            this.cal.TitleStyle.CssClass = "Calenader_Header";
            this.cal.OtherMonthDayStyle.CssClass = "Calendar_IsOtherMonth";
            this.cal.SelectedDayStyle.CssClass = "Calendar_SelectedDay";
            this.cal.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler ( OnDayRender );
            this.cal.SelectionChanged += new EventHandler ( this.cal_SelectionChanged );
            this.Controls.Add ( cal );
            this.Controls.Add ( redire );

        }
        protected void cal_SelectionChanged ( object sender, EventArgs e ) {
            System.Web.UI.WebControls.Calendar sendCal = ( System.Web.UI.WebControls.Calendar ) sender;
            RenderEventsByDate ( sendCal.SelectedDate );
        }

        private void RenderEventsByDate ( DateTime selectedDate ) {
            if ( !string.IsNullOrEmpty ( eventName ) ) {
                SPSecurity.RunWithElevatedPrivileges ( delegate () {
                    using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
                        try {
                            using ( SPWeb web = site.RootWeb ) {
                                try {
                                    url = SPContext.Current.Web.Url + "/Lists/" + eventName.Replace ( ".", "" ) + "/calendar.aspx?CalendarDate=" +
                                       string.Format ( "{0:00}", selectedDate.Day ) + Page.Server.UrlEncode ( "/" ) + string.Format ( "{0:00}", selectedDate.Month ) + Page.Server.UrlEncode ( "/" ) +
                                         selectedDate.Year.ToString () + "&CalendarPeriod=month";
                                    redire.Text = "<script language='javascript'>window.location='" + url + "'</script>";

                                } catch ( Exception ee ) {
                                    web.Dispose ();
                                }
                            }
                        } catch ( Exception ee ) {
                            site.Dispose ();
                        }
                    }
                } );
            }
        }

        protected void OnDayRender ( object sender, DayRenderEventArgs e ) {
            CalendarDay day = ( ( DayRenderEventArgs ) e ).Day;
            TableCell cell = ( ( DayRenderEventArgs ) e ).Cell;
            cell.CssClass = "Calendar_Day";
            if ( !setMonth && day.IsOtherMonth ) {
                MonthStartDate = day.Date.AddDays ( 1 - day.Date.Day ).AddMonths ( 1 );
                MonthEndDate = MonthStartDate.AddMonths ( 1 ).AddDays ( -1 );
                setMonth = true;
            }
            if ( day.IsToday && !day.IsOtherMonth ) {
                cell.CssClass = "Calendar_IsToday";
            } else if ( day.IsOtherMonth ) {
                cell.CssClass = "Calendar_IsOtherMonth";
                if ( DateTime.Compare ( day.Date, MonthStartDate ) < 0 ) {
                    DateTime weekend = day.Date.AddDays ( 6 - day.Date.DayOfWeek.GetHashCode () );
                    if ( weekend.Month == day.Date.Month ) {
                        cell.Text = "&nbsp;";
                    } else {
                        cell.ForeColor = System.Drawing.Color.Gray;
                    }
                } else if ( DateTime.Compare ( day.Date, MonthEndDate ) > 0 ) {
                    DateTime weekStart = day.Date.AddDays ( -day.Date.DayOfWeek.GetHashCode () );
                    if ( weekStart.Month == day.Date.Month ) {
                        cell.Text = "&nbsp;";
                    } else {
                        cell.ForeColor = System.Drawing.Color.Gray;
                    }
                }

            }
            if ( !string.IsNullOrEmpty ( eventName ) ) {
                SPSecurity.RunWithElevatedPrivileges ( delegate () {
                    using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
                        try {
                            using ( SPWeb web = site.RootWeb ) {
                                try {
                                     //check items with not recurrence
                                    SPQuery query = new SPQuery ();
                                    query.ExpandRecurrence = false;
                                    query.Query = string.Format ( "<OrderBy><FieldRef Name=\"EventDate\" /></OrderBy><Where><And><And><Geq><FieldRef Name='EventDate'/><Value Type='DateTime'>{0}</Value></Geq><Leq><FieldRef Name='EventDate'/><Value Type='DateTime'>{1}</Value></Leq></And><Eq><FieldRef Name='fRecurrence'/><Value Type='Recurrence'>0</Value></Eq></And></Where>", SPUtility.CreateISO8601DateTimeFromSystemDateTime ( day.Date ), SPUtility.CreateISO8601DateTimeFromSystemDateTime ( day.Date ) );
                                    SPListItemCollection calendarItems = web.Lists [eventName].GetItems ( query );
                                    if ( calendarItems.Count > 0 ) {
                                        for ( int i = 0; i < calendarItems.Count; i++ ) {
                                            DateTime startDate=( DateTime ) calendarItems ["EventDate"];
                                            if ( DateTime.Compare ( new DateTime(startDate.Year,startDate.Month,startDate.Day), day.Date ) <= 0 && DateTime.Compare ( day.Date, ( DateTime ) calendarItems ["EndDate"] ) <= 0 ) {
                                                cell.CssClass = "Calendar_EventDay";
                                                break;
                                            }
                                        }
                                    } else {
                                        //check items with recurrence
                                        SPQuery query2 = new SPQuery ();
                                        query2.ExpandRecurrence = true;
                                        query2.Query = string.Format ( "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Now /></Value></DateRangesOverlap></Where><OrderBy><FieldRef Name=\"EventDate\" /></OrderBy>");
                                        SPListItemCollection calendarItems2 = web.Lists [eventName].GetItems ( query2 );
                                        if ( calendarItems2.Count > 0  ) {                                            
                                             // date <S0 || date > En 的时候 直接退出 减少循环  分 n>0 和 n=0
                                            if ( calendarItems2.Count > 1 ) {
                                                DateTime startDate = ( DateTime ) calendarItems2 [0] ["EventDate"];
                                                DateTime endDate = ( DateTime ) calendarItems2 [calendarItems2.Count - 1] ["EndDate"];
                                                if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) > 0 || DateTime.Compare ( day.Date, new DateTime ( endDate.Year, endDate.Month, endDate.Day ) ) > 0 ) {
                                                    return;
                                                }
                                            } else{
                                                DateTime startDate = ( DateTime ) calendarItems2 [0] ["EventDate"];
                                                DateTime endDate = ( DateTime ) calendarItems2 [0] ["EndDate"];
                                                if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) > 0 || DateTime.Compare ( day.Date, new DateTime ( endDate.Year, endDate.Month, endDate.Day ) ) > 0 ) {
                                                    return;
                                                }
                                            }                                    
                                            for ( int i = 0; i < calendarItems2.Count; i++ ) {
                                                DateTime startDate = ( DateTime ) calendarItems2 ["EventDate"];
                                                if ( DateTime.Compare ( new DateTime ( startDate.Year, startDate.Month, startDate.Day ), day.Date ) <= 0 && DateTime.Compare ( day.Date, ( DateTime ) calendarItems2 ["EndDate"] ) <= 0 ) {
                                                    cell.CssClass = "Calendar_EventDay";
                                                    break;
                                                }
                                            }
                                               
                                        }

                                    }
                                } catch ( Exception ee ) {
                                    web.Dispose ();
                                    string error = ee.ToString ();
                                }
                            }
                        } catch ( Exception ee ) {
                            site.Dispose ();
                            string error = ee.ToString ();
                        }
                    }
                } );
            }
        }
        protected override void Render ( HtmlTextWriter writer ) {
            EnsureChildControls ();
            redire.RenderControl ( writer );
            cal.RenderControl ( writer );
        }
    }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118542-1-1.html 上篇帖子: SharePoint 2010 SP1的新功能(网站回收站) 下篇帖子: [SharePoint 工作流] 如何设计一个通用的多级多审核工作流程(四):任务表单、流转的简要图示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表