powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Visio automation
46 сообщений из 46, показаны все 2 страниц
Visio automation
    #38897556
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!
Пытаюсь на c# (можно и на VBA) читать диаграмму UML Деятельность. При считывании очередного Shape необходимо:
1. прочитать содержимое поля "Документация" этого shape, а также
2. прочитать данные, записанные ранее вручную в форме "Свойства состояния UML" - Категории/Именованные значения. Например, надо прочитать именованное значение по имени, скажем, "propability", которое раньше внес создатель диаграммы вручную.
Непонятно как получить доступ к значениям этих полей?

Заранее благодарю!
...
Рейтинг: 0 / 0
Visio automation
    #38897572
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточню, запись макроса в ходе изменение этих данных (документация и Именованные значения) вручную не дает эффекта - в макрос ничего, что касается такого рода свойств не пишется.
...
Рейтинг: 0 / 0
Visio automation
    #38897788
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1,

по имени не получиться - только по индексу.
...
Рейтинг: 0 / 0
Visio automation
    #38897802
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos, можно и по индексу, но какое свойство читать?
...
Рейтинг: 0 / 0
Visio automation
    #38897922
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как прочитать любое значение тега элемента, заданное вручную при разработке диаграммы?

На картинке - свойства элемента Состояние UML, в которых создан тег "P". Его значение 0.0005 и надо прочитать в программе, анализирующей диаграмму:

foreach (Visio.Shape iShape in ...)
{
iShape.Name ...

iShape.?????
}
...
Рейтинг: 0 / 0
Visio automation
    #38897953
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgosgsv1, по имени не получиться - только по индексу.
Хотя можно самому имена задать. Как-то коряво получилось. Кто поправит?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Public Function fncVS_ProcList_NewPropirties() As Boolean
'всем шэйпам Process присваевает свои новые данные
'On Error GoTo Err01:
Dim vsDoc As Visio.Document
Dim vsPage As Visio.Page
Dim vsSp As Visio.Shape
Dim ii%, jj%

Set vsDoc = ThisDocument
Set vsPage = vsDoc.Pages(1)

For Each vsPage In vsDoc.Pages 'листы Visio
Debug.Print vsPage.Name
If vsPage.Shapes.Count > 0 Then
    Set vsSp = vsPage.Shapes(1)
    Else
    GoTo NextPg:
    End If
    
    For Each vsSp In vsPage.Shapes
        If VBA.Left(vsSp.NameU, 7) <> "Process" Then
            GoTo NextSh:
            End If
        Debug.Print vsSp.Name, vsSp.Text '
        With vsSp
            vsSp.DeleteSection visSectionProp
            vsSp.AddSection visSectionProp
            vsSp.AddRow visSectionProp, 0, 0
            'On Error Resume Next
            For jj = 0 To 7 'удаляем созданные по умолчанию для процесса
                vsSp.DeleteRow visSectionProp, 0
            Next jj
            
            For jj = 0 To 3 'создаем нужное число строк свойств
                vsSp.AddRow visSectionProp, 0, 0
            Next jj 'vsSp.AddRow visSectionProp, 0, 0
            
            .CellsSRC(visSectionProp, 0, visCustPropsValue).RowName = "ProcessCode"
            .CellsSRC(visSectionProp, 1, visCustPropsValue).RowName = "ProcessName"
            .CellsSRC(visSectionProp, 2, visCustPropsValue).RowName = "PartCode"
            .CellsSRC(visSectionProp, 3, visCustPropsValue).RowName = "PartName"
                
            .CellsSRC(visSectionProp, 0, visCustPropsValue).Formula = """T000.000"""
            .CellsSRC(visSectionProp, 1, visCustPropsValue).Formula = """Название T000.000"""
            .CellsSRC(visSectionProp, 2, visCustPropsValue).Formula = """00000.0"""
            .CellsSRC(visSectionProp, 3, visCustPropsValue).Formula = """Название подразделения 00000.0"""
            
            'просто просмотрим что получилось
            For jj = 0 To 3
                Debug.Print .CellsSRC(visSectionProp, jj, visCustPropsValue).RowName, .CellsSRC(visSectionProp, jj, visCustPropsValue).Formula
            Next jj
        
        End With
NextSh:    Next 'vsSp
NextPg: Next 'vsPage

Exit Function
Err01:
MsgBox ("Ошибка функции:  fncVS_ProcList_NewPropirties" & vbCrLf & Err.code & " - " & Err.Description)
End Function
...
Рейтинг: 0 / 0
Visio automation
    #38898022
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

