Sharepoint 2013 SPAlert.过滤器不工作

Sharepoint 2013 SPAlert.过滤器不工作,sharepoint-2013,Sharepoint 2013,有人能在Sharepoint 2013上帮助使用SPAlert过滤器吗 如果我在SPAlert实例上设置了Filter属性,则警报尚未发送 SPAlert newAlert = user.Alerts.Add(); SPAlertTemplateCollection alertTemplates = new SPAlertTemplateCollection( (SPWebService)(SPContext.Current.Site.WebApplication.Parent)); new

有人能在Sharepoint 2013上帮助使用SPAlert过滤器吗

如果我在SPAlert实例上设置了Filter属性,则警报尚未发送

SPAlert newAlert = user.Alerts.Add();

SPAlertTemplateCollection alertTemplates = new SPAlertTemplateCollection(
(SPWebService)(SPContext.Current.Site.WebApplication.Parent));

newAlert.AlertType = SPAlertType.List;
newAlert.List = list;
newAlert.Title = alertTitle;
newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
newAlert.EventType = eventType;
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];                            

var wsm = new WorkflowServicesManager(web);
var wss = wsm.GetWorkflowSubscriptionService();
var subscriptions = wss.EnumerateSubscriptionsByList(list.ID);
bool assotiationExist = false;
var guid = Constants.Workflows.ApprovalWF.Guid;
foreach (var subs in subscriptions)
{
    assotiationExist = subs.DefinitionId == guid;
        if (assotiationExist)
        {
               newAlert.Filter = "<Query><Eq><FieldRef Name=\"ApprovalStatus\"/><Value type=\"string\">Approved</Value></Eq></Query>";
        }
}                               

newAlert.Update(false);
SPAlert newAlert=user.Alerts.Add();
SPAlertTemplateCollection alertTemplates=新的SPAlertTemplateCollection(
(SPWebService)(SPContext.Current.Site.WebApplication.Parent));
newAlert.AlertType=SPAlertType.List;
newAlert.List=List;
newAlert.Title=alertTitle;
newAlert.DeliveryChannels=SPAlertDeliveryChannels.Email;
newAlert.EventType=EventType;
newAlert.AlertFrequency=SPAlertFrequency.Immediate;
newAlert.AlertTemplate=alertTemplates[Constants.alertTemplates.GenericListCustom];
var wsm=新工作流服务管理器(web);
var wss=wsm.GetWorkflowSubscriptionService();
var subscriptions=wss.EnumerateSubscriptionsByList(list.ID);
bool assotationexist=false;
var guid=Constants.Workflows.ApprovalWF.guid;
foreach(订阅中的var subs)
{
AssotationExist=subs.DefinitionId==guid;
如果(关联存在)
{
newAlert.Filter=“已批准”;
}
}                               
newAlert.Update(false);
如果我在SPAlert实例上设置了Filter属性,则警报尚未发送

SPAlert newAlert = user.Alerts.Add();

SPAlertTemplateCollection alertTemplates = new SPAlertTemplateCollection(
(SPWebService)(SPContext.Current.Site.WebApplication.Parent));

newAlert.AlertType = SPAlertType.List;
newAlert.List = list;
newAlert.Title = alertTitle;
newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
newAlert.EventType = eventType;
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];                            

var wsm = new WorkflowServicesManager(web);
var wss = wsm.GetWorkflowSubscriptionService();
var subscriptions = wss.EnumerateSubscriptionsByList(list.ID);
bool assotiationExist = false;
var guid = Constants.Workflows.ApprovalWF.Guid;
foreach (var subs in subscriptions)
{
    assotiationExist = subs.DefinitionId == guid;
        if (assotiationExist)
        {
               newAlert.Filter = "<Query><Eq><FieldRef Name=\"ApprovalStatus\"/><Value type=\"string\">Approved</Value></Eq></Query>";
        }
}                               

newAlert.Update(false);
你到底需要什么

如果您只是想更改过滤器(警报条件),您是否只是尝试:

