Как читать Visio Process Flow - PullRequest
0 голосов
/ 10 марта 2020

Есть ли способ прочитать процесс потока Visio потока. если у нас есть документ Visio, подобный приведенному ниже, могу ли я прочитать процесс как «От начала до процесса 1», затем от процесса 1 до решения 1. Если решение 1 - «Да», то процесс 3 или «Процесс 2». От процесса 3 до конца. От процесса 2 к решению 2 и т. Д. c ..

enter image description here

Можно ли читать, как указано выше, с помощью макроса в Visio или с помощью C# из Visual Studio.

1 Ответ

1 голос
/ 12 марта 2020

Visio имеет модель автоматизации, которая позволяет вам писать код, который будет делать то, что вы хотите. Visio имеет встроенный VBA (Visual Basi c для приложений), поэтому вы можете быстро начать работать с кодом. Принимая во внимание, что создание надстройки VSTO в C# или VB. NET требует гораздо больше усилий для начала работы.

Пока соединители правильно приклеены к фигурам, вы можете проследить структуру диаграммы. Не совсем очевидно, как это сделать, но я могу предложить несколько советов от макушки головы. Если ничего другого, то термины, которые я упоминаю ниже, помогут в поиске примеров кода и ссылок API.

Боксы называются «2D» фигурами в Visio, а соединители называются «1D». Вы можете обнаружить "1D" фигуры, запросив свойство shape.OneD.

2D-фигуры имеют объекты "FromConnects", а 1D-фигуры имеют объекты "Connects". Соединяемые объекты по существу инкапсулируют склеенный конец соединителя. С помощью объекта Connects вы можете получить конец склеиваемого коннектора (Begin или End) и то, к чему он приклеивается (конкретная точка соединения или вся форма).

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

Начальные точки можно найти, выполнив поиск блоков, которые не имеют входящих соединений. На языке Visio это означает, что ни один из разъемов не имеет концевого соединения, приклеенного к форме. (Соединители имеют начало и конец).

Я уверен, что у меня где-то есть образцы, но я не в том месте, где я могу их искать в данный момент. Вот примерный, непроверенный код, который может помочь вам начать:

Public Sub AnalyzePage

  Dim pg As Visio.Page
  Set pg = Visio.ActivePage

  Dim shp As Visio.Shape
  For Each shp in pg.Shapes

    If (shp.OneD) Then
      '// This is a connector:
      '// We could examine shp.Connects to find out which
      '// boxes it is glued to.
    Else
      '// This is not a connector...a box:
      If (shp.FromConnects.Count > 0) Then
        '// FromConnects are the other side of Connects. We can look
        '// at each FromConnect object for this shape and determine if
        '// the connector is incoming or outgoing from this shape, and
        '// (with a bit of work) figure out the box on the other end
        '// of the connector.
      End If
    End If

  Next shp


End Sub
...