在第一次更新项目时发送电子邮件通知
本文关键字:电子邮件 通知 第一次 更新 新项目 | 更新日期: 2023-09-27 18:13:12
我想在项目被分配到类别时发送通知电子邮件,但它应该只在第一次发生时发生。对项目的后续类别分配不需要发出通知。
当一个类别被分配给一个项目时,有一个"链接"字段将被标记为true。尝试使用if (item.Linked == true)
条件作为触发器,但每次添加或删除类别时都会发出通知。
private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
var itemCategories = item.Categories.ToList();
foreach (var category in itemCategories)
{
if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
{
item.Categories.Remove(category);
if (issue.Solutions.Count == 0)
{
issue.Linked = false;
}
}
}
foreach (var category in viewModel.Categories)
{
if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
{
var itemCategory = category.ToCategory();
db.Categories.Attach(itemCategory);
item.Categories.Add(itemCategory);
item.Linked = true;
}
}
if (item.Linked == true)
{
//Send notification e-mail
UserMailer.Notification(item).Send();
}
}
很明显代码有问题。什么好主意吗?
你的逻辑不正确。当一个项目类别被更新时,你应该检查项目类别是否第一次被更新。您可以通过简单地检查您的项目是否已经链接来检查。
修改代码:
private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
//Check whether item is already linked with some category
bool sendEmail;
if(item.Linked == false)
{
sendEmail=true;
}
//Above code is for your understanding. you can simply use: bool sendEmail = !item.Linked;
var itemCategories = item.Categories.ToList();
foreach (var category in itemCategories)
{
if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
{
item.Categories.Remove(category);
item.Linked = false;
}
}
foreach (var category in viewModel.Categories)
{
if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
{
var itemCategory = category.ToCategory();
db.Categories.Attach(itemCategory);
item.Categories.Add(itemCategory);
item.Linked = true;
}
}
if (sendEmail)
{
//Send notification e-mail
UserMailer.Notification(item).Send();
}
}