2013-03-26 55 views
4

我有一個活動,我宣佈了一個沒有類型的InArgument(因爲我想知道設計時錶達式的類型)。通用InArgument拋出一個異常,試圖獲取值

當我執行的活動我得到這個錯誤在VAR contentTelegram行:

"The argument of type '<type>' cannot be used. Make sure that it is declared on an activity." 

這裏是我的代碼:

public InArgument Content { get; set; } 


protected override PlcMessage Execute(CodeActivityContext context) 
     { 

      try 
      { 
       var contentTelegram = Content.Get(context); 

       return new PlcMessage(); 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 


     } 

回答

3

這裏是我做過什麼:

工作流運行時需要知道參數中使用的類型,因此cacheMetadata是使其工作的關鍵,CacheMetadata使用反射來了解參數,注意只適用於簡單情況。

public sealed class MyActivity: CodeActivity 
{ 
    private RuntimeArgument outMyRuntimeArgument; 

    // Define an activity input argument of type string 
    public OutArgument MyUntypedArgument { get; set; } 


    protected override void CacheMetadata(CodeActivityMetadata metadata) 
    { 
     outMyArgument= new RuntimeArgument("MyUntypedArgument", MyUntypedArgument.ArgumentType, ArgumentDirection.Out); 
     metadata.Bind(MyUntypedArgument, outArgument); 
     metadata.AddArgument(outMyArgument); 
    }  


    protected override void Execute(CodeActivityContext context) 
    { 
     context.SetValue(outMyRuntimeArgument, Activator.CreateInstance(Type)); 
    } 
}