Сохранение в WF4 WorkflowDesigner - PullRequest
       14

Сохранение в WF4 WorkflowDesigner

2 голосов
/ 23 августа 2010

Как сохранить XAML для рабочего процесса WF4 в перепроектированном конструкторе, без записи его в файл? Я хочу сохранить сериализованный рабочий процесс в базе данных в виде строки XML.

С учетом экземпляра 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);

... при сохранении одного действия Sequence говорится, что «Type 'System.Activities.Presentation.Model.ModelItemImpl' не отображается. Если тип локальный, установите поле LocalAssembly в XamlReaderSettings.

Ответы [ 3 ]

3 голосов
/ 24 августа 2010

Да, используйте Flush () и Text, чтобы получить xaml в виде строки. Используйте Save () для сохранения в файл или поток, в этом случае Flush () не требуется.

2 голосов
/ 23 августа 2010

Хммм, я этим не пользовался;API кажется немного ... странным.Но из документов видно, что при вызове Flush() для экземпляра WorkflowDesigner текущий рабочий процесс сохраняется в открытом свойстве с именем Text.Вы должны быть в состоянии захватить этот текст и просто вставить его в свою базу данных.

Из документов :

Перед получением этого значения вызовите Flush () преобразовать текущий рабочий процесс в текст.После установки этого значения вызовите Load (), чтобы загрузить XAML в рабочий процесс.

1 голос
/ 05 сентября 2010

Использование ActivityXamlServices и StringWriter для сброса содержимого в строку.

...