2009-04-09 4 views
0

WorkflowMarkupSerializer를 사용하여 상태 워크 플로를 저장합니다. 상태는 저장하지만 위치는 유지하지 않습니다. 워크 플로우를 작성하는 코드는 여기에 있습니다 :WorkflowMarkupSerializer가 상태 시스템 워크 플로에서 위치를 유지하지 않습니다.

 using (XmlWriter xmlWriter = XmlWriter.Create(fileName)) 
     { 
      WorkflowMarkupSerializer markupSerializer 
       = new WorkflowMarkupSerializer(); 
      markupSerializer.Serialize(xmlWriter, workflow); 
     } 

코드 워크 플로우가 읽기 :

  DesignerSerializationManager dsm 
      = new DesignerSerializationManager(); 
     using (dsm.CreateSession()) 
     { 
      using (XmlReader xmlReader 
       = XmlReader.Create(fileName)) 
      { 
       //deserialize the workflow from the XmlReader 
       WorkflowMarkupSerializer markupSerializer 
        = new WorkflowMarkupSerializer(); 
       workflow = markupSerializer.Deserialize(
        dsm, xmlReader) as Activity; 

       if (dsm.Errors.Count > 0) 
       { 
        WorkflowMarkupSerializationException error 
         = dsm.Errors[0] 
          as WorkflowMarkupSerializationException; 
        throw error; 
       } 
      } 
     } 

답변

0

확인, this tutorial 그것을 수행하는 방법에 대한 좋은 정보를 제공합니다 - 지금까지 내가 레이아웃 저장 만 할 생각하지만, 내가 제대로 사용 배치 할 수 없었다. 문제의 정보는 약 2/2/3 다운 (또는 .layout에 대한 검색 할) (하나가 자신의 질문을 닫습니다 않습니다 어떻게?)

중 하나를 직렬화 또는 직렬화에 버그가 있다는 사실을

0

이 하 석, 비주얼 스튜디오 2008에서 호스팅도 워크 플로 디자이너가 무작위로 국가의 위치를 ​​잃는다. 이것은 아마 쉬운 일이 아니며 그것을 구성하는 활동의 외부 정보입니다. 나는 정보를 위해 주인의 주위에 더 많은 것을 파낼 것이다; 내가 뭔가를 찾으면 나는 다시 올릴거야.

0

모든 상태의 위치는 별도의 파일에 보관됩니다. 워크 플로 자체의 마크 업과 함께 드래그해야합니다. 다행히 XML 뿐이므로 그곳에있는 대부분의 코드를 재사용 할 수 있습니다. 메모리가 작동한다면 NameOfYourWorkflow.layout이라고 생각합니다.

x0n에 동의합니다. 디자이너는 Visual Studio에서 실제로 나쁩니다.

0

주 생성 된 XML의 (.layout의 확장과 예에 이름.)

그것은 파일의 첫 번째 줄 다음 XML을 생성합니다

<?xml version="1.0" encoding="utf-8"?><StateMachineWorkflowDesigner xmlns:ns0="clr-namespace:System.Drawing;Assembly=System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Name="New" Location="30, 30" Size="519, 587" AutoSizeMargin="16, 24" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> 

이 다시 읽기의 크기 att ribute 예외가 발생합니다. 파일에서 Size = "519, 587"을 제거 했으므로 워크 플로가 올바르게 다시로드되었습니다. 지금 당장 파일을 작성하고 열어 크기를 제거한 다음 닫습니다. 좀 더 세련된 솔루션에 대해 생각해 볼 필요가 있지만 적어도 현재 상태 시스템 워크 플로를 저장하고 복원하고 있습니다.

1

열기 제어판 -> "국가 및 언어 옵션"을로 설정 목록 구분 ','(쉼표) 및 시리얼 라이저는 X에 대한 구분자로 (쉼표) ','사용하는 워크 플로우, Y는 구조체 SizeF

좌표

그런 다음 ';'을 선택하십시오. 워크 플로우 시리얼 라이저는 ';' (세미콜론)을 구분자로 사용합니다.

이 serializer가 마크 업 직렬화에 지역 설정을 사용한다는 것은 정말 바보입니다.

관련 문제