2013-03-14 76 views
0

我將自定義變量類型從一個操作傳遞給工作流中的另一個操作。這裏是自定義對象windows工作流基礎 - 在工作流中的不同活動之間傳遞自定義變量

 public class ConfigDatabase 
     { 
      public string Name; 
      public string Host; 
      public string Port; 
      public string Instance; 
      public string User; 
      public string Password; 
     } 

     public class ConfigDatabases 
     { 
      public string DatabaseToUse; 
      public List<ConfigDatabase> DatabaseList; 

      public ConfigDatabases() 
      { 
       DatabaseList = new List<ConfigDatabase>(); 
      } 
     } 

     public class ConfigEnvironment 
     { 
      public ConfigDatabases EnvironmentConfigDatabase; 

      public ConfigEnvironment() 
      { 
       EnvironmentConfigDatabase = new ConfigDatabases(); 
      } 

      public ConfigDatabase ReturnDatabaseInfo() 
      { 
       ConfigDatabase ConfigDatabaseInfo = new ConfigDatabase(); 
       for (int Count1 = 0; Count1 < EnvironmentConfigDatabase.DatabaseList.Count; Count1++) 
       { 
        if (EnvironmentConfigDatabase.DatabaseList[Count1].Name == EnvironmentConfigDatabase.DatabaseToUse) 
        { 
         ConfigDatabaseInfo = EnvironmentConfigDatabase.DatabaseList[Count1]; 
         return ConfigDatabaseInfo; 
        } 
       } 
       return ConfigDatabaseInfo; 
      } 

      public string GetDatabaseConnectionString() 
      { 
       ConfigDatabase DatabaseInfo = ReturnDatabaseInfo(); 
       string ConnectionString = "Data Source=(description=(address=(protocol=tcp)(host=" + DatabaseInfo.Host + ")(port=" + DatabaseInfo.Port + "))(connect_data=(sid=" + DatabaseInfo.Instance + ")));User ID=" + DatabaseInfo.User + ";Password=" + DatabaseInfo.Password + ";"; 
       return ConnectionString; 
      } 
     } 

的定義期間動作的第一步驟中,它會運行下面的代碼來加載在被在函數返回的對象(ConfigEnvironment)從一個文件和存儲的配置數據執行

public sealed class InitializeEnvironment : CodeActivity<ConfigEnvironment> 
{ 
    // Define an activity input argument of type string 
    public InArgument<string> EnvironmentFileLocation { get; set; } 

    // If your activity returns a value, derive from CodeActivity<TResult> 
    // and return the value from the Execute method. 
    protected override ConfigEnvironment Execute(CodeActivityContext context) 
    { 
     // Obtain the runtime value of the Text input argument 
     string EnvironmentFile = context.GetValue(this.EnvironmentFileLocation); 
     EnvironmentConfigInitialization EnvironmentInitialize = new EnvironmentConfigInitialization(EnvironmentFile); 
     ConfigEnvironment EnvironmentDetail = EnvironmentInitialize.LoadData(); 
     return EnvironmentDetail; 
    } 
} 

在工作流程的後續活動中,我想獲取存儲在此對象中的數據。但是,下面的代碼會產生編譯錯誤,因爲EnvironmentDetail對象找不到GetDatabaseConnectionString函數。

public sealed class ExecuteSQL : CodeActivity<DataRowCollection> 
{ 
    // Define an activity input argument of type string 
    public InArgument<string> SQLScript { get; set; } 
    public InArgument<ConfigEnvironment> EnvironmentDetail { get; set; } 

    // If your activity returns a value, derive from CodeActivity<TResult> 
    // and return the value from the Execute method. 
    protected override DataRowCollection Execute(CodeActivityContext context) 
    { 

     string connectionString4 = EnvironmentDetail.GetDatabaseConnectionString(); //This create a compile error 

} 

}

的編譯警告是下列 「System.Activities.InArgument」不包含關於「GetDatabaseConnectionString」和沒有擴展方法的定義「GetDatabaseConnectionString」接受類型的第一個參數「系統.Activities.InArgument」可以找到(是否缺少using指令或程序集引用?)

回答

0

事實證明,EnvironmentDetailInArgument類型(或InArgument<ConfigEnvironment>),但不類型ConfigEnvironment你需要做一個context.Get<ConfigEnvironment>()獲得類型ConfigEnvironment的變量。

讓我知道這是否解決了您的問題,或者如果還有其他問題仍然存在錯誤;-)

相關問題