powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / (PowerDesigner) сгенерить скрипты по CDM на C#
11 сообщений из 11, страница 1 из 1
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36003757
mixa345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, возник такой вопрос
надо сгенерить скрипты по концептуальной модели
желательно на C#, открывать концептуальную уже получается
а сгенерить по ней физическую и затем скрипты пока неясно как
подскажите кто знает, или может ссылки на нормальный мануал где это найти
Заранее спасибо!

PdCommon.Application pd;
pd = new PdCommon.Application();
pd.InteractiveMode = PdCommon.InteractiveModeValue.im_Batch;
PdCDM.Model cmodel;
cmodel = (PdCDM.Model) pd.OpenModel(@"C:\\PDMODEL\BF_Kernel.cdm", PdCommon.OpenModelFlags.omf_Default);
PdPDM.Model pmodel;
pmodel = (PdPDM.Model) cmodel.GenerateModel(cmodel, 0, "BF_Kernel.pdm", false);
pmodel.GenerateDatabase(pmodel);
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36003831
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mixa345или может ссылки на нормальный мануал где это найти

в документации ветка:
PowerDesigner X.X/Customizing and Extending PowerDesigner/Scripting PowerDesigner/Communicating With PowerDesigner Using OLE Automation

PowerDesigner API Interface Version 1.0:
http://www.sybase.com/detail?id=1001041
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36008387
mixa345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
одна проблема осталась - программно сделать ObjectSelection и включить в него, например, все таблицы из Model/Package
если делать selection вручную через вкладку Selection при генерации Database -> GenerateDatabase, то оно есть в PersistentSelections у PdPDM.Model и все работает,
но программно не получается - такие методы пробовал

1) pmodel.CreateObject(1482472250, "PersistentSelections", 1, true);
2) PdCommon.PersistentSelection selection = (PdCommon.PersistentSelection)pmodel.PersistentSelections.CreateNew(1482472250);
валится с ошибкой
"В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL"

как это гребаное ObjectSelection или PersistentSelection сделать, подскажите кто знает?
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36008522
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mixa345,
а так?
Код: plaintext
1.
2.
3.
4.
PdCommon.PersistentSelection ps;
...
ps.GetCollection("xxx").Add(baseObj);
//ps.GetCollection("xxx").CreateNew(kindID);
где xxx - строковый идентификатор нужной коллекции
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36008524
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p/s/ зачем для таких простых задач юзать Interop?
c VBS было бы намного проще...
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36010321
mixa345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так и не получается ни фига программно сделать ObjectSelection или PersistentSelection
ни через Interop C#, ни через встроенный vbs
у меня PoewerDesigner версия 12.0, пробовал в 15

на VBS:
Set MySel = ActiveModel.CreateSelection
MySel.Objects.Add(int kind) - не работает
MySel.AddObjects(ByVal RootPackage As BaseObject, ByVal
ClassType As Long, ByVal IncludeShortcuts As Boolean = 0, ByVal
Recursive As Boolean = 0) - не работает

полностью скопировал строки из мануала как создать PersistentSelection:
Dim pActiveModel
Set pActiveModel = ActiveModel
Dim Selection, PrstSel
Set Selection = pActiveModel.createselection
Selection.AddActiveSelectionObjects
Set PrstSel = Selection.CreatePersistentSelectionManager("test")
компилятор сказал, что такого метода у Selection нет

неужели в программе с такой стоимостью надо руками в 20 физических моделей
забивать имена Selectionов

Роман Дынник, судя по соседнему посту, ты на семинар по PD ходишь,
спроси у них как эти selection сделать
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36011060
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mixa345спроси у них как эти selection сделать
я сомневаюсь что кто то сходу на такие вопросы сможет ответить по памяти. надо пробовать.
будет время попробую.
а семинар был всего один пока, и семинары - это больше маркетинговые мероприятия.
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36011192
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал, на VBS будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim pActiveModel, Selection, manager
Set pActiveModel = ActiveModel
Set Selection = pActiveModel.CreateSelection()

