【问题标题】:Sitecore Droplink for User Roles用于用户角色的 Sitecore Droplink
【发布时间】:2013-05-10 08:52:27
【问题描述】:

我正在构建一个自定义工作流程,在该工作流程中,属于特定角色的所有用户都将根据某些状态变化收到电子邮件通知。我已经开始通过具有可替换令牌的 Sitecore 项目充实电子邮件模板,但我正在努力寻找一种方法来允许在 Sitecore 中设置收件人角色。我想避免让用户输入角色的字符串表示形式,因此如果有一种方法可以使用 sitecore 中定义的各种角色填充它,那么 droplink 将是理想的。如果我可以过滤填充 droplink 的角色,则可以加分。

我知道用户/角色/域未定义为内容树中的项目,那么究竟如何配置此 droplink?

Sitecore 6.5。

【问题讨论】:

    标签: security email content-management-system sitecore sitecore6


    【解决方案1】:

    我不确定是否已经为此制作了一个模块,但您可以使用此技术:http://newguid.net/sitecore/2013/coded-field-datasources-in-sitecore/

    它解释了如何将类用作数据源。因此,您可以创建一个列出所有用户角色的类。

    【讨论】:

    • 这正是我正在寻找但不知道要搜索什么的,谢谢!
    【解决方案2】:

    您可能想查看http://sitecorejunkie.com/2012/12/28/have-a-field-day-with-custom-sitecore-fields/,它提供了一个多列表以允许您选择用户列表。

    还可以查看Workflow Escaltor Module 表单,您可以借用 AccountSelector 控件,该控件允许您选择个人或角色。

    这是我以前用来做这件事的模块。以下代码获取用户的所有唯一电子邮件地址,并且仅适用于对项目具有读取权限的用户(这是一个多站点实现,角色仅限于每个站点,但工作流程是共享的)。

    protected override List<string> GetRecipientList(WorkflowPipelineArgs args, Item workflowItem)
    {
        Field recipientsField = workflowItem.Fields["To"];
        Error.Assert((recipientsField != null || !string.IsNullOrEmpty(recipientsField.Value)), "The 'To' field is not specified in the mail action item: " + workflowItem.Paths.FullPath);
    
        List<string> recepients = GetEmailsForUsersAndRoles(recipientsField, args);
    
        if (recepients.Count == 0)
            Log.Info("There are no users with valid email addresses to notify for item submission: " + workflowItem.Paths.FullPath);
    
        return recepients;
    }
    
    //Returns unique email addresses of users that correspond to the selected list of users/roles  
    private List<string> GetEmailsForUsersAndRoles(Field field, WorkflowPipelineArgs args)
    {
        List<string> emails = new List<string>();
        List<User> allUsers = new List<User>();
    
        AccountSelectorField accountSelectorField = new AccountSelectorField(field);
        List<Account> selectedRoles = accountSelectorField.GetSelectedAccountsByType(AccountType.Role);
        List<Account> selectedUsers = accountSelectorField.GetSelectedAccountsByType(AccountType.User);
    
        foreach (var role in selectedRoles)
        {
            var users = RolesInRolesManager.GetUsersInRole(Role.FromName(role.Name), true).ToList();
            if (users.Any()) 
                allUsers.AddRange(users);
        }
    
        selectedUsers.ForEach(i => allUsers.Add(Sitecore.Security.Accounts.User.FromName(i.Name, false)));
    
        foreach (var user in allUsers)
        {   
            if (user == null || !args.DataItem.Security.CanRead(user)) continue; //move on if user does not have access to item
    
            if (!emails.Contains(user.Profile.Email.ToLower()))
            {
                if(user.Profile.Email != null && !string.IsNullOrEmpty(user.Profile.Email.Trim()))
                    emails.Add(user.Profile.Email.ToLower());
                else
                    Log.Error("No email address setup for user: " + user.Name);
    
            }
        }
    
        return emails;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2013-07-08
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多