если использовать CellsSRC, то можно получить доступ к ShapeSheet - это я знаю. Однако в данном случае необходимо читать "свойства состояния" (см. картинку выше), и именно Именованные значения. К сожалению, если их задать, то они не отображаются в ShapeSheet - проверял :(

Спасибо за попытку помочь, но это не то, что надо.
...
Рейтинг: 0 / 0
Visio automation
    #38898111
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1Bobgos,
если использовать CellsSRC, то можно получить доступ к ShapeSheet - это я знаю. Однако в данном случае необходимо читать "свойства состояния" (см. картинку выше), и именно Именованные значения. К сожалению, если их задать, то они не отображаются в ShapeSheet - проверял :(
Спасибо за попытку помочь, но это не то, что надо.
Жаль, .... я скорее сам нуждаюсь в помощи, просто не так много инфо по свойствам и методам vba в visio решил кинуть так как понял.
А что за статусы - вообще понятия не имею. Может примерчик файла приложите для разбора?

по моему примеру как по русскому названию поля найти его? пол дня перебираю cells - безрезультатно. Внесенное в
Код: vbnet
1.
.CellsSRC(visSectionProp, 0, visCustPropsValue).Formula 


не отображается в окне привязки или рисунка данных, только в свойствах шэйпа.
...
Рейтинг: 0 / 0
Visio automation
    #38898245
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgosя скорее сам нуждаюсь в помощи, просто не так много инфо по свойствам и методам vba в visio решил кинуть так как понял.
А что за статусы - вообще понятия не имею.
по ходу все что касается UML в визио реализовано с помощью аддона UML Background Add-on
например вызов свойства состояния UML вызывается из меню Actions так
Код: vbnet
1.
RUNADDONWARGS("UML Background Add-on","/CMD=1001")


как добраться до потрохов этого аддона, я тоже не знаю
...
Рейтинг: 0 / 0
Visio automation
    #38898273
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Положил документ Visio (по предложению Bobgos)

Surrogate, но ведь дополнительные свойства шейпов есть не только у UML, а например у ER и многих других. Должен быть какой-то метод работы с ними...
...
Рейтинг: 0 / 0
Visio automation
    #38898306
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsv1но ведь дополнительные свойства шейпов есть не только у UML, а например у ER и многих других. Должен быть какой-то метод работы с ними... скорее всего эти многие тоже работают под управлением собственных аддонов. у меня в системе их под 100 штук
через шейпшит и vba до них недобраться :(
...
Рейтинг: 0 / 0
Visio automation
    #38898321
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Surrogate,

Хм, а как же тогда работают разные пользовательские надстройки, реализующие специфические отчеты и др. Функциональность?
Шейпшит действительно не содержит этих свойств, но где то они хранятся... Хотелось бы найти!
...
Рейтинг: 0 / 0
Visio automation
    #38898479
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Surrogategsv1но ведь дополнительные свойства шейпов есть не только у UML, а например у ER и многих других. Должен быть какой-то метод работы с ними... скорее всего эти многие тоже работают под управлением собственных аддонов. у меня в системе их под 100 штук
через шейпшит и vba до них недобраться :(
Например:
Код: vbnet
1.
2.
3.
For ii = 1 To 100
Debug.Print ii, Addons.Item(ii).Name
Next ii

выдает 93 шт.
среди них с id 62 _ Фоновая настройка UML (или UML Background Add-on)
Это он? Тогда соглашусь с Surrogate - у него в модели нет практически ничего.

gsv1,
Какую задачу нужно решить. Даже не представляю что должно сподвигнуть использовать UML?
...
Рейтинг: 0 / 0
Visio automation
    #38898492
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

надо нарисовать дерево, подобное тому, которое я привел выше. Графическая структура дерева затем должна быть переведена в некоторое внутреннее представление. В этом дереве во внутреннем представлении нужно будет выполнять разные обработки, например искать возможные пути до корня от вершин с определенными характеристиками, удовлетворяющие некоторым ограничениям.
Идея в том, чтобы рисовать дерево в развитой среде, типа Visio. Можно конечно и не UML, но диаграмма активности вполне подходит по смыслу.

Вообще то в Visio есть ведь forvard ingeneiring для баз данных, задача подобная...
...
Рейтинг: 0 / 0
Visio automation
    #38898592
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1Bobgos,

надо нарисовать дерево, подобное тому, которое я привел выше. Графическая структура дерева затем должна быть переведена в некоторое внутреннее представление. В этом дереве во внутреннем представлении нужно будет выполнять разные обработки, например искать возможные пути до корня от вершин с определенными характеристиками, удовлетворяющие некоторым ограничениям.
Идея в том, чтобы рисовать дерево в развитой среде, типа Visio. Можно конечно и не UML, но диаграмма активности вполне подходит по смыслу.

Вообще то в Visio есть ведь forvard ingeneiring для баз данных, задача подобная...
а если просто рисовать шэйпами?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Dim vsDoc As Visio.Document
Dim vsPg As Visio.Page
'&#248;&#253;&#233;&#239;&#251;
Dim vsSh1 As Visio.Shape
Dim vsSh2 As Visio.Shape
Dim vsSh3 As Visio.Shape
Dim vsSh4 As Visio.Shape
'&#241;&#238;&#229;&#228;.&#235;&#232;&#237;&#232;&#255;
Dim vsShC As Visio.Shape
''''''''''''''''''''''''''''''''''''''''
Set vsDoc = ThisDocument
Set vsPg = vsDoc.Pages(1)

Set vsSh1 = vsPg.Drop(Application.Documents.Item("BASFLO_M.VSS").Masters.ItemU("Process"), 2#, 4#)
Set vsSh2 = vsSh1.Duplicate
Set vsSh3 = vsSh1.Duplicate
Set vsSh4 = vsSh1.Duplicate

With vsSh1
    .Text = "Level1"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = VBA.CStr(120) & " mm"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = VBA.CStr(150) & " mm"
End With
With vsSh2
    .Text = "Level2.1"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = VBA.CStr(80) & " mm"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = VBA.CStr(40) & " mm"
End With
With vsSh3
    .Text = "Level2.2"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = VBA.CStr(120) & " mm"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = VBA.CStr(40) & " mm"
End With
With vsSh4
    .Text = "Level2.3"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = VBA.CStr(160) & " mm"
    .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = VBA.CStr(40) & " mm"
End With

''''''''''''''''''''''''''''''''''''''''
Set vsShC = vsPg.Drop(Application.ConnectorToolDataObject, 2#, 2#)
vsShC.CellsU("BeginX").GlueTo vsSh1.CellsSRC(7, 2, 0)
vsShC.CellsU("EndX").GlueTo vsSh2.CellsSRC(7, 3, 0)
vsShC.CellsSRC(visSectionObject, visRowShapeLayout, visSLORouteStyle).FormulaU = 16

Set vsShC = vsPg.Drop(Application.ConnectorToolDataObject, 2#, 2#)
vsShC.CellsU("BeginX").GlueTo vsSh1.CellsSRC(7, 2, 0)
vsShC.CellsU("EndX").GlueTo vsSh3.CellsSRC(7, 3, 0)
vsShC.CellsSRC(visSectionObject, visRowShapeLayout, visSLORouteStyle).FormulaU = 16

Set vsShC = vsPg.Drop(Application.ConnectorToolDataObject, 2#, 2#)
vsShC.CellsU("BeginX").GlueTo vsSh1.CellsSRC(7, 2, 0)
vsShC.CellsU("EndX").GlueTo vsSh4.CellsSRC(7, 3, 0)
vsShC.CellsSRC(visSectionObject, visRowShapeLayout, visSLORouteStyle).FormulaU = 16



все это потом можно экспортировать в базу, в нужные свойства добавлять как данные фигур.
или это все слишком неудобно?
...
Рейтинг: 0 / 0
Visio automation
    #38898643
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

Вы не поняли. Дерево рисует человек, знающий какое оно должно быть, думающий над ним. Заносит в эту картинку характеристики узлов, которые потом надо прочитать. Когда дерево готово, начинает работать программа, вычисляющая некоторые общие характеристики дерева, анализирующая его
...
Рейтинг: 0 / 0
Visio automation
    #38898894
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел такой код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
Sub ExtractInfo()

    Dim engine As New MODELENGLib.VisioModelingEngine
    
    Dim models As MODELENGLib.IEnumIVMEModels
    
    Dim modelEnum As MODELENGLib.IEnumIVMEModels
    Set modelEnum = engine.models
    
    Do
        Dim model As MODELENGLib.IVMEERModel
        Set model = modelEnum.Next
        If model Is Nothing Then Exit Do
        
        Call ExtractTables(model)
        
    Loop
End Sub

Sub ExtractTables(model As MODELENGLib.IVMEERModel)

    Dim tableEnum As MODELENGLib.IEnumIVMEEntities
    Set tableEnum = model.Entities
    
    Do
        Dim table As MODELENGLib.IVMEEntity
        Set table = tableEnum.Next
        If table Is Nothing Then Exit Do
        
        Debug.Print "Table [" & table.PhysicalName & "]"
        
        Set pkColumns = CreateObject("Scripting.Dictionary")
        
        Call ExtractTableKeys(table, pkColumns)
        Call ExtractTableColumns(table, pkColumns)
        
    Loop

End Sub

Sub ExtractTableColumns(table As MODELENGLib.IVMEEntity, pkColumns)

    Dim columnEnum As MODELENGLib.IEnumIVMEAttributes
    Set columnEnum = table.Attributes
    
    Do
        Dim column As MODELENGLib.IVMEAttribute
        Set column = columnEnum.Next
        If column Is Nothing Then Exit Do
        
        Dim columnDataType As MODELENGLib.IVMEDataType
        Set columnDataType = column.DataType
        
        isPrimaryKey = pkColumns.Exists(column.PhysicalName)
        
        Debug.Print "  Column [" & column.PhysicalName & "], Type : """ & columnDataType.PhysicalName & """, Nullable : " & column.AllowNulls & ", PK : " & isPrimaryKey
    Loop

End Sub

Sub ExtractTableKeys(table As MODELENGLib.IVMEEntity, pkColumns)

    Dim annotationEnum As MODELENGLib.IEnumIVMEEntityAnnotations
    Set annotationEnum = table.EntityAnnotations
    
    Do
        Dim annotation As MODELENGLib.IVMEEntityAnnotation
        Set annotation = annotationEnum.Next
        If annotation Is Nothing Then Exit Do
        
        Select Case annotation.kind
        Case eVMEEREntityAnnotationPrimary
        
            Dim pkColumnEnum As MODELENGLib.IEnumIVMEAttributes
            Set pkColumnEnum = annotation.Attributes
            
            Do
                Dim pkColumn As MODELENGLib.IVMEAttribute
                Set pkColumn = pkColumnEnum.Next
                If pkColumn Is Nothing Then Exit Do
                
                pkColumns.Add pkColumn.PhysicalName, pkColumn
            Loop
        End Select
    Loop
End Sub



По утверждению автора он позволяет читать те доп. свойства, которые создаются в ходе работы с UML addon и хранятся в BLOB, правда не знаю где... Интересно такой код будет работать?
...
Рейтинг: 0 / 0
Visio automation
    #38898956
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1,

несколько поторопился. Код выше работает, но с моделью базы данных, а не с UML, но где-то написано, что эти два add-on связаны...
...
Рейтинг: 0 / 0
Visio automation
    #38899046
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1,

1. Если подключить в референс:
Microsoft Visio UML Solution for VB Type Library
увидишь там один класс: VisioUMLSolution и все...

то что MODELENGLib library думаю к UML НЕ ИМЕЕТ ОТНОШЕНИЯ.


2. нужно найти описание MODELENGLib library (Microsoft Visio Database Modeling Engine Type Library). Гже бы раздобыть?
лучше бы на родном

3. вот еще код Правда не пашет

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Public Sub pCreateExtraColumns() 
    Dim vme As New VisioModelingEngine 
    Dim models As IEnumIVMEModels 
    Dim model As IVMEModel 
    Dim erModel As IVMEERModel 
    Dim entities As IEnumIVMEEntities 
    Dim entity As IVMEEntity 
    Dim attrs As IEnumIVMEAttributes 
    Dim attr As IVMEAttribute 
    Dim ivDataType As IVMEDataType 
    Dim intColumnNumberCount As Integer 
    Dim strDataType As String 
    Set models = vme.models 
    Do Until Not (model Is Nothing) 
        Set model = models.Next 
        If Not (model Is Nothing) Then 
            If (model.ModelKind = eVMEModelERLogical) Then 
                Set erModel = model 
                Set entities = erModel.entities 
                Do 
                    Set entity = entities.Next 
                    If Not (entity Is Nothing) Then 
                        Debug.Print entity.PhysicalName 
                        Set attrs = entity.Attributes 
                        intColumnNumberCount = 0 
                        Do 
                            Set attr = attrs.Next 
                            If Not (attr Is Nothing) Then 
                                intColumnNumberCount = 
intColumnNumberCount + 1 
                            End If 
                        Loop Until (attr Is Nothing) 
                        Set attr = entity.CreateAttribute() 
                        Set ivDataType = attr.DataType 
                        attr.ColumnNumber = intColumnNumberCount 
                        attr.PhysicalName = "TestColumnName" 
            '            strDataType = "varchar(100)" 
            '            ivDataType.PhysicalName = strDataType 'this 
line does not work as PhysicalName is readonly 
                        attr.DataType = ivDataType 
                    End If 
                Loop Until (entity Is Nothing) 
            End If 
        End If 
    Loop 
End Sub 
...
Рейтинг: 0 / 0
Visio automation
    #38899213
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1Bobgos,

если использовать CellsSRC, то можно получить доступ к ShapeSheet - это я знаю. Однако в данном случае необходимо читать "свойства состояния" (см. картинку выше), и именно Именованные значения. К сожалению, если их задать, то они не отображаются в ShapeSheet - проверял :(

Спасибо за попытку помочь, но это не то, что надо.

gsv1,
Подскажи, пожалуйста:
создаю новую строку данных шэйпа:
Код: vbnet
1.
AddRow visSectionProp, jj, visCustPropsValue


в созданную строку данных шэйпа записываю имя:
Код: vbnet
1.
.CellsSRC(visSectionProp, jj, visCustPropsValue).RowNameU ="Значение_01"


но в окне 'Определение данных фигуры' подпись пуста. См. скрин.

Куда нужно записать эту подпись? Замучился уже искать методом тыка.
Или подскажи где про эти cells и конкретно секцию visSectionProp почитать подробно?
...
Рейтинг: 0 / 0
Visio automation
    #38899245
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1gsv1,

несколько поторопился. Код выше работает, но с моделью базы данных, а не с UML, но где-то написано, что эти два add-on связаны...видимо все-таки придется руками...
Как вариант - использовать данные шэйпов. Рисовать схему, добавлять необходимые поля, потом экспорт в базу.
...
Рейтинг: 0 / 0
Visio automation
    #38899265
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgos
Код: vbnet
1.
.CellsSRC(visSectionProp, jj, visCustPropsValue).RowNameU ="Значение_01"


но в окне 'Определение данных фигуры' подпись пуста. См. скрин.
правильно, тем кодом ты меняешь параметр Имя строки (в шейпшите это первый столбец).
а там где пусто это поле Подпись (в шейпшите это второй столбец Label )
его программно изменить можно
Код: vbnet
1.
.CellsSRC(visSectionProp, jj, visCustPropsLabel).FormulaU = """my label"""

BobgosКуда нужно записать эту подпись? Замучился уже искать методом тыка. включил макрорекордер. через интерфейс изменил поле Подпись и получил нужный код :)
BobgosИли подскажи где про эти cells и конкретно секцию visSectionProp почитать подробно? попробуй на МСДН Shape Data Row (Shape Data Section)
...
Рейтинг: 0 / 0
Visio automation
    #38899961
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SurrogateBobgos
Код: vbnet
1.
.CellsSRC(visSectionProp, jj, visCustPropsValue).RowNameU ="Значение_01"


но в окне 'Определение данных фигуры' подпись пуста. См. скрин.
правильно, тем кодом ты меняешь параметр Имя строки (в шейпшите это первый столбец).
а там где пусто это поле Подпись (в шейпшите это второй столбец Label )
его программно изменить можно
Код: vbnet
1.
.CellsSRC(visSectionProp, jj, visCustPropsLabel).FormulaU = """my label"""

BobgosКуда нужно записать эту подпись? Замучился уже искать методом тыка. включил макрорекордер. через интерфейс изменил поле Подпись и получил нужный код :)
BobgosИли подскажи где про эти cells и конкретно секцию visSectionProp почитать подробно? попробуй на МСДН Shape Data Row (Shape Data Section)

Surrogate,
спасибо. А что-то еще почитать с примерами.
Например: как из vba изменить рисунок, связанный с данными.
...
Рейтинг: 0 / 0
Visio automation
    #38900458
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

не успел ответить раньше. Про Visio (хоть я и абсолютный новичок) есть хорошая новая книжка parker microsoft visio 2013 business process diagramming and validating

По поводу своего вопроса: я отказался от использования свойств UML, поддерживаемых спец. add-on (Surrogate первый об этом сказал, но я еще проконсультировался с Николаем Белых, чей код по работе с спец. аддоном я привел выше, он кстати участвовал в подготовке публикации книги Паркера) в пользу стандартных Данных фигуры - там также можно создать любые тэги, но при этом они доступны через ShaeSheet!
...
Рейтинг: 0 / 0
Visio automation
    #38900483
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1Bobgos,

не успел ответить раньше. Про Visio (хоть я и абсолютный новичок) есть хорошая новая книжка parker microsoft visio 2013 business process diagramming and validating

По поводу своего вопроса: я отказался от использования свойств UML, поддерживаемых спец. add-on (Surrogate первый об этом сказал, но я еще проконсультировался с Николаем Белых, чей код по работе с спец. аддоном я привел выше, он кстати участвовал в подготовке публикации книги Паркера) в пользу стандартных Данных фигуры - там также можно создать любые тэги, но при этом они доступны через ShaeSheet!
да видно хорошая книга - в цене (6 775 руб).
а где бы её скачать да еще и на русском или на русском её нет вообще? Ссылки все лаговые,если есть возможность выложи для скачивания.

Отказ от UML поддерживаю.
Если сверим задачи,можем вместе поработать по методологии использования shapessheet.
Насколько я понял кто-то должен в Визио создавать диаграммы, а программулина должна экспортировать эти данные? Это весь запланированный функционал?
Мне бы еще было интересно параметрирование из excel диаграммы процессов в visio и их автоматизированное построение по данным таблиц xls. Ну а из разряда фантастики или UML ^-) - еще бы и временные, количественные значения для процессов, виртуализация визуализация статусов, построение дополнительных объединяющих шэйпов и скажем, контейнеризация при одинаковых значениях полей.

Можешь подробнее пояснить свою задачу?
Список именованных значения будет постоянный? Если нет, то сколько наборов может быть?
Необходимо ли создание нового класса шэйпов с собственными event-ами или можно обойтись существующими?
Настройки проги будут в составе vsd или отдельно?
Планируешь использовать создание новой пользовательской секции или достаточно обойтись одной Properties?
Экспорт штатными средствами visio или не/настраиваемый отчет? в какой формат?
...
Рейтинг: 0 / 0
Visio automation
    #38900798
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
за книгу Дэвида Дж. Паркера - на русский язык ее решили не переводить ( пруф )
Например можно найти главы из книг про в закладках Sample Charts на сайте издателя
визио2010 ( Chapter No.2 "Understanding the Microsoft Visio Object Model" )

визио2013 ( Chapter No. 3 Understanding the ShapeSheet™" )
...
Рейтинг: 0 / 0
Visio automation
    #38901153
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в визио есть такая фича SolutionXML , очень похоже на Shapesheet™ но не видимая через пользовательский интерфейс.
посмотрел через нее тоже не видны эти записи…
...
Рейтинг: 0 / 0
Visio automation
    #38901621
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

книгу могу выслать.

Я не отказался от UML, я отказался от использования полей, поддерживаемых addon-ом, но не самим visio.

Список имен. значений пока постоянный, небольшой, среди типов - строки и числа (вероятности). Шейпы UML-ные, новых не обязательно. А зачем event-ы вообще? - я в этом ничего не понимаю. Настройки в vsd не нужны, программа диалоговая, на c#. По моему достаточно именованных полей из раздела Данные фигуры. Экспорт не нужен. Основная функция - обработка древовидной структуры, нарисованной экспертом в области шахтной безопасности.

Готов совместно поработать над доступом к ShapeSheet (но не думаю, что это является проблемой)
...
Рейтинг: 0 / 0
Visio automation
    #38901976
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1Bobgos,

книгу могу выслать.
бужу благодарен.Хорошая книга все понятно. Выложи на любой сервис типа diskdrive или файлообменник. На этом форуме не нашел возможности отправки личных сообщений.gsv1
Я не отказался от UML, я отказался от использования полей, поддерживаемых addon-ом, но не самим visio.

Список имен. значений пока постоянный, небольшой, среди типов - строки и числа (вероятности). Шейпы UML-ные, новых не обязательно. А зачем event-ы вообще? - я в этом ничего не понимаю. Настройки в vsd не нужны, программа диалоговая, на c#. По моему достаточно именованных полей из раздела Данные фигуры. Экспорт не нужен. Основная функция - обработка древовидной структуры, нарисованной экспертом в области шахтной безопасности.

Готов совместно поработать над доступом к ShapeSheet (но не думаю, что это является проблемой)
Действительно, с такой книгой проблем с ShapeSheet будет.

Обработка древовидной структуры - что сие означает? не напильником же.... Наверное. в шахтах с напильником небезопасно. :-)
Какова цель обработки?
В программу на С# собрать данные о связях из vsd? Что конкретно?
Сама программа на С# что за прога? Для чего используется?
...
Рейтинг: 0 / 0
Visio automation
    #38902526
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

вот https://dl.dropboxusercontent.com/u/31216567/parker_d_j_microsoft_visio_2013_business_process_diagramming.pdf ссылка. Через день уберу. Будем надеяться, что книга полезна...

Про программу позже.

Раз уж пошел разговор, спрошу еще: как узнать категорию шейпа? Иными словами, на диаграмме есть шейпы разных видов (в UML диаграмма классов это могут быть класс, аннотация, ассоциация, наследование и т.д.), так вот: каким образом при чтении шейпа определить, что он изображает ассоциацию (это линия определенного вида), или класс (это прямоугольник определенного вида), или наследование (это линия другого вида)?
...
Рейтинг: 0 / 0
Visio automation
    #38903115
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gsv1,
за ссылку спс огромное, даже те ссылки, что на сайте издателя лучше чем метод НЕнаучного тыка.
gsv1Про программу позже.

Раз уж пошел разговор, спрошу еще: как узнать категорию шейпа? Иными словами, на диаграмме есть шейпы разных видов (в UML диаграмма классов это могут быть класс, аннотация, ассоциация, наследование и т.д.), так вот: каким образом при чтении шейпа определить, что он изображает ассоциацию (это линия определенного вида), или класс (это прямоугольник определенного вида), или наследование (это линия другого вида)?
Я например приловчился по имени Shape.NameU потому как тип возвращает для шэйпа процесса или прямоугольника - один.
Обрезаю 7 символов слева "Process". наверное есть способ и получше
...
Рейтинг: 0 / 0
Visio automation
    #38903298
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobgosЯ например приловчился по имени Shape.NameU потому как тип возвращает для шэйпа процесса или прямоугольника - один.
Обрезаю 7 символов слева "Process". наверное есть способ и получше да семь символов не есть универсальный способ. я думаю вы используете шейпы из стенсилов с UML, тогда можно определить имя их родительского мастера

таки программно это делается так
Код: vbnet
1.
Shape.Master



gsv1, спасибо за щикарный подгон - книги !
...
Рейтинг: 0 / 0
Visio automation
    #38903536
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть не забыл задавал вчера по скайпу вопрос одному из рецензентов этой книги
Surrogate™ : ты не в курсе по данному вопросу ?
http://www.sql.ru/forum/1145949/visio-automation
Nikolay Belykh : а в чем вопрос-то?
Surrogate™ : где хранятся данные. которые вводятся в этих окошках
Surrogate™ : которые вылезают по дабл-клику
Nikolay Belykh : в курсе. только все печально
Nikolay Belykh : в скрытом мастере
Surrogate™ : uml ?
Nikolay Belykh : а да, правильно, UML
Nikolay Belykh : в виде бинарного блоба
Surrogate™ : я открыл все мастера
Surrogate™ : и как к ним добраться ?
Nikolay Belykh : Visio 2010?
Nikolay Belykh : так же как и к базе - только через API
Surrogate™ : парни на форуме что-то за блоб писали
Surrogate™ : у меня да 2010
Surrogate™ : а как эта API называется ?
Nikolay Belykh : это в диаграмме базы оно по-другому называется
Nikolay Belykh : API недокументированное, это просто DLL в папке Visio
Nikolay Belykh : которая называется MODELENG.DLL
Nikolay Belykh : Browse на нее тоже не сделать
Surrogate™ : ясно :)
я же ничего не понимаю в этих базах и моделях
Nikolay Belykh : да там этот блоб копать близко к тому чтобы ассемблерный код восстанавливать :)
Surrogate™ : хрена себе !!!
Surrogate™ : это MS так задумал. или это еще в нативном визио так было устроено ?
Nikolay Belykh : да просто например ты же не ко всему своему коду АПИ приделываешь для других - тут так же
Nikolay Belykh : никто АПИ не удосужился сделать
...
Рейтинг: 0 / 0
Visio automation
    #38903961
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

рад, что книжка интересна - сам то я ее только просмотрел, по хорошему не читал :) Дело в том, что я не специалист по Visio и даже не собираюсь им становиться, хотя продукт конечно достойный.

Еще раз расскажу, как обещал, о программе, которую уже почти реализовал. Идея в том, чтобы эксперт нарисовал дерево, описывающее структуру событий, приводящих к аварии. Типов аварий бывает много, поэтому таких деревьев может быть много.
Пример: к пожару в детском саду могут привести неисправность электропроводки, взрыв баллона с газом, игра со спичками. Неисправность электропроводки может быть обусловлена тем, что изолюцию съели крысы. Крысы могли ее съесть в том случае, если администрация не проводила дератизацию в течение нескольких лет. Это могло быть по халатности или из-за воровства средств. Итак, одна из дорог, ведущих к аварии начинается с события "средства на дератизацию сворованы". Однако само по себе короткое замыкание, вызываемое неисправной проводкой не способно привести к пожару! Для этого необходимо совпадение с другим событием - несрабатыванием предохранителя. Предохранитель может не сработать по причине отсутствия или неисправности. Вероятность несрабатывания предохранителя можно посмотреть в его паспорте. Вероятность его отсутствия обусловлена качествами человеческого коллектива, работающего на объекте и может быть оценена. Вероятность воровства средств на дератизацию также. Это дерево может сильно разрастись.
Для анализа множества событий или их комбинаций, которые в принципе могут привести к аварии и рисуют такие деревья. После того, как дерево нарисовано, программа его изучает и формирует списки возможных стартовых событий и их комбинаций с оценкой вероятностей.
...
Рейтинг: 0 / 0
Visio automation
    #38903982
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Surrogate,

также рад быть полезным! Уже самостоятельно нашел путь как узнать категорию - читать мастера. Выше я привел код по работе с UML, рекомендованный как раз Николаем! Я с ним тоже пообщался, но по почте - мы не знакомы, но я задал вопрос (про UML) у него на сайте и он очень быстро отозвался.
К сожалению его код мне не помог, т.к. при переходе на Visio 2013 он не работает - в нем UML не поддерживается на том уровне, что в 2007 :( Поэтому я основываюсь на обычных (не специфических) механизмах, что и к лучшему...

Основные идеи решения разных мелких технических проблем я почерпнул из этой ссылки: http://visio.artberg.ru/faq1.htm

А наш тред про Visio кажется самый внушительный и содержательный на все sql.ru !
...
Рейтинг: 0 / 0
Visio automation
    #38904011
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgos,

кстати, у меня программа на c# читает дерево и ... пишет другую программу :)
В ней фиксируется структура дерева (выше к одному из постов я прикреплял файл с диаграммой Visio), а также дописывается общая кодовая часть, которая реализует обработку, о которой постом раньше я уже сказал.
Дело в том, что программа эта - на языке Prolog: на нем удобно быстро реализовывать разные методы обработки - они у нас еще не устоялись...
Ну а далее можно сгенерированную Prolog-программу запустить автономно или прямо из c# и получить нужные ответы.
...
Рейтинг: 0 / 0
Visio automation
    #38904047
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsv1А наш тред про Visio кажется самый внушительный и содержательный на все sql.ru !
дык здесь же не профильный русский форум по визио
хотя там тоже мало спецов по UML найдете…
даже на самом крутом форуме визио в мире на эту тему всего 9 тем, самое внушительное обсуждение содержит 5 ответов
...
Рейтинг: 0 / 0
Visio automation
    #38904299
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Surrogate,

ну да, первую ссылку я тоже дал выше как наиболее полезную, да и "самым крутым форумом" пытался воспользоваться.

Пишу, чтобы уточнить ранее сказанное про мастер шейпа - не всегда удобно пользоваться и им для определения категории шейпа, т.к. для шейпов разных категорий может быть один мастер. А вот у шейпа есть метод HasCategory(имя) - он не обманет!
...
Рейтинг: 0 / 0
Visio automation
    #38909559
Фотография Surrogate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsv1А вот у шейпа есть метод HasCategory(имя) не у каждого шейпа есть ячейка User.msvShapeCategories
MSDN Shape.HasCategory Method (Visio)

expression . HasCategory(Category )
NameRequired/OptionalData TypeDescriptioncategory Required String The category to search for

Remarks

You can pass only a single category for the Category parameter. Passing a semicolon-delimited list of categories produces an Invalid Parameter error.

Categories are user-defined strings that you can use to categorize shapes and thereby to restrict membership in a container. You can define categories in the User.msvShapeCategories cell in the ShapeSheet for a shape. You can define multiple categories for a shape by separating those categories with semi-colons.
в моем случае 95% используемых шейпов созданы лично мной и у них нет ячейки User.msvShapeCategories
...
Рейтинг: 0 / 0
Visio automation
    #38910067
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Surrogate,

Согласен, но так вышло, что категория есть у нужных мне шейпов. Мне даже страшно представить что делать, если у шейпов нет категории и они имеют одного мастера?!
...
Рейтинг: 0 / 0
Visio automation
    #38910071
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя можно конечно создать собственные с категорией, но это еще разбираться надо...
...
Рейтинг: 0 / 0
Visio automation
    #38994577
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Кто-нибудь пытался добраться до вставленного в visio объекта Excel?
По сути объект excel вставляется как шэйп к свойству которого объект можно обращаться как к книге.

Код: vbnet
1.
2.
3.
4.
dim wb as excel.workbook
dim vs as visio.shape
set vs = thisdocument.shapes("excelsheet") 
set wb = vs.object



и все бы ничего, если бы не решил проверить такой код на машине с windows 8, где стоит 32 разрядная версия Excel 2010.
Последняя строка кода дает ошибку " - типа библиотека не подключена, хотя в референс ms excel 14 object library - включено.

Танцы, включения, отключения референс, ничего не дают. Преобразования excel объекта в разные версии средствами visio тоже не помогают.

Кто подкинет идею?
P.S. На машине,где создавался excel объект офис 2007 (т.е. в референс ms excel 12 object library).
...
Рейтинг: 0 / 0
Visio automation
    #38998249
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема относилась к кривой ОС.
...
Рейтинг: 0 / 0
Visio automation
    #39000914
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsv1,
конечно поздно, но так уж, другое направление мысли.
Ваша задача про граф "причин и последствий" - типовая для эспертных систем.
Конкретно: правила вида "если --> то". В принципе и инструменты заполнения их могут быть. И ср-ва обработки и анализа. 25 лет назад были) ,но в основном текстовые. Имелись универсальные оболочки - решатели с пустой базой.

По аналогии "если --> то", можно описывать в открытом формате DOT для графов. Правда там интерактивность только в одну сторону в отличие от визио, зато простой до безобразия.
При необходимости автоматизировать польз-ский интерфейс м.б. предоставить юзеру в экцэле макросы для рисования прямо в ячейках. Проблем с доступом бы не было. И т.п.

Но сейчас ведь автоматизация развилась до нельзя, всё ручками, ручками ...
...
Рейтинг: 0 / 0
Visio automation
    #39001476
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98,
я не понял что вы конкретно предлагаете.
Дерево, которое надо рисовать в Visio, действительно аналогично набору правил. И они как раз порождаются по нарисованному дереву в программе, которую я написал. Далее они обрабатываются в соответствии с нужным мне алгоритмом... Уточню, правила фиксируются а их обработка осуществляется на языке Prolog. Правда это не совсем правила если ... то ..., т к некоторые узлы дерева снабжены вероятностями, а найти надо не столько следствие по совокупности правил, сколько несколько более специфичные вещи, такие как "минимиальные пропускные сочетания" исходных событий, например.
...
Рейтинг: 0 / 0
Visio automation
    #39003944
Он Самый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gsv1,
мне нечего добавить. Я рассуждал о способах а) рисования графов и б) программного перевода рисунков в граф. Обработка графов - это ваша личная задача. Надеюсь Л.Задэ читали для общего развития. А пропускная спос-сть что ж - она определяется самым узким сечением.

Я было подумал, что читуация с визио изменилась с начала века, но оказывается нет. И это диагноз для всей ИТ-отрасли, когда прикладники, как мне показалось, начинают заниматься программированием визио.

В защиту ЭС могу сказать, что вероятностный вывод также имел место, особенно в медицинских приложениях, но это тоже диагноз для ЭС. Ну конечно, без вероятностей проще и заполнять и выводить.

У нас в конторе около 15 лет назад как-то подключили визио к ораклу-ОЛАП, позднее я сам захотел подобно вам воспользоваться графами из визио, но, покопавшись день-два, понял, что всё запущено. У меня интерес был попроще, и я обошёлся системой хтмл-файлов на базе тогдашнего франтпэйджа. Он к тому же представлял файлы в виде графа. Я ещё колебался об основе: файловая система или гипертекст, остановился на последнем.

Ну м.б. в Арис ещё можно рисовать, но как предполагаю, это дорого.
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Visio automation
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]