Author |
Topic |
|
SaSa
27 Posts |
Posted - 02/06/2004 : 14:13:09
|
Тут вот какой вопрос. Не подскажете как проще всего в визио сохранять вместе с документом некоторый объем данных. Хотель бы что бы документ работаал с БД на SQL Server но в ОФЛАЙН режиме конектися к серверу только по нажатию кнопочки обновить, и сохранял в документе полученные данные. Я думал что можно у документа из VB добавлять поля User.ROW_ вписывать туда но наверно количество таких ячек будет не очень велико или их можно добавлять сотнями? И потом мне этот список хотелось бы выводить в виде списка выбора в кастомных свойствах у всех шейпов документа. То есть так чтобы можно было как нибуть сослаться на этот список целиком , а не на конкретную ячейку. Спасибо :) |
|
Tumanov
Russia
1198 Posts |
Posted - 02/06/2004 : 15:22:51
|
В User.ROW_ можно вписывать текстовую строку. Значит туда можно поместить не одно поле данных, а фрагмент или целый документ в XML формате. Если в БД у Вас простая структура типа одной таблички, то конвертор будет совсем простым. |
|
|
SaSa
27 Posts |
Posted - 02/11/2004 : 17:16:42
|
Да спасибо.. в строку действительно входит большой объем данных но вот теперь вопрос как сослаться на них из шейпа. Т.К данные мне нужно хранить в документе, а не в странице т.к страницы имеют свойство добавляться-удаляться то я решил создать Application.ActiveDocument.DocumentSheet.AddNamedRow visSectionUser, "Data", visTagComponent. Вот но, если бы я писал это в страницу то в любом шейпе я бы мог сослаться на эти данные "Page(1)!User.Data", а в моем случае как на них сослаться ? Спасибо. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/11/2004 : 18:49:42
|
Microsoft в аналогичном случае сажает в Document Stencil специальный шейп и загоняет данные в него. Ссылка может быть примерно такой: s = Application.Documents(Ind).Masters("Name").Shapes(1).Cells("User.specdata").Formula Наверное, в этом есть какой-то смысл (все-таки у них опыт больше).
|
|
|
SaSa
27 Posts |
Posted - 02/12/2004 : 10:47:57
|
Спасибо за ответ, но это не совсем то, что я хотел спросить. В форуме кто-то уже спрашивал, как у шейпа создать список выбора из БД. У меня похожая задача. Но я хочу не подставлять готовый статический набор данных во все шейпы, а вставить ссылку на данные, типа "=ThePage!User.Data". Кода я писал данные в страницу то ссылка "=ThePage!User.Data" работала на ура. Но почему-то когда я пишу в документ "ActiveDocument.DocumentSheet.Cells("User.Data").Formula" в этом случае фокус с "=TheDoc!User.Data" не проходит, значение этой форулы в ячейке всегда получается "False" хотя если я обращаюсь из VBA к этому полю "MsgBox Application.ActiveDocument.DocumentSheet.Cells("User.Data").Formula то он мне выдает именно то, что нужно. А других способов обращения к данным, принадлежащим всему документу кроме “TheDoc” я не знаю. Как обратится из таблицы свойств к Documents(Ind).Masters("Name").Shapes(1).Cells("User.specdata") я тоже не понимаю. Может быть, я каким то образом умудряюсь работать с разными документами? ActiveDocument из VBA работает с одним документом, а TheDoc! подразумевает какой то другой? Такое возможно?
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/12/2004 : 15:59:29
|
Может дело не в ссылках, а где-то кавычки пропустили или еще какая синтаксическая ошибка. Вот сейчас проверил. Записал в User с именем Data значение ="проверка" и сослался на нее из шейпа =TheDoc!User.Data Все передается нормально. |
|
|
SaSa
27 Posts |
Posted - 02/13/2004 : 11:13:05
|
самому удивительно... похоже что я с разными документами что ли работаю пишу в VB ActiveDocument.Pages(1).PageSheet.Cells("User.Data").Formula = """ nttt """ ActiveDocument.DocumentSheet.Cells("User.Data").Formula = """ nttt """
У шейпа задал 2 юзерских поля в одном =TheDoc!User.Data в другом поле =ThePage!User.Data все пишет синеньким типа формула правлельная прошу показать значения там где Page получается "nttt",а там где Doc "False" Ничего не понимаю.. из VB соответственно в обоих ячейках правильно значение и в документе и в странице. Может быть ActiveDocument <> TheDoc??? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/13/2004 : 16:27:12
|
Ну, в общем случае - это действительно разные вещи. TheDoc дает ссылку на тот рисунок, которому принадлежит страница с данным шейпом. ActiveDocument - это один из документов, открытых в данный момент в Visio. А их может быть несколько. Посмотрите, что выведется из VB по MsgBox ActiveDocument.Name. Можно в VB попробовать прямо указать нужный документ, типа Visio.Documents("Drawing1").DocumentSheet.Cells("User.Data").Formula = """ nttt """ Еще можно открыть шейп-лист вручную и посмотреть, а пишется ли туда то, что Вам надо.
|
|
|
SaSa
27 Posts |
Posted - 02/18/2004 : 11:06:21
|
Спасибо за ответ. Про проблему с “TheDoc!” я разобрался. Если это интересно. Как я писал выше строки пользовательских свойств у документа создавались таким способом:
If ActiveDocument.DocumentSheet.CellExists("User.Data", 0) = 0 Then doc1.AddNamedRow visSectionUser, "Datat", visTagComponent
Оказывается если создавать новую сроку свойств так , то она получается доступна только из VB и в тоже время абсолютно не доступной из таблицы свойств шейпа. Проблема оказалась в “ visTagComponent” если указать тип создавай строки как “0”-“по умолчанию” то все начинает работать на ура. А с “ThePaes!” не было проблем, потому что такая строка в страницах уже была создана из шаблона, и из VB не создавалась.
Кстати вы рекомендовали посмотреть на шейп лист документа вручную. Может быть я тормоз, но я не знаю как посмотреть поля документа другим способом кроме как из VB т.к “таблицу фигур” visio мне показывает только для страницы? И ниже, а выше ??? Подскажите пожалуйста. :)
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/18/2004 : 15:50:40
|
View / Drawing Explorer / Drawing (корневой элемент) / Show ShapeSheet Drawing Explorer - это вообще очень полезная вещь. |
|
|
SaSa
27 Posts |
Posted - 02/19/2004 : 08:51:16
|
ВАУ!!! Сколько тут интереного:) Вот я и нашел, где спрятался один из источников вредной магии, который мне все портил:) |
|
|
|
Topic |
|