내 질문은 이와 비슷한 질문 때문에 반복되는 것으로 해석 될 수 있습니다. Workflow Foundation - Literal only supports value types and the immutable type System.String 사실, 위의 솔루션을 시도했습니다. 그리고 내가 찾을 수있는 많은 다른 시도들) 여전히 문제를 해결할 수 없었다.WorkflowInvoker.Invoke - 리터럴은 값 유형과 변경 불가능한 타입 만 지원합니다.
워크 플로 콘솔 응용 프로그램에서 DataTable을 내 자신의 CodeActivity로 보내고 Main으로 되돌리고 싶습니다.
namespace WorkflowConsolePOC
{
public sealed class MyCodeActivity : CodeActivity<DataTable>
{
public InArgument<string> Message { get; set; }
public InArgument<System.Data.DataTable> Entrada { get; set; }
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override DataTable Execute(CodeActivityContext context)
{
// Obtain the runtime value of the input arguments
string codeString = context.GetValue(this.Message);
//Get the DataTable
DataTable entrada = context.GetValue<DataTable>(Entrada);
//Alter the first row, first column
entrada.Rows[0][0] = "Altered";
return entrada;
}
}
}
가 내 사용자 정의 활동도
에 충돌되지 않습니다namespace WorkflowConsolePOC
{
class Program
{
static void Main(string[] args)
{
//Build some DataTable
DataTable dtb = new DataTable();
dtb.Clear();
dtb.Columns.Add("name");
dtb.Columns.Add("age");
DataRow row = dtb.NewRow();
row["name"] = "Thiago";
row["age"] = "33";
dtb.Rows.Add(row);
string msg = ("Some message" + Environment.NewLine + " Test purpose");
MyCodeActivity myCodeActivity = new MyCodeActivity();
myCodeActivity.Message = new InArgument<string>(msg);
//Passing the DataTable
//This is the solution given to the existing question:
myCodeActivity.Entrada = new InArgument<DataTable>(ExpressionServices.Convert((env) => dtb));
//This was my attempt which results in the same exception, but with 'Literal<DataTable>':...
//myCodeActivity.Entrada = new InArgument<DataTable>(dtb);
dtb = WorkflowInvoker.Invoke<DataTable>(myCodeActivity); // <==== Error
//Read the first row of the resulting DataTable
Console.WriteLine(dtb.Rows[0][0].ToString());
}
}
}
는 그리고 이것은 MyCodeActivity 코드입니다. WorkflowInvoker.Invoke에 오류가 나타납니다.
'리터럴 < <> c__DisplayClass0>'리터럴 값 만 유형 및 불변 선택 System.String 타입을 지원한다. 형식 WorkflowConsolePOC.Program + <> c__DisplayClass0은 리터럴로 사용할 수 없습니다.
무엇이 여기에 있습니까? 나는 이것을 3 일 동안 붙들고있다. 친절하게 도움을 요청합니다. 감사!