Создание уникального идентификатора для фигуры Visio с помощью таблицы фигур

Я не новичок ни в Visio, ни в программировании, но я новичок в разработке в Visio. Я использую 2007 и создаю свои собственные фигуры с помощью Shape Data. Я хочу создать уникальный идентификатор для всех моих фигур в контексте рисунка. Я создал элемент данных Shape под названием «Shape UniqueID». (ShapeSheet Prop.Shape_Unique_ID) Я попытался сгенерировать уникальный идентификатор (свойство Shape.UniqueID), используя приведенный ниже синтаксис формулы, в ячейке «Значение» таблицы свойств:
=UniqueID(visGetOrMakeGUID) и =UniqueID(1 ) Но Visio не распознает это как действительную формулу.

Я также пытался использовать DATA1(): =Guard(Data1()) Это дает мне уникальное значение, НО оно не обновляется, если вы копируете форму.

Я загрузил SDK 2007 года и не могу найти функцию Shapesheet для чтения свойств.

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

Мое «предпочтение» - использовать элемент данных формы и установить его, НО......

Любые идеи были бы хорошы? Спасибо... Скотт


person Scott M    schedule 08.06.2013    source источник


Ответы (1)


[Обратите внимание, что этот ответ является грубой копией ответа здесь]

UniqueID доступны только в коде, т. е. нет функции ShapeSheet, которая вернет уникальный идентификатор (GUID).

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

Вы можете сохранить GUID в ячейке таблицы свойств фигуры (обычно ячейке пользователя), но, как правило, если у вас есть ссылка на фигуру для чтения ячейки, у вас также есть средства для чтения свойства .UniqueID. Если вам нужны другие способы идентификации фигуры, используйте shp.ID (или функция ID() ShapeSheet) вернет идентификатор, уникальный для страницы, так что это тоже можно учитывать

Вот пример кода, демонстрирующий использование уникальных идентификаторов:

Sub UniqueIDsDemo()

Dim vPag As Page
Set vPag = ActivePage

Dim vShp As Shape
Set vShp = vPag.DrawRectangle(1, 1, 1, 1)
Debug.Print vShp.NameID & " UniqueID = '" & vShp.UniqueID(visGetGUID) & "'"

Dim sGUID As String
sGUID = vShp.UniqueID(visGetOrMakeGUID)

Debug.Print vShp.NameID & " UniqueID = '" & vShp.UniqueID(visGetGUID) & "'"

vShp.AddSection visSectionUser
Dim rowIdx As Integer
Dim cellName As String
cellName = "UniqueID"
rowIdx = vShp.AddNamedRow(visSectionUser, cellName, visTagDefault)
vShp.CellsSRC(visSectionUser, rowIdx, visUserValue).FormulaU = sGUID

Debug.Print vShp.NameID & "!User." & cellName & " = '" & vShp.CellsU("User." & cellName).ResultStrU("") & "'"

End Sub
person JohnGoldsmith    schedule 10.06.2013