Sharepoint: SQL para encontrar todos os documentos criados / editados por um usuário

StackOverflow https://stackoverflow.com/questions/281373

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu estou procurando uma consulta que irá funcionar em Sharepoint 2003 para me mostrar todos os documentos criados / modificados por um determinado userID.

Eu encontrei tabelas com os documentos (documentos) e tabelas para usuários (UserInfo, UserData) mas a relação entre parece um pouco estranho - há 99.000 registros em nossa mesa userdata e 12.000 registros em userinfo - temos 400 usuários

Acho que eu estava esperando um simples 1 para muitos relação com uma tabela de usuário ter 400 registros e juntando-se que a mesa de documentos, mas não vejo isso não é o caso.

Qualquer ajuda seria apreciada.

Edit: Graças Bjorn, Eu traduzi essa consulta de volta para a estrutura 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

Esta me obtém uma lista de siteid / listid / tp_ID é que vou ter que ver se posso traçar os de volta para um nome de arquivo / caminho. Todos: qualquer ajuda adicional ainda é apreciado

Foi útil?

Solução

Eu nunca olhou para o banco de dados no SharePoint 2003, mas em 2007 UserInfo está ligado a Sites, o que significa que cada usuário tem uma linha na UserInfo para cada conjunto de sites (ou o conceito equivalente 2003). Então, para identificar o que um usuário faz o que você precisa tanto o ID de local e ID do usuário dentro desse site. Em 2007, eu começaria com algo como isto:

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

Update: Como outros escrever aqui, não é recomendado para ir diretamente para o banco de dados do SharePoint, mas eu diria que usar a cabeça e ter cuidado. As atualizações são um todos-caps não-não, mas seleciona depende do contexto.

Outras dicas

não consulta do SharePoint banco de dados diretamente!

Eu me pergunto se eu fiz essa clara o suficiente? :)

Você realmente precisa de olhar para o modelo de objeto disponível em C #, você vai precisar de ter uma instância SPSite para um SiteCollection, e, em seguida, iterar sobre as instâncias SPList que pertencem à SPSite e os objetos SPWeb.

Depois de ter o objeto SPList, você vai precisar ligar para GetListItems usando uma consulta que filtros para o usuário que deseja.

Esse é o caminho suportado de fazer o que quiser.

Você nunca deve ir para o banco de dados diretamente como SharePoint não é projetado para que em tudo e não há nenhuma garantia (na verdade, há um aviso específico) que a estrutura do banco de dados será o mesmo entre as versões e atualizações, e Além disso, quando o conteúdo está espalhada por vários bancos de dados de conteúdo em uma fazenda há nenhuma garantia de que uma consulta que é executado em um banco de dados de conteúdo vai fazer o que você espera em outro banco de dados de conteúdo.

Quando você olha para o modelo de objeto para a iteração, também nota que você vai precisar descartar () o SPSite e SPWeb objetos que você criar.

Oh, e sim, você pode ter 400 usuários, mas eu aposto que você tem 30 sites. A informação é repetido no banco de dados por site ... 30 x 400 = 12.000 entradas no banco de dados.

Se você estiver indo para usar essa consulta no Sharepoint você deve saber que a criação de pontos de vista sobre o banco de dados de conteúdo ou quering diretamente contra o banco de dados parece ser um grande não-não. Uma solução poderia ser algum código personalizado que percorre o modelo de objeto e grava os resultados para o seu próprio banco de dados. Isto quer poderia ser temporizador base ou com base em um EventTrigger.

Você realmente não deveria estar fazendo SELECTs com fechaduras tanto ou seja, adicionando COM (NOLOCK) para suas consultas. Algumas partes do sistema são muito sensíveis tempo limite e se você começar a introduzir bloqueios que o sistema não estava esperando que você pode ver o fora aberração do sistema.

Mas, realmente, você deve estar fazendo isso por meio do modelo de objeto. Mexer com algo como IronPython e experimentações com o OM são quase absolutamente agradável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top