2010-07-22 3 views
1

J'essaie d'obtenir l'état interne de tous les flux de travail partagés.Interroger tous les flux de travail Sharepoint pour connaître leur état interne

Existe-t-il des requêtes par programme pour tous les workflows et obtenir leur état? Soit à travers une requête CAML ou le modèle d'objet?

Je me rends compte que je peux parcourir tous les éléments dans sharepoint, et voir si un workflow est attaché, puis obtenir le statut. Cependant, c'est exagéré, car il y a 100 000 articles, et seulement un petit sous-ensemble a des flux de travail. Je veux exécuter un rapport périodique pour récupérer l'état de tous les flux de travail, sans mettre le serveur à genoux.

Merci!
Dave

+0

Après l'exécution d'un flux de travail sur un élément, notez jamais de nouvelles colonnes? :-) Vous devrez peut-être modifier la vue. –

+0

hmm ... ça ne m'aide vraiment pas. C'est dans le gui. J'ai besoin de faire quelque chose par programmation, où je peux interroger tous les flux de travail, et déterminer leur statut. D'autres idées? Merci! –

Répondre

0

Une vue est, à son cœur, une requête CAML. Le commentaire de @pst est un bon choix si vous ne voulez pas parcourir tous les éléments; balayez simplement le CAML à partir de la définition de vue de toute vue qui affiche la colonne d'état du flux de travail. Le service Web Lists.asmx peut être utile ici, bien que j'utilise généralement PowerShell sur le serveur pour extraire les définitions de vue.

Si vous itérer les éléments du modèle d'objet, voici un extrait pour obtenir le roulement:

using (var site = new SPSite(url)) 
using (var web = site.OpenWeb()) 
{ 
    var manager = site.WorkflowManager; 
    var list = web.Lists[listname]; 
    if (list == null || list.Hidden) 
    { 
     return "Cannot work under these conditions."; 
    } 

    foreach (SPListItem item in list.Items) 
    { 
     foreach (SPWorkflow workflow in item.Workflows) 
     { 
      if ((workflow.InternalState & SPWorkflowState.Faulting) == SPWorkflowState.Faulting) 
      { 
       Console.WriteLine(SPWorkflowState.Faulting.ToString()); 
      } 

      // ... 
     } 
    } 
} 
Questions connexes