11
votes

Comment obtenir l'élément de contexte dans l'activité de flux de travail (SharePoint)

J'écris une activité personnalisée pour le flux de travail SharePoint et je ne sais pas comment je peux utiliser l'élément de flux de travail actuel, SPWEB ou SPSITE.

Je vois http://blogs.microsoft.co.il/blogs/davidbi/archive/2008/07/21/how-a-get-the-Context-item-in-in- Workflow-Activity-SharePoint.aspx Mais les routines XML de cette solution sont trop mauvaises pour moi.

Peut-être qu'il y a une autre solution de code unique pour obtenir un élément de contexte dans l'activité de flux de travail?


1 commentaires

J'ai tout fait comme décrit ici, et pourtant mon contexte est toujours aussi nul aussi. Je codifie une activité de SPDesigner personnalisée basée sur la séquencitivité. Encore plus, lorsque j'essaie d'éditer le WF dans SharePoint Designer, je ne peux pas l'enregistrer à cause d'une erreur.


6 Réponses :


1
votes

Jetez un coup d'oeil au SPWORDFLOWACTIVATIONPROPERTES. Propriété d'article

Obtient l'élément de liste sur lequel l'instance de flux de travail est en cours d'exécution.


1 commentaires

Hm .. Je met en œuvre ma propre activité de la classe de base de séquencitation. Où puis-je trouver une instance SPWORDFLOWACTIVATIONPropriétés dans ce cas?



19
votes

La réponse à ceci est quelques étapes:

  1. Ajoutez les propriétés à votre activité personnalisée .Cs li>
  2. liez les propriétés de votre fichier .Afractions (SPD sait comment mapper vers vos propriétés) li>
  3. Utilisez les propriétés de votre code LI> ol>

    étape 1 strong>: Voici le code des propriétés (ma classe est nommée giletMails que vous devrez renommer pour être votre classe): p>

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider)
    {
        Output = string.Empty;
    
        try
        {
            SPWeb web = __Context.Web;
            // get all of the information we currently have about the item
            // that this workflow is running on
            Guid listGuid = new Guid(__ListId);
            SPList myList = web.Lists[listGuid];
            SPListItem myItem = myList.GetItemById(__ListItem);
    
            //...
        }
        catch (Exception e)
        {
            //...
        }
    
        return ActivityExecutionStatus.Closed;
    }
    


4 commentaires

Merci, cette solution m'a aidé.


Bonne et approfondie de réponse. Merci!


Merci! Et quand avons-nous besoin d'activationProperties?


J'ai ajouté System.WindowsBase pour l'obtenir pour reconnaître "DépendanceProperty" et System.workflow, mais j'ai toujours des tonnes d'erreurs partout en raison de "Utilisation" manquantes: /



2
votes

Kit La réponse de Menke est très complète et couvre à peu près tout ce dont vous avez besoin: j'ajouterais seulement les éléments suivants ...

Si vous faites ceci: xxx

de ceci: xxx

alors vous êtes libre du contexte de sécurité transmis au flux de travail par la personne qui l'a déclenché.


0 commentaires

1
votes

J'essaie ce code et exécute aussi bien que BAT BAT L'objet contextuel est toujours NULL. Quelqu'un sache pourquoi? XXX

MERCI


1 commentaires

Je suppose que c'est parce que cela est enveloppé dans le bloc RunwithheEvilevilegesProvileges. Je pense que vous devrez passer l'identité du site d'une autre manière?



1
votes

Je ne sais pas si c'est trop facile, mais j'ai utilisé:
xxx

pour obtenir l'élément dans le flux de travail (une liste), puis modifier les éléments dans la liste


0 commentaires

3
votes

Je ne sais pas si ceci est une modification de l'API de 2010, mais la propriété __Context fournit toutes les pièces nécessaires, y compris la liste et l'élément. L'exemple ci-dessous comprend la suggestion de @ Davek pour éliminer le contexte de sécurité:

            var contextWeb = __Context.Web;
            var site = new SPSite(contextWeb.Url);
            var web = site.OpenWeb();

            var list = web.Lists[new Guid(__Context.ListId)];
            var item = list.GetItemById( __Context.ItemId);


0 commentaires