揪出未完成的SharePoint Server 2007调查答复
2009-03-27 11:35 Windie Chai 阅读(3075) 评论(9) 编辑 收藏 举报SharePoint的调查功能是一种用来收集反馈的极为有效的方法。在调查列表中,可以设置权限来规定用户是否能看到其他用户的答复以及是否能编辑其他用户的答复,但这种权限仅限于其他用户已经正常完成了的答复。
也就是说,如果某一用户的答复没有正常完成,只是暂时保存了,那么除了创建者之外,所有人都无法在调查列表中看到该答复,甚至管理员也不例外。
在包含未完成答复的情况下,调查列表的“答复数量”中显示的数字会多余点击“显示所有答复”后显示的答复数量。那么此时,如果想要知道哪些用户还没有完成答复,该怎么做呢?
上面说过,网站管理员也无法看到未完成的答复;而我尝试过使用SharePoint对象模型来获取该调查列表中的Items,也只能获取到已经完成的答复;最后只好进入SharePoint的数据库中来寻找答案……
在包含调查列表的内容数据库中执行下面这段SQL查询,然后就可以得到指定调查列表中的所有未完成答复的用户:
select UserInfo.tp_login,UserInfo.tp_Title,UserInfo.tp_Email --取出用户登录名、显示名和邮箱
from UserInfo,AllUserData,AllLists
where AllUserData.tp_Author = UserInfo.tp_ID --关联用户数据的创建者和用户信息ID
and AllUserData.tp_ListID = AllLists.tp_ID --关联用户数据的列表和列表ID
and AllUserData.tp_DeleteTransactionId = 0x --除去用户数据中已经被删除的条目
and AllUserData.tp_CheckoutUserId is not NULL --除去没有被签出的条目(签出即表示没有完成)
and AllLists.tp_DeleteTransactionId = 0x --除去列表中已经被删除的条目
and AllLists.tp_Title = N'调查测试' --传入列表名称
这段SQL查询看其来有点儿复杂,其实不难理解,这里简单地解释一下涉及到的3张表:
- UserInfo表包含了所有用户的信息,我们将在此表中获取用户信息;
- AllUserData表包含了所有用户所产生的数据,当然也包含未完成的答复;
- AllLists表包含了所有列表,当然也包含了调查列表,我们将在此表中根据列表名称获取列表ID;
上面的SQL查询只是简单地列出了某调查列表中所有未完成答复的创建者信息,这样管理员就可以通知这些创建者去完成各自的答复了。
本文仅适用于SharePoint Server 2007,它的数据库结构和SPS 2003有所区别,关于如何在SPS2003中获取调查答复,可以参考这篇文章:http://cregan.wordpress.com/2006/07/28/sharepoint-surveys-finding-the-results-in-the-database/
另外,直接操作SharePoint数据库并不是微软所推荐的方式,在可以使用SharePoint对象模型或其他方法的情况下,尽量不要去直接操作SharePoint数据库。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述