Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 14:44

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: SolutionXML
СообщениеДобавлено: 22 авг 2014, 14:18 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Уважаемые коллеги, наткнулся на древнюю запись одного пакистанского кодера:
Shahzad Godil Tuesday, December 13, 2005 в ShahzadGodilVisio писал(а):
Saving Document level data in SolutionXML
I saved all my application level data in SolutionXML
Код:
MeVisioDoc.SolutionXMLElement("ApplicationData") = ApplicationData.GetXML.OuterXml
And then on file open
Код:
If VisioDoc.SolutionXMLElementExists("ApplicationData") Then
ApplicationData.SetFromXML(VisioDoc.SolutionXMLElement("ApplicationData"))
End If
думал это относится исключительно к vb.net Оказалось Document.SolutionXMLElement Property присутствует в VBA Visio аж с 2002 года, пруф от MSИзображение
Кто-нибудь знает можно ли заносить данные на уровень приложения в VBA ? Если кто-то использует эту возможность, расскажите о том как вы применяете SolutionXML?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 22 авг 2014, 16:28 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Привет,
AFAIK это в общем-то это мало чем отличается от документ-шита.. т.е. тот же уровень - типа слот для хранения данных, разве что пользователю эти данные будут не видны.
Наверное создали на буме XML :)

Кстати, есть еще более извратный вариант для сохранения данных документа - создать скрытый мастер, и в его шейпшит зафигачить данные.
Так было в UML сделано раньше :)

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 22 авг 2014, 16:44 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Shahzad Godil Tuesday, December 13, 2005 в ShahzadGodilVisio писал(а):
Saving Document level data in SolutionXML
I saved all my application level data in SolutionXML
Я только сейчас обратил внимание что в заголовке идет речь об уровне документа, а в первой строке поста об уровне приложения!!!
Значит этот слот по умолчанию пустой ? Никак не связан с шейпшитом документа, в моем случае он пустой. ActiveDocument.SolutionXMLElementCount = 0
В одной из книг по VSTO встречалось упоминание о DataCloud это из этой песни ?
Оффтоп:
Я что-то забыл, а как мастер скрыть ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 22 авг 2014, 18:24 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Ну да, по умаолчанию никаких кастомных данных нету.. Это по сути поле в документе, куда можно записать свой XML.
Зачем это может понадобиться, если ровно то же самое можно сделать с DocumentSheet - точно не знаю.
Могу предположить, что идея была в том, чтобы можно было удобно процессить этот элемент вне визио своей программой, если документ Visio сохранен как XML.

про DataCloud - без понятия.. :?

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 25 сен 2014, 02:06 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Обнаружил классное свойство Document.SolutionXMLEemt - запись в него не включается в UNDO.
Так что действия с пользовательскими данными не будут висеть в UNDO (как если писать в DocumentSheet например)

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 25 сен 2014, 08:10 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
я присоединяюсь к вопросу Изображение
и если можно по-русски ибо я что-то сильно сомневаюсь за свой французский

