2

Ce code simple échoue avec l'erreur suivante:Comment affecter un argument à la variable dans Workflow Foundation 4.0?

Les erreurs suivantes ont été rencontrées lors du traitement de l'arbre de workflow:

« ArgumentValue »: L'argument nommé « paramètre » n'a pas pu être trouvé sur l'activité posséder ces enfants privés. ArgumentReference et ArgumentValue ne doivent être utilisés que dans le corps d'une définition d'activité.

J'ai aussi essayé VisualBasivValue ("Paramètre") au lieu de ArgumentValue, et l'erreur était:

Les erreurs suivantes ont été rencontrées lors du traitement de l'arbre de workflow:

'VisualBasicValue': compilateur erreur (s) rencontrée (s) lors du traitement de l'expression "Parameter". 'Paramètre' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.

Comment le faire correctement?

J'ai essayé de construire quelque chose de semblable en XAML, et il fonctionne, voici le code:

<Assign sap:VirtualizedContainerService.HintSize="242,58"> 
    <Assign.To> 
     <OutArgument x:TypeArguments="x:String">[variable]</OutArgument> 
    </Assign.To> 
    <Assign.Value> 
     <InArgument x:TypeArguments="x:String">[Parameter]</InArgument> 
    </Assign.Value> 
</Assign> 

On dirait qu'il fait référence au paramètre en quelque sorte, mais comment ...

Comment puis-je faire dans le code? Voici mon scénario simple:

public class RootActivity : NativeActivity 
{ 
    public InArgument<string> Parameter { get; set; } 

    public Activity Activity { get; set; } 

    public RootActivity() 
    { 
     var variable = new Variable<string>("V1", "This is my variable!"); 
     var activity = new Sequence 
      { 
       Variables = {variable}, 
       Activities = 
       { 
        new Assign<string> 
        { 
         To = new OutArgument<string>(variable), 
         Value = new InArgument<string>(
          new ArgumentValue<string>("Parameter")); 
        }, 
       } 
      }; 

     this.Activity = activity; 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     context.ScheduleActivity(this.Activity); 
    } 
} 

Merci beaucoup pour toute aide!

Répondre

0

Je ne suis pas exactement sûr, mais il y a une chose que j'ai remarquée.

J'ai trouvé qu'essayer de configurer une activité dans un constructeur souvent ne fonctionne pas. Il est conseillé de le faire dans la méthode Create de IActivityTemplateFactory.

Modifiez votre code pour implémenter cette méthode, puis déplacez le code du constructeur vers la méthode Create. Ce n'est peut-être pas votre problème, mais ça pourrait être l'un d'entre eux.

0

Essayez ceci:

new Assign<string> 
{ 
    To = new OutArgument<string>(variable), 
    Value = new InArgument<string>(
     env => Parameter.Get(env)); 
}, 
1

L'expression que vous définissez dans la A et la valeur sont en fait VisualBasicReference et VisualBasicValue. Le code équivalent pour votre XAML est:

new Assign<string> 
     { 
      To = new VisualBasicReference<string>("V1"), 
      Value = new VisualBasicValue<string>("Parameter") 
     };