Создание фигур в 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