newAlert.AlertType = SPAlertType.List;
newAlert.List = list;
newAlert.Title = alertTitle;
newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
newAlert.EventType = eventType;
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];
newAlert.Filter = "<Query><Eq><FieldRef Name=\"ApprovalStatus/New\"/><Value type=\"string\">Approved</Value></Eq></Query>";
newAlert.Update(false);
newAlert.AlertType=SPAlertType.List;
newAlert.List=List;
newAlert.Title=alertTitle;
newAlert.DeliveryChannels=SPAlertDeliveryChannels.Email;
newAlert.EventType=EventType;
newAlert.AlertFrequency=SPAlertFrequency.Immediate;
newAlert.AlertTemplate=alertTemplates[Constants.alertTemplates.GenericListCustom];
newAlert.Filter=“已批准”;
newAlert.Update(false);
我刚刚在您的筛选查询中添加了/New。警报中的查询筛选器需要在您的字段中获取a/New或a/Old

如果您的警报仍然不起作用,则可能是过滤器以外的原因

如果我在SPAlert实例上设置了Filter属性,则警报尚未发送

SPAlert newAlert = user.Alerts.Add();

SPAlertTemplateCollection alertTemplates = new SPAlertTemplateCollection(
(SPWebService)(SPContext.Current.Site.WebApplication.Parent));

newAlert.AlertType = SPAlertType.List;
newAlert.List = list;
newAlert.Title = alertTitle;
newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
newAlert.EventType = eventType;
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];                            

var wsm = new WorkflowServicesManager(web);
var wss = wsm.GetWorkflowSubscriptionService();
var subscriptions = wss.EnumerateSubscriptionsByList(list.ID);
bool assotiationExist = false;
var guid = Constants.Workflows.ApprovalWF.Guid;
foreach (var subs in subscriptions)
{
    assotiationExist = subs.DefinitionId == guid;
        if (assotiationExist)
        {
               newAlert.Filter = "<Query><Eq><FieldRef Name=\"ApprovalStatus\"/><Value type=\"string\">Approved</Value></Eq></Query>";
        }
}                               

newAlert.Update(false);
你到底需要什么

如果您只是想更改过滤器(警报条件),您是否只是尝试:

newAlert.AlertType = SPAlertType.List;
newAlert.List = list;
newAlert.Title = alertTitle;
newAlert.DeliveryChannels = SPAlertDeliveryChannels.Email;
newAlert.EventType = eventType;
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];
newAlert.Filter = "<Query><Eq><FieldRef Name=\"ApprovalStatus/New\"/><Value type=\"string\">Approved</Value></Eq></Query>";
newAlert.Update(false);
newAlert.AlertType=SPAlertType.List;
newAlert.List=List;
newAlert.Title=alertTitle;
newAlert.DeliveryChannels=SPAlertDeliveryChannels.Email;
newAlert.EventType=EventType;
newAlert.AlertFrequency=SPAlertFrequency.Immediate;
newAlert.AlertTemplate=alertTemplates[Constants.alertTemplates.GenericListCustom];
newAlert.Filter=“已批准”;
newAlert.Update(false);
我刚刚在您的筛选查询中添加了/New。警报中的查询筛选器需要在您的字段中获取a/New或a/Old


如果您的警报仍然不起作用,则可能是筛选器之外的原因。

问题出在第newAlert.EventType=EventType行。事件类型为SPEventType.Add。这就是工作流将ApprovalStatus字段设置为«Approved»后不发送警报的原因

我修改了算法。现在eventType是SPEventType.Modify,我在列表中添加了新字段“IsNewAlertSent”。当事件第一次触发时,我发送电子邮件并设置“IsNewAlertSend”字段

最终代码如下所示

类UserAlertManager:

..
newAlert.EventType = (eventType == SPEventType.Add? SPEventType.Modify: eventType);
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];
..
           if (assotiationExist)
           {
              newAlert.Filter = "<Query><Eq><FieldRef name=\"ApprovalStatus\"/><Value type=\"Text\">Approved</Value></Eq></Query>";
              newAlert.Properties.Add("grcustomalert", "1"); 

            }
..
newAlert.Update(false);
。。
newAlert.EventType=(EventType==SPEventType.Add?SPEventType.Modify:EventType);
newAlert.AlertFrequency=SPAlertFrequency.Immediate;
newAlert.AlertTemplate=alertTemplates[Constants.alertTemplates.GenericListCustom];
..
如果(关联存在)
{
newAlert.Filter=“已批准”;
newAlert.Properties.Add(“grcustomalert”,“1”);
}
..
newAlert.Update(false);
类GRCustomAlertHandler:

