2015-10-07 122 views
5

嗨,我需要开发一个插件,用于在visio中创建图表对象。我能够创建顶部形状,但不能创建其派生类型。 为EG我能够使用C#在Visio以创造启动事件,但无法创建消息类型的启动事件或其他 enter image description here使用c#在visio中创建图形

在上面的图片我有3个启动事件,以及在BPMN启动事件并将其属性触发器/结果选项改为

启动事件 - 多

启动事件 - 消息

开始事件 - 无

但是以上所有3种形状均来自Start Event。如何创建消息开始的事件或多个开始EVET等

我使用

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

创造Visio形状,但这只是创建启动事件,如何创建的留言开始时,多启动事件等

回答

3

迭代在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; 

         } 
} 

我可以得到消息开始事件。像这个形状的所有属性的值都可以分配。

0

我会告诉你在VBA的答案,并期望你可以转换为C#?

微软在创建相当复杂形状的BPMN自己的智慧,所以,一旦你通过一个形状的每个属性设置的事件类型,名单可能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 
+0

感谢您的回复:) :) – Arshad