.NET - рабочий процесс, диаграммы конечного пользователя, отражение - PullRequest
2 голосов
/ 01 сентября 2009

Существуют ли какие-либо инструменты, которые могут отражать сборки Windows Workflow или SharePoint Workflow и генерировать .png или другой тип изображения для представления пользователю? Динмически через ASP.NET? Или, если ничего подобного нет ... как предоставить документацию / документацию для конечного пользователя?

Я бы заинтересовался бесплатными или несвободными инструментами.

1 Ответ

0 голосов
/ 01 сентября 2009

`В зависимости от ваших потребностей / желаний можно использовать конструктор рабочих процессов несколькими способами.

Прежде всего вы можете сохранить изображение рабочего процесса с помощью одного из меню. Это довольно статично, и вам нужно что-то делать во время разработки.

Более гибким является возможность перенести дизайнер рабочего процесса в ваше приложение и сгенерировать изображение на лету. Код ниже взят из консольного приложения, но я сделал то же самое внутри ASP.NET. Основная проблема заключается в том, что дизайнер был создан для использования в Visual Studio, которая работает во всем в потоке MTA, тогда как ASP.NET использует потоки STA. Просто создайте новый поток MTA, выполните код и дождитесь его завершения в основном потоке ASP.NET STA, и все готово.

Imports System.ComponentModel.Design
Imports System.ComponentModel.Design.
Imports System.Drawing.Imaging
Imports System.Workflow.Activities
Imports System.Workflow.ComponentModel
Imports System.Workflow.ComponentModel.Design

Module Module1
Sub Main()
    Dim workflow AsNew SequentialWorkflowActivity
    workflow.Activities.Add(New DelayActivity())

    Dim loader AsNew WorkflowLoader(workflow)
    Dim surface AsNew DesignSurface
    surface.BeginLoad(loader)
    Dim view AsNew WorkflowView(CType(surface, IServiceProvider))
    view.SaveWorkflowImage("workflow.png", ImageFormat.Png)

    Process.Start("workflow.png")
End Sub
End Module


Public Class WorkflowLoader
Inherits WorkflowDesignerLoader

Private _workflowDefinition As Activity

SubNew(ByVal workflowDefinition As Activity)
    _workflowDefinition = workflowDefinition
EndSub

ProtectedOverridesSub PerformLoad(ByVal serializationManager As IDesignerSerializationManager)
    MyBase.PerformLoad(serializationManager)

    Dim designerHost As IDesignerHost = Me.GetService(GetType(IDesignerHost))
    Dim allActivities As List(Of Activity) = WorkflowUtils.GetAllActivities(_workflowDefinition)

    ForEach item As Activity In allActivities
        designerHost.Container.Add(item, item.QualifiedName)
    Next
EndSub

Public Overrides ReadOnly Property FileName() As String
    Get
        Return""
    EndGet
End Property

PublicOverridesFunction GetFileReader(ByVal filePath AsString) As System.IO.TextReader
    ThrowNew NotSupportedException()
End Function

Public Overrides Function GetFileWriter(ByVal filePath AsString) As System.IO.TextWriter
    Throw New NotSupportedException()
End Function
End Class
...