CodeActivity InArgument <t>访问T </t>的值

时间:2012-12-21 15:40:21

标签: workflow-foundation-4 workflow-activity

我有点扭曲,比我想象的要麻烦一点。通常我会有一个InArgument并使用它如下:

public InArgument<Int32> XYZ_ID { get; set; }
public InArgument<Int32> XYZ_COUNT { get; set; }

protected override IAsyncResult BeginExecute(...)
{
....snip....
_ABC_ID = XYZ_ID.Get(context),
_ABC_Count = XYZ_COUNT.Get(context)

这很好用,我认为一个自定义对象我们接近同一个过程,但我似乎无法弄明白。 ActvUsrPrgmResults只是一类属性,如AccountName,FirstName等。所以我像其他类型一样传递它。

public InArgument<bool> IsHappy { get; set; }
public InArgument<bool> IsClapping { get; set; }
public InArgument<ActvUsrPrgmResults> itm_ActvUsrPrgm { get; set; }

虽然访问它对我来说有点困难。

protected override void Execute(CodeActivityContext context)
{
    NewPerson x = new NewPerson
    {
        AccountName = this.itm_ActvUsrPrgm.Get(?????
        //this doesn't work either
        AccountName = itm_ActvUsrPrgm.?????

换句话说,我看不到如何访问itm_ActvUsrPrgm InArgument的属性。

感谢您的帮助或指导 JB

其他信息

我在ForEach(List)中有这个CodeActivity。因此,泛型集合中的每个项目都是ActvUsrPrgmResults的单个实例。所以我把它交给我的CodeActivity思考我将有一个句柄来操纵该项目的数据????

有趣

现在根据威尔的评论,我开始思考这一点。它有效但不应该有更优雅的方法吗?

public InArgument<bool> IsHappy { get; set; }
public InArgument<bool> IsClapping { get; set; }
public InArgument<ActvUsrPrgmResults> itm_ActvUsrPrgm { get; set; }

protected override void Execute(CodeActivityContext context)
{
    ActvUsrPrgmResults y = itm_ActvUsrPrgm.Get(context);
    NewPerson x = new NewPerson
    {
        AccountName = y.AccountName....

1 个答案:

答案 0 :(得分:1)

问题在于我,我自己和我。我无法处理传入的对象。对于一些隐藏的原因,在您牢牢掌握确切的问题之前,“InArgument”无法立即获取来自给定上下文的对象。我不确定,但我怀疑这是由于多个工作流运行所以你不能只抓住任何ole对象,你必须从正确的上下文中获取对象。无论如何,这是我对内联学习的评论。

public InArgument<bool> IsHappy { get; set; } //bool variable being passed in
public InArgument<bool> IsClapping { get; set; } //bool variable being passed in
public InArgument<ActvUsrPrgmResults> itm_ActvUsrPrgm { get; set; } //custom object being passed in

protected override void Execute(CodeActivityContext context)
{
    bool Happy = context.GetValue(this.IsHappy);
    bool Clap = context.GetValue_this.IsClapping);
    ActvUsrPrgmResults y = context.GetValue(this.itm_ActvUsrPrgm);
    //NOW!!! we have a handle to the proper objects for this context

    //This also works. I just flip flopped the InArgument property and the context.
    ActvUsrPrgmResults y = itm_ActvUsrPrgm.Get(context);

    NewPerson x = new NewPerson
    { 
        AccountName = y.AccountName....