c помощью MZ-Tools v3.0.1212 сохранил свой vsd-файл в xml, там есть такие строки
Цитата:
<Property>
<Name>SolutionXMLElementCount</Name>
<Value>0</Value>
</Property>
<Property>
<Name>SolutionXMLElementName</Name>
<Value></Value>
</Property>
<Property>
<Name>SolutionXMLElementExists</Name>
<Value></Value>
</Property>
<Property>
<Name>SolutionXMLElement</Name>
<Value></Value>
</Property>
как с ними можно работать ?
пока руки не дошли с этим разобраться. ссылки чтоб не забыть
An XML for Visio overview
About the XML for Visio schema
Embedding custom XML in an XML for Visio file
еще
Дополнено позднее: 10/11/2022
Dev Luv: Storing Custom XML in Visio XML File Format

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 16 окт 2014, 13:42 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
пока разобрался только с тем как занести в эту сакральную область свои данные
Код:
Sub vsd_AddSolutionXMLElements()
Dim docobj As Document, x%
Set docobj = ActiveDocument
Dim vr As String
For x = 1 To 10
vr = "Pos_" & x
docobj.SolutionXMLElement(vr) = "<SolutionXML Name='" & vr & "' xmlns:mysol='sol'> <mysol:myXML> " & x & " </mysol:myXML></SolutionXML>"
Next x
End Sub
в статье Embedding custom XML in an XML for Visio file описывается как заполнять ячейки Scratch,
Цитата:
<Scratch><A Unit='STR'><SolutionXML xmlns:mycellsol='mycellsol'><mycellsol:myelement> value </ mycellsol:myelement></SolutionXML></A></Scratch>
но что-то не выходит каменный цветок Изображение

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 16 окт 2014, 19:51 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Собственно, я бы помог, если понял вопрос... :(
Может как-нибудь разбить его на более простые. Чтобы можно было по частям отвечать.
---
Кстати, Вы читали статью Выборка данных из файла Visio по XML технологии?
Там рассматривается вариант, когда данные (обычные атрибуты) достаются из файла Visio, сохраненного в XML. Достаются они программным путем либо через XML-парсер, либо XML-конвертором, например, в HTML.
Причем, чтобы достать произвольные атрибуты, рассыпанные по всему файлу, нужно не только уметь работать с XML-парсером, но и знать объектную модель Visio.
В случае SolutionXML, как я понимаю, задача упрощается, так как заранее оговаривается место, где будут нужные данные. А остальное примерно так же.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 16 окт 2014, 19:59 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Применение может быть, например, таким. Рисуем на локальное машине схему в Visio. Например, схему сети. Заполняем Custom Properties рабочих станций и серверов. Потом отсылаем файл на сервер и там (не имея Visio) выбираем из него данные по компьютерам и публикуем в HTML. на PHP или ASP. XML-парсеры сейчас есть везде.
---
SolutionXML упрощает и обратную операцию. Например, нужно, не имея Visio, засунуть в рисунок какие-то данные. Программкой через модель XML-документа находим нужный узел (SolutionXML) и добавляем к нему в качестве дочернего узла наши XML-данные.
А когда откроем этот файл в Visio, сможем макросом добраться до них через объектную модель Visio и вывести в нужное место рисунка.
---
Выше было замечание насчет шейп-листа... Как мне кажется отличие будет в основном в том, что шейп-листов в файле будет много, а узелок SolutionXML только один. То есть упрощается доступ к нему через дерево XML-документа. А в остальном - действительно то же самое.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 13:45 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
Собственно, я бы помог, если понял вопрос... :(
Может как-нибудь разбить его на более простые. Чтобы можно было по частям отвечать.
в этой ветке я задаю вопросы возникающие по XML, по мере необходимости выделяю вопросы в отдельные ветки.
как это было с этой темой
Tumanov писал(а):
SolutionXML упрощает и обратную операцию. Например, нужно, не имея Visio, засунуть в рисунок какие-то данные. Программкой через модель XML-документа находим нужный узел (SolutionXML) и добавляем к нему в качестве дочернего узла наши XML-данные.
А когда откроем этот файл в Visio, сможем макросом добраться до них через объектную модель Visio и вывести в нужное место рисунка.
вот это уже интересно !!! хотелось бы увидеть простейший пример как это можно сделать ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 19:02 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Для начала можно вообще грубо, примитивно. Просто руками.
Создаем рисунок Visio и сохраняем его в .vdx.
Открываем файл в блокноте. В самом конце файла стоит тег </VisioDocument>.
Вставляем перед ним совсем простой XML, вот такой:
Код:
<SolutionXML Name='Spisok'>sdf sdf sdsd fsdf sdf</SolutionXML>

Сохраняем и открываем в Visio.
Создаем и выполняем макрос:
Код:
Sub ttt()
    Debug.Print ActiveDocument.SolutionXMLElementCount
    Debug.Print ActiveDocument.SolutionXMLElementName(1)
    Debug.Print ActiveDocument.SolutionXMLElement(ActiveDocument.SolutionXMLElementName(1))
End Sub
Читаем результат в окне Immediate:
Код:
1
Spisok
<SolutionXML Name='Spisok'>sdf sdf sdsd fsdf sdf</SolutionXML>

То есть мы поместили в файл Visio кусок XML и смогли прочитать его макросом из Visio.
Сейчас придумаю примерчик посложнее, с применением парсера XML.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 19:18 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
то что вы описали в первом абзаце, примерно тоже самое делает мой код в сообщении #5506Изображение добавляет данные в эту область.
из спортивного интереса я хочу научиться дописывать в секции шейпшита и добавлять шейпы через xml

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 21:38 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
из спортивного интереса я хочу научиться дописывать в секции шейпшита

Попробую еще раз.
Сделаем новый документ Visio. Пусть в нем будет 1 шейп. В нем будет хотя бы одна строка ShapeData.
Сохраним его по адресу I:\Temp\File1.vdx
Теперь где-нибудь создаем такой макрос и запускаем его. Только в проекте делаем ссылку на MicrosoftXML. Например v4.0.
Код:
Sub ttt()
    Dim xmlVis As MSXML2.DOMDocument
    Dim NL As MSXML2.IXMLDOMNodeList
    Dim NL1 As MSXML2.IXMLDOMNodeList
    Dim NL2 As MSXML2.IXMLDOMNodeList
    Set xmlVis = New MSXML2.DOMDocument
    xmlVis.validateOnParse = False
    xmlVis.async = False
    s = "I:\Temp\File1.vdx"  'Если адрес другой, здесь изменить
    xmlVis.Load (s)
   
    Set NL = xmlVis.getElementsByTagName("*/Shape")  'Это выбрали все шейпы
    Set NL1 = NL.Item(0).SelectNodes("Prop")  'В первом шейпе выбрали узел Prop
    Set NL2 = NL1.Item(0).SelectNodes("Value")  'В узле Prop выбрали ячейку Value
    MsgBox NL2.Item(0).Text
    NL2.Item(0).Text = "ChangeFirstData"  'Изменили ее текст
    MsgBox NL2.Item(0).Text
    xmlVis.Save s
End Sub

Запускаем макрос. Он пару раз выведен нам MsgBox с текстом Custom Properties до изменения и после изменения. После изменения станет "ChangeFirstData".
То есть макрос открыл файл Visio, нашел в нем все шейпы, взял первый из них и в первой строке его Custom Properties изменил значение на "ChangeFirstData".
Это похоже на то, что требовалось или опять не попал?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 21:47 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Естественно, можно не только менять текст существующего узла, но и добавлять к нему дочерние узлы. Можно искать узлы с нужными свойствами (например, шейп с нужным именем) и т.д.
А вот добавлять шейпы таким способом рисковано. Можно сломать документ. Это уже лучше делать в Visio 2013, там можно, но несколько по-другому.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 21:56 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Примерчик был написан в VBA, поэтому надо было думать, в чем его выполнить...
А вот этот код можно просто записать в файл с расширением .vbs и запустить его.
Код:
Dim xmlVis
Dim NL
Dim NL1
Dim NL2
Set xmlVis = WScript.CreateObject("MSXML2.DOMDocument")
xmlVis.validateOnParse = False
xmlVis.async = False
s = "I:\Temp\File1.vdx"
xmlVis.Load (s)

Set NL = xmlVis.getElementsByTagName("*/Shape")
Set NL1 = NL.Item(0).selectNodes("Prop")
Set NL2 = NL1.Item(0).selectNodes("Value")
NL2.Item(0).Text = "Новый текст"
MsgBox NL2.Item(0).Text
xmlVis.Save s

Никаких ссылок на MSXML добавлять не надо, найдет сам по имени.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 17 окт 2014, 23:30 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Surrogate, я так понял ты хочешь попробовать изменить шейпы через XML, тогда вроде как SolutionXML тут вообще ни при чем?

По ссылке http://msdn.microsoft.com/en-us/library ... 18416.aspx
вроде говорится, что если ячейки Scratch A,B,C,D или User.* или Prop.* содержат строку, которая предстваляет из себя XML, и рутовым элементом которй является <SolutionXML>, то такая строка не будет перекодироваться при записи файла.

Т.е. если например у тебя Scratch.A = "<aaaa/>"

то в XML файле ты получишь "&lt;aaaa&get;"

Однако, если у тебя Scratch.A = "<SolutionXML><aaa/></SolutionXML>"
то в XML файле ты получишь "<SolutionXML><aaa/></SolutionXML>" (т.е. без перекодировки)

Фича на мой взгляд очень странная, сомневаюсь что ее использует хотя бы один человек в мире :)

Если ты хочешь создавать-изменять шейпы и ячейки шейпнита, то SolutionXML, IMHO, ничем не поможет.
Нужно просто менять XML, как предлагает Tumanov.. или я чего-то не понимаю?

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 18 окт 2014, 07:52 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
Фича на мой взгляд очень странная, сомневаюсь что ее использует хотя бы один человек в мире

Это скорее всего предупреждают, что если не защитить строку тегами <SolutionXML>, то специальные знаки в ней окажутся перекодированными и искать их, например сравнением, будет бесполезно.
А обрамление тегами позволит сохранить первозданный вид.
Типа, делайте, как положено, и будет вам счастье :)
Если не предупредить, то для новичков такая перекодировка может оказаться неприятной неожиданностью.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: SolutionXML
СообщениеДобавлено: 20 окт 2014, 22:33 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
nbelyh писал(а):
Если ты хочешь создавать-изменять шейпы и ячейки шейпнита, то SolutionXML, IMHO, ничем не поможет.
Нужно просто менять XML, как предлагает Tumanov.. или я чего-то не понимаю?
nbelyh писал(а):
Фича на мой взгляд очень странная, сомневаюсь что ее использует хотя бы один человек в мире :)
вот я и хотел стать первым человеком в мире который до такого извратства дошел :)

Николай, Геннадий спасибо за ответы на мои нелепые вопросы!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB