Создание фигур в Visio с помощью C#

Привет, мне нужно разработать надстройку для создания объектов диаграммы в Visio. Я могу создать верхнюю фигуру, но не ее производные типы. для EG я могу создать начальное событие в Visio, используя C#, но не могу создать начальное событие типа сообщения или других

На изображении выше у меня есть 3 стартовых события, хорошо было добавлено стартовое событие BPMN, и его свойство Trigger/Result было изменено

Начать событие - несколько

Начать событие - Сообщение

Начать событие - нет

но все вышеперечисленные 3 фигуры взяты из Start Event. Как создать событие запуска сообщения или многократный запуск и т. Д.

Я создаю фигуры в Visio, используя

            Visio.Master shapetodrop = Masters.get_ItemU(@"Start Event");
            Visio.Shape DropShape = ActivePage.Drop(shapetodrop, x, y);
            DropShape.Name = name;
            DropShape.Text = name;

но это только создает событие запуска, как создать событие запуска сообщения, событие множественного запуска и т. д.

2 ответа

Решение

Для итерации каждого свойства фигуры в Visio

  short iRow = (short)Visio.VisRowIndices.visRowFirst;
            while (shape.get_CellsSRCExists((short)Visio.VisSectionIndices.visSectionProp, iRow, (short)Visio.VisCellIndices.visCustPropsValue, (short)Visio.VisExistsFlags.visExistsAnywhere) != 0)
            {
                Visio.Cell c = shape.get_CellsSRC((short)Visio.VisSectionIndices.visSectionProp, iRow, (short)Visio.VisCellIndices.visCustPropsValue);
                         switch (c.Name)
                        {
                            case "Prop.BpmnTriggerOrResult":
                                shape.Cells[c.Name].FormulaU = "\"" + "Message" + "\"";
                                break;

                        }
}

и я могу получить сообщение о начале события. Как и это значение для всех свойств формы может быть назначено.

Я покажу вам ответ в VBA, и ожидать, что вы можете конвертировать в C#?

Microsoft в своей мудрости создала довольно сложные формы для BPMN, поэтому, как только вы установите EventType, список возможных TriggerOrResult обновится...

Public Sub DropEventShape()
On Error GoTo errHandler

'EventType is one of the following : "Start;Start (Non-Interrupting);Intermediate;Intermediate (Non-Interrupting);Intermediate (Throwing);End"

Const mstName As String = "Start Event"
Const eventType As String = "Start"
Const triggerOrResult As String = "Multiple"

Dim doc As Visio.Document
Dim stn As Visio.Document
Dim mst As Visio.Master

    For Each doc In Application.Documents
        If doc.Title = "BPMN Shapes" Then
            Set stn = doc
            Exit For
        End If
    Next
    If stn Is Nothing Then
        GoTo exitHere
    End If

    Set mst = stn.Masters(mstName)

Dim shp As Visio.Shape
Dim x As Double
Dim y As Double
    x = Application.ActivePage.PageSheet.Cells("PageWidth").ResultIU * 0.5
    y = Application.ActivePage.PageSheet.Cells("PageHeight").ResultIU * 0.5

    Set shp = Application.ActivePage.Drop(mst, x, y)

Dim iEventType As Integer
Dim aryEventTypes() As String

    aryEventTypes = Split(shp.Cells("Prop.BPMNEventType.Format").ResultStr(""), ";")
    For iEventType = 0 To UBound(aryEventTypes)
        If aryEventTypes(iEventType) = eventType Then
            Exit For
        End If
    Next
    shp.Cells("Prop.BPMNEventType").Formula = "=INDEX(" & iEventType & ",Prop.BPMNEventType.Format)"

Dim iTriggerOrResult As Integer
Dim aryTriggerOrResults() As String
    aryTriggerOrResults = Split(shp.Cells("Prop.BpmnTriggerOrResult.Format").ResultStr(""), ";")
    For iTriggerOrResult = 0 To UBound(aryTriggerOrResults)
        If aryTriggerOrResults(iTriggerOrResult) = triggerOrResult Then
            Exit For
        End If
    Next

    shp.Cells("Prop.BpmnTriggerOrResult").Formula = "=INDEX(" & iTriggerOrResult & ",Prop.BpmnTriggerOrResult.Format)"

exitHere:
    Exit Sub
errHandler:
    MsgBox Err.Description
    Resume exitHere
End Sub
Другие вопросы по тегам