2010-08-23 16 views
1

如何在重新主管的設計器中保存WF4工作流程的XAML,沒有將它寫入文件?我想將序列化的工作流作爲XML字符串存儲在數據庫中。保存在WF4 WorkflowDesigner中

給出一個WorkflowDesigner實例調用W,這樣可以節省精細文件:

WorkflowDesigner.Flush(); 
w.Save("filename.xaml"); 

我希望這將序列化到一個字符串 - 但它失敗:

WorkflowDesigner.Flush(); 
var modelService = WorkflowDesigner.Context.Services.GetService<ModelService>(); 
var workflow = modelService.Root; 
var xml = XamlServices.Save(workflow); 

...而保存單個序列活動,它表示「類型'System.Activities.Presentation.Model.ModelItemImpl'不可見。如果類型爲本地,請在XamlReaderSettings中設置LocalAssembly字段。

回答

3

是的,使用Flush()和Text將xaml作爲字符串。使用Save()保存到文件或流,在這種情況下不需要Flush()。

+0

Text屬性似乎在viewstate的XML中有一些額外的標籤,但它工作正常。 – Andrew 2010-08-24 08:26:43

+1

ViewState元素適用於設計人員,也可以保存到文件或流中。您可以安全地刪除所有額外的元素和屬性,並且您的工作流程將執行得很好。 VS的體驗,如調試和逐步瀏覽工作流程,將會降級。 – Maurice 2010-08-24 09:26:44

+0

@Maurice如何在執行工作流程之前刪除ViewState元素? – Pawan 2016-10-13 08:36:19

2

嗯,我沒有用過;該API似乎有點奇怪。但是從文檔看來,當您在WorkflowDesigner的實例上調用Flush()時,它將當前工作流程保存到名爲Text的公共屬性。你應該能夠抓住這些文本並將其保存在數據庫中。

docs

之前得到這個值,調用 同花順()來轉換當前 工作流程爲文本。設置此值 後,調用Load()將XAML 加載到工作流程中。