#powerdesigner
Вопрос:
Я попытался сделать это, но взамен получил пустой проект. Когда я выбираю СУБД для JSON, я получаю пустое поле. Я не знаю, есть ли другой способ обойти это?
Комментарии:
1. Я не думаю, что определение СУБД JSON поддерживает обратную разработку. В начале нет комментариев, но я предполагаю, что он используется только для генерации.
2. Значит, в PowerDesigner нет способа реинжиниринга JSON? Если есть, пожалуйста, дайте мне знать.
3. Я не знаю, как сделать это напрямую с PowerDesigner, прямо из коробки. Вы можете написать некоторый JavaScript для чтения содержимого этого JSON и создать Физическую модель данных или XML-модель с помощью API автоматизации…
4. Звучит интересно, как я могу это сделать? не могли бы вы направить меня к учебнику или инструкциям, чтобы сделать это, пожалуйста?
Ответ №1:
Это не дает прямого ответа на вопрос, но вот пример скриптового PowerDesigner из JavaScript (протестирован с NodeJS 14, NPM 7). Затем вы можете проанализировать свой JSON с помощью JavaScript и создавать объекты (сущности, таблицы…) на лету с помощью автоматизации.
"use strict";
// you can get these constants with a VBScript like this:
// option explicit
// dim lib,libname,cls,keep,x
// for each lib in application.metamodel.libraries
// libname = lcase(lib.publicname)
// if left(libname,2) = "pd" then libname = mid(libname,3)
// for each cls in lib.classes
// keep = cls.inheritsfrom(cls_NamedObject)
// if keep and cls.inheritsfrom(cls_BaseClassifierMapping) then keep = false
// if keep and cls.abstract then keep = false
// if keep and ((cls.flags and 1024) <> 0) then keep = false
// if keep then
// x = right("00000000" amp; hex(cls.kind), 8)
// output "const cls_"amp;libnameamp;cls.publicname amp; " = 0x" amp; x amp; ";"
// end if
// next
// next
const cls_cdmModel = 0x1E597170;
const cls_cdmEntity = 0x1E597172;
console.log("... connecting");
let winax = require('winax');
let app = new ActiveXObject("PowerDesigner.Application");
console.log("... create model");
let model = app.CreateModel(cls_cdmModel);
let entt = model.CreateObject(cls_cdmEntity);
entt.Name = 'foo';
console.log("... save model");
model.Save('c:\temp\foo.cdm');
winax.release(model,entt);
// close Workspace without saving
app.ActiveWorkspace.Close(1);
winax.release(app);
console.log("... happily done");
Комментарии:
1. Большое вам спасибо, я попробую это сделать.