Dah Sra
Dah Sra

Reputation: 4425

Creating Shapes in visio using c#

Hi i need to develop an addin for creating diagram objects in visio.I am able to create the top shape but not its derived types . for EG i am able to creat Start event in visio using c#, but couldn't create Start Event of message type or others enter image description here

In the above picture i have 3 start event , well the BPMN Start Event was added and its property Trigger/Result option was changed

Start Event - Multiple

Start Event - Message

Start Event - None

but all the above 3 shapes are from Start Event. How to create the Message start event or Multiple start evet etc.

I am creating shapes in visio using

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

but this only creates Start Event , how to create Message Start EVent , Multiple Start Event etc

Upvotes: 5

Views: 1070

Answers (2)

Dah Sra
Dah Sra

Reputation: 4425

For iteration through each property of a shape in 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;

                        }
}

and i can get Message start event. Like this value for all the property of a shape can be assigned.

Upvotes: 3

David Parker
David Parker

Reputation: 519

I will show you the answer in VBA, and expect that you can convert to C#?

Microsoft in their wisdom created quite complex shapes for BPMN, so, once you have set the EventType, the list for the possible TriggerOrResult is updated...

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

Upvotes: 0

Related Questions