protected virtual void ApplyUpdate(Task t, ChangeLog c) { var n = c.Name.ToLower(); if (n.Equals("subject")) { t.SetSubject(c.Value); } else if (n.Equals("body")) { t.SetBody(c.Value); } else if (n.Equals("priority")) { t.SetPriority((Priority)Convert.ToInt32(c.Value)); } else if (n.Equals("duetime")) { t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value)); } else if (n.Equals("iscompleted")) { if (Convert.ToBoolean(c.Value)) { t.MarkAsCompleted(); } else { t.MarkAsInCompleted(); } } else if (n.Equals("tags")) { if (c.Type == ChangeType.Insert) { t.AddTag(c.Value); } else if (c.Type == ChangeType.Delete) { t.RemoveTag(c.Value); } } }
protected override void ApplyUpdate(Task task, ChangeLog c) { base.ApplyUpdate(task, c); var teamTask = task as Teams.Task; var team = this.GetTeamOfCurrentAccount <Teams.Member>(teamTask.TeamId);//普通成员即可 switch (c.Name.ToLower()) { case "assigneeid": if (string.IsNullOrWhiteSpace(c.Value)) { teamTask.RemoveAssignee(); } else { teamTask.AssignTo(this.GetMember(team, c.Value)); } break; case "projects": var p = this.GetProject(team, c.Value); if (c.Type == ChangeType.Insert) { teamTask.AddToProject(p); } else if (c.Type == ChangeType.Delete) { teamTask.RemoveFromProject(p); } break; case "comments": if (c.Type == ChangeType.Insert) { teamTask.AddComment(this.GetCurrentMember(team), c.Value); } //HACK:目前暂不支持删除评论 break; } }
protected override void ApplyUpdate(Task t, ChangeLog c) { base.ApplyUpdate(t, c); //目前暂不支持修改folder if (c.Name.Equals("taskfolderid", StringComparison.InvariantCultureIgnoreCase)) (t as PersonalTask).SetTaskFolder(this.GetTaskFolder(c.Value)); }
private bool IsTaskDelete(ChangeLog c) { return(c.Type == ChangeType.Delete && string.IsNullOrWhiteSpace(c.Name)); }
private void ApplyUpdate(Task t, ChangeLog c) { if (c.Name.Equals("subject", StringComparison.InvariantCultureIgnoreCase)) t.SetSubject(c.Value); if (c.Name.Equals("body", StringComparison.InvariantCultureIgnoreCase)) t.SetBody(c.Value); if (c.Name.Equals("priority", StringComparison.InvariantCultureIgnoreCase)) t.SetPriority((Priority)Convert.ToInt32(c.Value)); if (c.Name.Equals("duetime", StringComparison.InvariantCultureIgnoreCase)) t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value)); if (c.Name.Equals("iscompleted", StringComparison.InvariantCultureIgnoreCase)) if (Convert.ToBoolean(c.Value)) t.MarkAsCompleted(); else t.MarkAsInCompleted(); this._taskService.Update(t); if (this._log.IsDebugEnabled) this._log.DebugFormat("为任务#{0}执行变更{1}|{2}|{3}", t.ID, c.ID, c.Name, c.Value); }
private bool IsTaskDelete(ChangeLog c) { return c.Type == ChangeType.Delete && string.IsNullOrWhiteSpace(c.Name); }
protected virtual void ApplyUpdate(Task t, ChangeLog c) { var n = c.Name.ToLower(); if (n.Equals("subject")) t.SetSubject(c.Value); else if (n.Equals("body")) t.SetBody(c.Value); else if (n.Equals("priority")) t.SetPriority((Priority)Convert.ToInt32(c.Value)); else if (n.Equals("duetime")) t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value)); else if (n.Equals("iscompleted")) if (Convert.ToBoolean(c.Value)) t.MarkAsCompleted(); else t.MarkAsInCompleted(); else if (n.Equals("tags")) if (c.Type == ChangeType.Insert) t.AddTag(c.Value); else if (c.Type == ChangeType.Delete) t.RemoveTag(c.Value); }
private void ApplyChanges(Account account , ChangeLog[] list , IDictionary<string, string> idChanges , Func<Task> ifNew , Action<Task, ChangeLog> verify) { foreach (var c in list) { try { //临时记录无需删除 if (this.IsTaskDelete(c) && c.ID.StartsWith(TEMP)) continue; Task t; if (idChanges.ContainsKey(c.ID)) t = this._taskService.GetTask(long.Parse(idChanges[c.ID])); else if (c.ID.StartsWith(TEMP)) { t = ifNew(); this._taskService.Create(t); idChanges.Add(c.ID, t.ID.ToString());//添加到id变更 } else t = this._taskService.GetTask(long.Parse(c.ID)); if (t == null) { this._log.WarnFormat("执行变更时出现不存在的任务#{0}", c.ID); continue; } //执行变更权限验证 verify(t, c); //UNDONE:根据最后更新时间判断变更记录有效性,时间间隔过长的变更会被丢弃? //由于LastUpdateTime粒度过大,不适合这种细粒度变更比对,需要引入Merge机制来处理文本更新合并问题 DateTime createTime; if (DateTime.TryParse(c.CreateTime, out createTime)) if (t.LastUpdateTime - createTime > TimeSpan.FromMinutes(5)) this._log.WarnFormat("变更创建时间{0}与任务最后更新时间{1}的隔间过长", c.CreateTime, t.LastUpdateTime); if (this.IsTaskDelete(c)) this._taskService.Delete(t); else { this.ApplyUpdate(t, c); this._taskService.Update(t); } if (this._log.IsInfoEnabled) this._log.InfoFormat("为任务#{0}执行变更{1}|{2}|{3}|{4}|{5}", t.ID, c.Type, c.ID, c.Name, c.Value, c.CreateTime); } catch (Exception e) { this._log.Error(string.Format("执行变更时异常:{0}|{1}|{2}|{3}", c.Type, c.ID, c.Name, c.Value), e); } } }