我有一個WF(4.5)工作流活動創建一個子工作流(評估VisualBasicValue表達式)。我需要結果之前我完成父級工作流程。如何安排孩子活動在父母完成之前執行*?
我的表達式添加到元數據是這樣的:
private VisualBasicValue<string> _expression;
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
var visualBasicValue = (VisualBasicValue<string>)(_childActivity.Text.Expression);
var expressionText = visualBasicValue.ExpressionText;
_expression = new VisualBasicValue<string>(expressionText);
metadata.AddChild(_expression);
}
我試圖調度活動在Execute方法是這樣的:
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(context, _expression, OnCompleted);
Result.Set(context, _value);
}
隨着回調:
private void OnCompleted(NativeActivityContext context, ActivityInstance completedInstance, string result)
{
_value = result;
}
不幸的是,_表達活動僅在之後執行父級的執行方法返回。將它作爲實現子代添加不起作用(它不能用作實現子代,因爲它應該計算包含父代外部變量的表達式)。
任何想法如何克服這一點,並在執行環境內執行?
我錯過了你的最後一段。顯然,如果你需要在上下文中執行它,這將不起作用。我不記得另一個好的解決方案。當我沒有你的背景時,總是很難說這一點,但我的猜測是你應該退後一步。如果你最終在這裏,那麼實現本質上是錯誤的。 – Joao
我試圖解決的問題是我需要採取兒童活動,而不是執行它,我需要解析它(包括評估孩子的屬性),並運行另一個過程。例如,不是運行編譯器活動(在TFS中),而是運行具有相同屬性的另一個編譯器。 –
爲什麼你不把邏輯從「孩子活動」中放到一個單獨的活動中,只要你需要評估表達式就可以調用它。再說一次,似乎你採取了錯誤的做法,而不是從一開始就修復它,你試圖補救一些不可能的事情。 – Joao