Могу ли я выполнить обратное проектирование в PowerDesigner, используя схему JSON, а не XML?

#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. Большое вам спасибо, я попробую это сделать.