1

我正在寻找一个可以在 Sharepoint 2003 上运行的查询,以向我显示给定用户 ID 创建/触及的所有文档。

我找到了包含文档(Docs)和用户表(UserInfo、UserData)的表,但它们之间的关系似乎有点奇怪——我们的 userdata 表中有 99,000 条记录,而 userinfo 中有 12,000 条记录——我们有 400 个用户!

我想我期待一个简单的一对多关系与一个有 400 条记录的用户表并将其加入到文档表中,但我认为情况并非如此。

任何帮助,将不胜感激。

编辑:感谢 Bjorn,我已将该查询翻译回 Sharepoint 2003 结构:

select 
d.* from 
userinfo u join userdata d 
on u.tp_siteid = d.tp_siteid  
and 
u.tp_id = d.tp_author 
where
u.tp_login = 'userid' 
and
d.tp_iscurrent = 1

这让我得到了一个 siteid/listid/tp_id 的列表,我必须看看我是否可以将它们追溯到文件名/路径。全部:仍然感谢任何额外的帮助!

4

4 回答 4

1

我从未查看过 SharePoint 2003 中的数据库,但在 2007 年,UserInfo 已连接到站点,这意味着每个用户在 UserInfo 中对于每个站点集合(或等效的 2003 概念)都有一行。因此,要确定用户是什么,您需要站点 ID 和该站点内的用户 ID。在 2007 年,我会从这样的事情开始:

select d.* from userinfo u 
join alluserdata d on u.tp_siteid = d.tp_siteid 
and u.tp_id = d.tp_author 
where u.tp_login = '[username]'
and d.tp_iscurrentversion = 1

更新:正如其他人在这里写的,不建议直接进入 SharePoint 数据库,但我会说用你的头脑小心。更新是全大写的禁忌,但选择取决于上下文。

于 2008-11-12T08:13:29.600 回答
1

如果您打算在 Sharepoint 中使用该查询,您应该知道在内容数据库上创建视图或直接针对数据库进行查询似乎是一个很大的禁忌。一种解决方法可能是一些自定义代码,它遍历对象模型并将结果写入您自己的数据库。这可以基于计时器或基于事件触发器。

于 2008-11-22T15:36:52.410 回答
1

不要直接查询 SHAREPOINT 数据库!

我想知道我是否说得足够清楚?:)

您确实需要查看 C# 中可用的对象模型,您需要获取 SiteCollection 的 SPSite 实例,然后遍历属于 SPSite 和 SPWeb 对象的 SPList 实例。

获得 SPList 对象后,您将需要使用筛选出所需用户的查询来调用 GetListItems。

这是做你想做的事的受支持的方式。

您永远不应该直接访问数据库,因为 SharePoint 根本不是为此而设计的,并且不能保证(实际上,有一个特定的警告)数据库的结构在版本和升级之间是相同的,另外当内容分布在场中的多个内容数据库中,因此无法保证在一个内容数据库上运行的查询将在另一个内容数据库上执行您期望的操作。

当您查看迭代的对象模型时,还要注意您将需要 dispose() 您创建的 SPSite 和 SPWeb 对象。

哦,是的,您可能有 400 个用户,但我敢打赌您有 30 个站点。该信息在每个站点的数据库中重复... 30 x 400 = 数据库中的 12,000 个条目。

于 2008-11-22T15:50:31.587 回答
0

You really shouldn't be doing SELECTs with Locks either i.e. adding WITH (NOLOCK) to your queries. Some parts of the system are very timeout sensitive and if you start introducing locks that the system wasn't expecting you can see the system freak out.

But really, you should be doing this via the object model. Mess around with something like IronPython and experimentations with the OM are almost downright pleasant.

于 2009-07-22T17:49:01.737 回答