Set Selection = pActiveModel.CreateSelection
Selection.Objects.Clear()
Selection.Objects.Add(pActiveModel.Tables.Item( 0 ))
Selection.Objects.Add(pActiveModel.Tables.Item( 1 ))
Set manager = Selection.CreatePersistentSelectionManager("Manager1")
GenerateFileScript pActiveModel, "Manager1.sql", Selection, "c:\temp\"

Function GenerateFileScript(pModel, sfileName, selection, sFolder)
   Dim pOpts : Set pOpts = pModel.GetPackageOptions()

   InteractiveMode = im_Batch ' Avoid displaying generate window
   pOpts.GenerateODBC = False ' Force sql script generation rather than ODBC
   pOpts.GenerationPathName = sFolder
   pOpts.GenerationScriptName = sfileName
   pModel.GenerateDatabase selection' Launch the Generate Database feature
End Function

p/s/
посмотри примеры в папке Sybase\PowerDesigner XX\VB Scripts\
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36013167
mixa345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем разобрался я в вопросе
все дело в версиях PD
в 12.0 - функция создания PersistentSelection - "CreatePersistentSelectionManager",
не поддерживается, компилятор ругается, уже начиная с 12.5 компилятор не ругается

обычный ObjectSelection в 12.0 работает только для объектов на верхнем уровне, рекурсивно вглубь на следующие package уже не работает, точнее в коллекции все объекты и для нижних уровней есть, но GenerateDatabase их не видит, в 12.5 все нормально отрабатывает

щас еще попытаюсь model.GetPackageOptions настроить, чтобы рекурсивно объекты цепляла,
хотя похоже придется агитировать за переход на следующую версию))
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36611578
Macadoshis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi,

I'm not russian and I don't understand what you're talking about except the source code.
I'm coding using C# and not VB, and I can't use automatic cast (dim->set).

Please, for God's Sake, tell me which type I have to use for the declaration of the variable "Selection".
--
Set Selection = pActiveModel.CreateSelection().
Selection.Objects.Clear()
--
I I declare it as ObjectCol, I can't cast it and got an exception. If I declare it as BaseObject, I have no "Objects" nor "Add" properties.

Thanks in advance.
...
Рейтинг: 0 / 0
(PowerDesigner) сгенерить скрипты по CDM на C#
    #36611671
Macadoshis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nevermind, I found the solution. It's a shame for the C# programmers dealing with all your lazy-programming VB code, never explicitly indicating your variables types !

For those who're seeking and who will find this thread, here is the solution, considering a PDM :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// PdCommon.Application application
this.application.InteractiveMode = PdCommon.InteractiveModeValue.im_Batch;
// PdPDM.Model physicalModel
PdPDM.PackageOptions pOpts = (PdPDM.PackageOptions)this.physicalModel.GetPackageOptions();
pOpts.GenerateODBC = false;
pOpts.GenerationPathName = @"C:\Temp\Test\";
pOpts.GenerationScriptName = "output_script.sql";
PdCommon.ObjectSelection selection = PdCommon.ObjectSelection)this.physicalModel.CreateSelection();
// Adds some selection ( 2  tables and  2  roles)
selection.Objects.Add((PdCommon.BaseObject) this.physicalModel.Tables.Item( 0 ));
selection.Objects.Add((PdCommon.BaseObject)this.physicalModel.Tables.Item( 1 ));
selection.Objects.Add((PdCommon.BaseObject)this.physicalModel.Roles.Item( 0 ));
selection.Objects.Add((PdCommon.BaseObject)this.physicalModel.Roles.Item( 1 ));
selection.CreatePersistentSelectionManager("Manager1"); // optionnal
// Generates output creation database script
this.physicalModel.GenerateDatabase((PdPDM.BaseObject) selection);

Hope it'll help.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / (PowerDesigner) сгенерить скрипты по CDM на C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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