...
string subject = string.Empty;
string body = string.Empty;
bool grCustomAlert = Utils.IsSPAlertCustom(ahp.a);
if (ahp.eventData[0].eventType == (int)SPEventType.Modify && grCustomAlert)
{
             SPListItem item = list.GetItemById(ahp.eventData[0].itemId);
             var isNewAlertSentField = item.Fields.GetFieldByInternalName(Constants.Fields.IsNewAlertSent);
             if (isNewAlertSentField != null && (item[Constants.Fields.IsNewAlertSent] == null || !(bool)item[Constants.Fields.IsNewAlertSent]))
             {
                       ...                           
                        Utils.SendMail(web, new List<string> { ahp.headers["to"].ToString() }, subject, body);
                               item[Constants.Fields.IsNewAlertSent] = true;
                                using (new DisabledItemEventScope())
                                {
                                    item.SystemUpdate(false);
                                }
                }
}

...
。。。
string subject=string.Empty;
string body=string.Empty;
bool grCustomAlert=Utils.isspalercustom(ahp.a);
if(ahp.eventData[0].eventType==(int)SPEventType.Modify&&grCustomAlert)
{
SPListItem=list.GetItemById(ahp.eventData[0].itemId);
var isNewAlertSentField=item.Fields.GetFieldByInternalName(Constants.Fields.IsNewAlertSent);
if(isNewAlertSentField!=null&(项[Constants.Fields.IsNewAlertSent]==null | |!(bool)项[Constants.Fields.IsNewAlertSent]))
{
...                           
SendMail(web,新列表{ahp.headers[“to”].ToString()},主题,正文);
项[Constants.Fields.IsNewAlertSent]=true;
使用(新的DisabledItemEventScope())
{
项。系统更新(假);
}
}
}
...

问题出在第newAlert.EventType=EventType行。事件类型为SPEventType.Add。这就是工作流将ApprovalStatus字段设置为«Approved»后不发送警报的原因

我修改了算法。现在eventType是SPEventType.Modify,我在列表中添加了新字段“IsNewAlertSent”。当事件第一次触发时,我发送电子邮件并设置“IsNewAlertSend”字段

最终代码如下所示

类UserAlertManager:

..
newAlert.EventType = (eventType == SPEventType.Add? SPEventType.Modify: eventType);
newAlert.AlertFrequency = SPAlertFrequency.Immediate;
newAlert.AlertTemplate = alertTemplates[Constants.AlertTemplates.GenericListCustom];
..
           if (assotiationExist)
           {
              newAlert.Filter = "<Query><Eq><FieldRef name=\"ApprovalStatus\"/><Value type=\"Text\">Approved</Value></Eq></Query>";
              newAlert.Properties.Add("grcustomalert", "1"); 

            }
..
newAlert.Update(false);
。。
newAlert.EventType=(EventType==SPEventType.Add?SPEventType.Modify:EventType);
newAlert.AlertFrequency=SPAlertFrequency.Immediate;
newAlert.AlertTemplate=alertTemplates[Constants.alertTemplates.GenericListCustom];
..
如果(关联存在)
{
newAlert.Filter=“已批准”;
newAlert.Properties.Add(“grcustomalert”,“1”);
}
..
newAlert.Update(false);
类GRCustomAlertHandler:

...
string subject = string.Empty;
string body = string.Empty;
bool grCustomAlert = Utils.IsSPAlertCustom(ahp.a);
if (ahp.eventData[0].eventType == (int)SPEventType.Modify && grCustomAlert)
{
             SPListItem item = list.GetItemById(ahp.eventData[0].itemId);
             var isNewAlertSentField = item.Fields.GetFieldByInternalName(Constants.Fields.IsNewAlertSent);
             if (isNewAlertSentField != null && (item[Constants.Fields.IsNewAlertSent] == null || !(bool)item[Constants.Fields.IsNewAlertSent]))
             {
                       ...                           
                        Utils.SendMail(web, new List<string> { ahp.headers["to"].ToString() }, subject, body);
                               item[Constants.Fields.IsNewAlertSent] = true;
                                using (new DisabledItemEventScope())
                                {
                                    item.SystemUpdate(false);
                                }
                }
}

...
。。。
string subject=string.Empty;
string body=string.Empty;
bool grCustomAlert=Utils.isspalercustom(ahp.a);
if(ahp.eventData[0].eventType==(int)SPEventType.Modify&&grCustomAlert)
{
SPListItem=list.GetItemById(ahp.eventData[0].itemId);
var isNewAlertSentField=item.Fields.GetFieldByInternalName(Constan