Соединения рабочих процессов отображаются странно - PullRequest
0 голосов
/ 28 октября 2011

Привет! Я создаю рабочий процесс с C # WWF 4.0, и у меня возникают некоторые проблемы:

Мой тестовый код:

Flowchart flow = new Flowchart
{
    DisplayName = "Test",
    StartNode = new FlowSwitch<String> { Expression = "[prop1]" },
    Variables = { new Variable<String> { Name = "prop1" } },
};
FlowNode MySwitch = flow.StartNode;
flow.Nodes.Add(MySwitch);

Я сохраняю его:

StreamWriter sw = File.CreateText(@"../../test.xaml");
var xmlWriter = XmlWriter.Create(sw,
    new XmlWriterSettings { Indent = true, OmitXmlDeclaration = false });
    using (xmlWriter)
    {
        var xamlXmlWriter = new XamlXmlWriter(xmlWriter, new XamlSchemaContext());
        using (xamlXmlWriter)
        {
            XamlWriter xamlWriter = ActivityXamlServices.CreateBuilderWriter(xamlXmlWriter);
            using (xamlWriter)
            {
                var activityBuilder = new ActivityBuilder { Name = "Test", Implementation = Workflow };
                XamlServices.Save(xamlWriter, activityBuilder);
            }
        }
    }
    sw.Close();

и затем я получаю этот XAML:

<?xml version="1.0" encoding="utf-8"?>
<Activity x:Class="Test" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Flowchart DisplayName="Test">
    <Flowchart.Variables>
      <Variable x:TypeArguments="x:String" Name="prop1" />
    </Flowchart.Variables>
    <Flowchart.StartNode>
      <x:Reference>__ReferenceID0</x:Reference>
    </Flowchart.StartNode>
    <FlowSwitch x:TypeArguments="x:String" x:Name="__ReferenceID0" Expression="[prop1]" />
  </Flowchart>
</Activity>

, и когда я загружаю его в Visual Studio, я получаю этот рабочий процесс:

My Workflow

Iдумаю, что это неправильно, потому что дуга, начинающаяся с узла «Пуск», должна находиться под рамкой, а не над ней!

Если я добавлю другие шаги, они все соединятся, используя только положение over.

Что яя делаю не так?

1 Ответ

0 голосов
/ 28 октября 2011

Редактор просто использует свои значения по умолчанию при первом открытии XAML действия, потому что у него нет доступного состояния просмотра.

Если вы редактируете его через конструктор, просмотрите свойства состояния(т.е. размер, положение дизайнера и т. д.) добавляются в XAML:

<Activity mc:Ignorable="sap" x:Class="Test" sap:VirtualizedContainerService.HintSize="654,676" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Flowchart DisplayName="Test" sad:XamlDebuggerXmlReader.FileName="c:\users\jp-correia\desktop\WorkflowConsoleApplication1\WorkflowConsoleApplication1\test.xaml" sap:VirtualizedContainerService.HintSize="614,636" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces">
    <Flowchart.Variables>
      <Variable x:TypeArguments="x:String" Name="prop1" />
    </Flowchart.Variables>
    <sap:WorkflowViewStateService.ViewState>
      <scg:Dictionary x:TypeArguments="x:String, x:Object">
        <x:Boolean x:Key="IsExpanded">False</x:Boolean>
        <av:Point x:Key="ShapeLocation">240,72.5</av:Point>
        <av:Size x:Key="ShapeSize">60,75</av:Size>
        <av:PointCollection x:Key="ConnectorLocation">240,110 150,110 150,192.5</av:PointCollection>
      </scg:Dictionary>
    </sap:WorkflowViewStateService.ViewState>
    <Flowchart.StartNode>
      <FlowSwitch x:TypeArguments="x:String" x:Name="__ReferenceID0" Expression="%[prop1]" sap:VirtualizedContainerService.HintSize="60,75">
        <sap:WorkflowViewStateService.ViewState>
          <scg:Dictionary x:TypeArguments="x:String, x:Object">
            <av:Point x:Key="ShapeLocation">120,192.5</av:Point>
            <av:Size x:Key="ShapeSize">60,75</av:Size>
          </scg:Dictionary>
        </sap:WorkflowViewStateService.ViewState>
      </FlowSwitch>
    </Flowchart.StartNode>
    <x:Reference>__ReferenceID0</x:Reference>
  </Flowchart>
</Activity>

Может быть, вы можете что-то обработать с WorkflowViewStateService напрямую, но это наверняка доставит вам неприятности.Я бы не стал возиться с этим.

Каков ваш сценарий развития событий?Может быть, вам стоит использовать перепроектированный дизайнер для всего, чего вы пытаетесь достичь.

...