All Forums
 Категория Visio
 Форум Вопросы и ответы
 связь с базой данных
Author Previous Topic Topic Next Topic  

mers

Russia
159 Posts

Posted - 06/30/2005 :  17:25:20
Лазил, лазил, читал,читал... так и не понял как сделать.. :(
проблема в следующем:
Есть схема, шейпы которой связаны с базой данных (ячейки шейп шита связаны с полями базы данных). Нужно написать на VBS скриптик, чтобы он делал Refresh Shape Properties (Shape->Actions->). Хотелось бы конечно сразу выделить сразу все элементы и сделать рефреш, но неполучается.. такое вообще возможно? или придется перебирать каждый шейп и рефрешить?
вообщем как это сделать?

вот что делаю я:
Set Arg = WScript.Arguments 

If Arg.Count = 1 Then 
   Dim strPath

   'путь к схеме
   strPath = Arg(0)

   UpdateScheme (strPath)

End if 

Function UpdateScheme(strPath)
   Set visApp = WScript.CreateObject("Visio.Application")
   visApp.Documents.Open strPath
   visApp.ActiveWindow.SelectAll

   visApp.Addons("DBR").Run ""
   visApp.Quit
End Function


здесь этот скрипт берет параметр командной строки как имя файла...
т.е. мы запускаем этот скрипт из командной строки с полным именем файла в качестве аргумента и для данной схемы делается Refresh Shape Properties

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

Edited by - mers on 06/30/2005 18:32:17

mers

Russia
159 Posts

Posted - 07/01/2005 :  12:16:12
с этим вообщем разобрался более менее...

но тут возникает еще один вопрос.
при рефреше свойств шейпа визио спрашивает подключаться ли ей к базе или нет.. можно ли избавиться от этих вопросов. например запустить аддон с каким-нибудь ключом что бы он ничего не спрашивал?
где вообще можно посмотреть список аргументов для данного аддона


Edited by - mers on 07/01/2005 15:59:21
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/01/2005 :  19:41:11
Список аргументов я кажется ни для одного аддона не видел :(
А при ручном рефреше из Visio вопроса о подключении не наблюдается?
Может быть просто в параметрах коннекта к базе Вы, например, пользователя и пароль не указали и он теперь при каждом коннекте запрашивается?
Go to Top of Page

mers

Russia
159 Posts

Posted - 07/03/2005 :  00:27:54
да, я вот тоже не видел :(
по поводу ручного обновления не помню, в понедельник проверю напишу.
нет, все что надо указал, при появлении таблички "подключиться к базе" достаточно нажать ок и все впорядке.. лазил по зарубежным форумам, тоже ничего :(

Edited by - mers on 07/03/2005 00:42:36
Go to Top of Page

mers

Russia
159 Posts

Posted - 07/04/2005 :  14:41:27
нашел как отключить все сообщения визио
нужно в скрипт вставить такую строчку:
visApp.AlertResponse = 1
Вернее, если быть более точным, не отключить. В зависимости от значения, визио по разному реагирует на появлющиеся сообщения.
1 - это нажатие на "Ок" для всех появляющихся сообщений...

если кому интересно, скрипт будет выглядеть так:
Set Arg = WScript.Arguments

If Arg.Count = 1 Then 
   Dim strPath

   'путь к схеме
   strPath = Arg(0)

   UpdateScheme (strPath)

End if 

Function UpdateScheme(strPath)
   Dim visApp
   Set visApp = WScript.CreateObject("Visio.InvisibleApp")

   visApp.AlertResponse = 1
   visApp.Documents.Open strPath
   visApp.ActiveWindow.SelectAll
   
   For Each shp In visApp.ActiveWindow.Selection
      If shp.CellExists("User.ODBCConnection", 0) Then
         If shp.Cells("EventDrop").Formula = "RUNADDON(""DBR"")" Then
            shp.Cells("EventDrop").Trigger
         End If
      End If
   Next

   if visApp.ActiveDocument.Saved=false Then visApp.ActiveDocument.Save
   visApp.Quit
End Function
Что он делает: при запуске скрипта из командной строки, где в качестве аргумента - имя файла(например: Update.vbs c:\схема.vsd), он создает невидимое приложение визио, загружает туда эту схему, выделяет все объекты и для каждого шейпа связанного с базой данных делает обновление свойств. После этого сохраняет схему и закрывает приложение.
Для обновления свойств используется следующий кусок кода:
For Each shp In visApp.ActiveWindow.Selection
      If shp.CellExists("User.ODBCConnection", 0) Then
         If shp.Cells("EventDrop").Formula = "RUNADDON(""DBR"")" Then
            shp.Cells("EventDrop").Trigger
         End If
      End If
   Next
По идее, вместо этого, можно было бы написать:
visApp.Addons("DBRS").Run ""
но при этом скрипт вылетает, если не все объекты схемы соединены с базой. Судя по всему это баг визио.

Edited by - mers on 07/04/2005 14:47:57
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/04/2005 :  17:38:36
Интересный способ. Надо будет запомнить. Глядишь, пригодится...
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)