EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:向特定用户显示通知

默认情况下,通知显示给所有用户。本示例演示如何过滤通知以仅向所需用户显示提醒窗口

注意
  • 该示例基于Entity Framework数据模型,但是您也可以对eXpress持久对象(XPO)使用相同的方法。

  • 移动应用程序不支持Notifications Module,因此本主题中描述的方法无法在Mobile平台中实现。请参阅如何使用Azure Notifications Hub KB向XAF Mobile应用程序发送推送通知,以了解如何在Mobile应用程序中使用推送通知。

假设您有ISupportNotifications业务对象,该对象公开了AssignedTo属性。

[DefaultClassOptions]
public class Task : ISupportNotifications, IXafEntityObject {
    // ...
    public virtual Employee AssignedTo { get; set; }
}

在这里,我们考虑在如何:将通知与自定义业务类一起使用(实施ISupportNotifications)示例中实现的Task业务类。该员工是一个自定义的安全系统的用户类型是在一个一对多与协会的任务。

using System.ComponentModel;
using DevExpress.Persistent.Base;
// ...
[DefaultClassOptions, DefaultProperty(nameof(UserName))]
public class Employee : DevExpress.Persistent.BaseImpl.EF.User {
    public Employee() {
        Tasks = new List<Task>();
    }
    public virtual IList<Task> Tasks { get; set; }
}

编辑Module.csModule.vb)文件。在重写的ModuleBase.Setup方法中,订阅XafApplication.LoggedOn事件。在此事件处理程序中,获取NotificationsModule实例并订阅DefaultNotificationsProvider.CustomizeNotificationCollectionCriteria事件。

using DevExpress.Data.Filtering;
using DevExpress.ExpressApp.Notifications;
using DevExpress.Persistent.Base.General;
// ...
public override void Setup(XafApplication application) {
    base.Setup(application);
    application.LoggedOn  = application_LoggedOn;
}
void application_LoggedOn(object sender, LogonEventArgs e) {
   NotificationsModule notificationsModule = Application.Modules.FindModule<NotificationsModule>();
   DefaultNotificationsProvider notificationsProvider = notificationsModule.DefaultNotificationsProvider;
   notificationsProvider.CustomizeNotificationCollectionCriteria  = notificationsProvider_CustomizeNotificationCollectionCriteria;
}
void notificationsProvider_CustomizeNotificationCollectionCriteria(
    object sender, CustomizeCollectionCriteriaEventArgs e) {
    if (e.Type == typeof(Task)) {
        e.Criteria = CriteriaOperator.Parse("AssignedTo is null || AssignedTo.Id == CurrentUserId()");
    }
}

因此,仅当AssignedTo值为空或引用当前用户时,才会显示通知。

如果使用调度程序事件后代而不是自定义ISupportNotifications对象,请使用SchedulerModuleBase.NotificationsProvider属性访问NotificationsProvider对象并处理NotificationsProvider.CustomizeNotificationCollectionCriteria事件。

using DevExpress.ExpressApp.Scheduler;
// ...
void application_LoggedOn(object sender, LogonEventArgs e) {
    SchedulerModuleBase schedulerModule = Application.Modules.FindModule<SchedulerModuleBase>();
    NotificationsProvider notificationsProvider = schedulerModule.NotificationsProvider;
    notificationsProvider.CustomizeNotificationCollectionCriteria  = notificationsProvider_CustomizeNotificationCollectionCriteria;
}

转载保留此链接,注明出处