代码之家  ›  专栏  ›  技术社区  ›  csm8118

当一个项目中有多个人时,Sharepoint警报不起作用

  •  0
  • csm8118  · 技术社区  · 15 年前

    我们使用Sharepoint Services 3.0作为项目跟踪工具。我们设置了一个包含您的基本信息(描述等)的列表,另外我们还有一个“指定人员”列,它的类型是person或Group,我们使用它将列表项与个人关联。此列支持多选。

    我们希望设置警报,使每个人只有在分配给列表项时才能收到警报电子邮件。我们采取的方法是在此列表上设置一个视图,该视图经过过滤以显示指定人员等于[我]的列表项,然后在此列表上创建一个警报,该警报设置为在有人更改视图中显示的项目时发送电子邮件。

    当“指定人员”列中只有一个人时,这种方法效果很好。当“指定人员”列中有多个人时,它不起作用。

    有人知道为什么这样不行,或者我能做些什么来排除故障吗?有没有更好的方法来达到最终的结果?我们可以做几个“指定人员”列,不允许多个选择,但这似乎有点混乱。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Clare Clare    15 年前

    试试这个信息网站, http://www.sharepointalert.info 它有一个很好的警报故障排除指南。

        2
  •  0
  •   Grace Note    15 年前

    它只适用于一个人,而不适用于多个人的原因是,它专门针对一个人。视图所做的比较是Assigned是否等于[Me],而不是Assigned是否将[Me]作为其实体之一。

    而不是使用 is equal to ,使用列表筛选器 contains . 这应该能奏效。

    根据评论编辑

    要访问对象模型,需要使用visualstudio。我不知道有什么方法可以用sharepointdesigner来完成这类工作,但也许你可以做一些疯狂的数据表视图。不管怎样。。。根据你的实际需要。。。

    下面的代码示例演示了实现目标的一种非常基本的方法。

    using (SPSite site = new SPSite("yourwebsiteurlhere")) 
    {
        using (SPWeb web = site.OpenWeb())
        {
            SPList list = web.Lists["titleoflist"];
            SPView view = list.Views["filteredviewname"];
            view.Query = "<Where><Contains><FieldRef Name=\"assignfield\"/><Value Type=\"Integer\"><UserID Type=\"Integer\" /></Value></Contains></Where>";
            view.Update();
        }
    }
    

    将“yourwebsiteurlhere”替换为网站url,“titleoflist”替换为相关列表的标题,“filteredviewname”替换为视图名称,“assignfield”替换为用于分配字段的内部名称。如果您是通过标准的SharePoint UI创建的,则该字段的名称不应包含任何空格。

    至于在何处运行代码,您可以将此类内容放在一次性工作流中。我有时这样做只是为了确保我有必要的特权。希望这有帮助!

    如果您不能/不允许使用visualstudio,那么您的解决方案可能必须是寻找第三方解决方案。