我想创建一个自定义提醒,以查找特定日期内所有支票的内容(当天只有一封邮件)。
此警报在现有模板列表中不可用。
使用现有的警报,我收到很多邮件,并且遗漏了其他一些邮件。
非常感谢帮助。
答案 0 :(得分:4)
帕特里克说这个无法实现 throgh TFS警报。 所以你可以使用TFS api checkin事件。
查看ISubscriber界面。
创建一个类库项目。编写类似
的事件处理程序类public class CheckinEventHandler : ISubscriber
{
public string Name
{
get { return "CheckinEventHandler"; }
}
public SubscriberPriority Priority
{
get { return SubscriberPriority.Normal; }
}
public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext, NotificationType notificationType, object notificationEventArgs, out int statusCode,
out string statusMessage, out ExceptionPropertyCollection properties)
{
statusCode = 0;
properties = null;
statusMessage = String.Empty;
if (notificationType == NotificationType.Notification && notificationEventArgs is CheckinEvent )
{
//Write info in file
}
}
public Type[] SubscribedTypes()
{
return new Type[1] { typeof(CheckinEvent)};
}
}
编译项目并将dll放在 C:\ Program Files \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins
中在ProcessEvent方法中,在任何类型的文件中写入有关签入的信息。 你可以在一些文本文件中写出来。将所有信息附加到同一文件中一天。
然后创建一个这样的电子邮件调度程序:
public bool SendMail()
{
try
{
MailMessage mail = new MailMessage();
mail.To.Add("some emailId");
mail.From = new MailAddress("some emailId");
mail.Subject = "Checkin Info";
mail.Body =//Assign content of the text file here
mail.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = //e.g. "smtp.gmail.com"
smtp.Credentials = new System.Net.NetworkCredential
("userId", "password");
smtp.EnableSsl = false;
smtp.Send(mail);
return true;
}
catch (Exception e)
{
return false;
}
}
如果方法返回true,则以编程方式删除文件。
您可以使用TaskSchedular安排此程序每天在固定时间运行。
这就是您每天只收到一封电子邮件的方式,您也不会错过任何签到。
答案 1 :(得分:1)
这不能通过TFS警报实现。每次办理登机手续都会触发警报。通过TFS警报,您只能设置为在指定文件夹下的其他用户的签到中接收电子邮件通知(例如& / Main)如果要获取所有签到消息,则必须接收很多邮件。
要实现您的需求,您应该使用TFS API。由于每次签入都会在TFS中生成变更集。因此,您只需要在一天内列出需求变更集信息。有CreationDate
个属性(获取或设置此变更集的创建日期。)
列出项目下所有变更集信息的示例:
var tfsUrl = "http://myTfsServer:8080/tfs/defaultcollection";
var sourceControlRootPath = "$/MyTeamProject";
var tfsConnection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsUrl));
var vcs = tfsConnection.GetService<VersionControlServer>();
var changeSets = vcs.QueryHistory(sourceControlRootPath, RecursionType.Full);
foreach (var c in changeSets)
{
var changeSet = vcs.GetChangeset(c.ChangesetId);
foreach (var change in changeSet.Changes)
{
// All sorts of data in here
}
}