Подтвердить что ты не робот

WF4 - отобразить изображение рабочего процесса в asp.net и выделить действие

Мне нужно отобразить текущее состояние задачи рабочего процесса утверждения документа на веб-странице asp.net с выделенным конкретным действием.

Я видел пример отслеживания рабочего процесса Visual (в примерах wf и wcf), но у меня есть две проблемы,

  • Мне нужно обработать рабочий процесс в asp.net не в приложении WPF.

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

Если бы я мог просто преобразовать XAML рабочего процесса в JPG после выделения определенного действия по идентификатору активности, "который создал закладку и ожидал возобновления закладки", это сделало бы работу.

проверьте прикрепленный файл на требуемое изображение рабочего процесса, которое будет отображаться на странице asp.net:

Выбран рабочий процесс с текущей активностью (который ждет возобновления)

4b9b3361

Ответ 1

Сначала загрузите рабочий процесс в конструктор.

Вы уже должны знать "активность", которую вы хотите выделить. В рабочем процессе есть выбор, который вы можете использовать для выбора соответствующих элементов модели. В этом примере показан единственный выбор, но есть несколько.

ModelService modelService = wd.Context.Services.GetService<ModelService>();
        IEnumerable<ModelItem> activityCollection = modelService.Find(modelService.Root, typeof(Activity));
        Selection.Select(wd.Context, activityCollection.ElementAt(5));

В дизайнере рабочего процесса есть кнопка для копирования рабочего процесса как изображения или чего-то в этом направлении. Эта ссылка покажет вам, как получить jpg из WorkflowDesigner.View. http://social.msdn.microsoft.com/Forums/en-US/wfprerelease/thread/b781c8df-608a-485a-80e3-a795d800f08d

        const double DPI = 96.0;

        Rect size = VisualTreeHelper.GetDescendantBounds(view);
        int imageWidth = (int)size.Width;
        int imageHeight = (int)size.Height;

        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(imageWidth, imageHeight, DPI, DPI, PixelFormats.Pbgra32);
        renderBitmap.Render(view);
        BitmapFrame bf = BitmapFrame.Create(renderBitmap);

        using (FileStream fs = new FileStream(@"c:\test.jpg", FileMode.Create))
        {
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bf));
            encoder.Save(fs);
            fs.Close();
        }

В качестве дополнительной заметки вы должны проверить пример Kushals: http://blogs.msdn.com/b/kushals/archive/2009/12/22/visualworkflowtracking-aka-workflowsimulator.aspx