Navicate的模型文件ndm2文件本身就是json文件,以下方法主要是提取模型的schema及表字段和关联关系json
function transMappingType(mapping){
switch(mapping){
case "NoneRelationship":return "1";
case "ManyRelationship"||"ZeroOrManyRelationship"||"OneOrManyRelationship":return "n";
case "OneRelationship":return "1";
default:break;
}
}
function extract_ndm2(ndm2){
let schemas=ndm2.server.schemas
let group=[]
schemas.forEach(schema => {
if(schema.name=="cmdb-business"){
const tables = schema.tables;
tables.forEach(table=>{
let model={}
model["id"]=table.name
model["name"]=table.comment
let attrs=[]
let fields=table.fields
fields.forEach(field=>{
let attr={}
attr['id']=field.name
attr['type']=field.type
attr['name']=field.comment
attr['required']=!field.isNullable
attrs.push(attr)
})
model["attrs"]=attrs
let mappings=[]
let foreignKeys=table.foreignKeys
foreignKeys.forEach(fk=>{
let mapping={}
mapping["from_table"]=table.name
mapping["from_fields"]=fk.fields
mapping["to_table"]=fk.referenceTable
mapping["to_fields"]=fk.referenceFields
mapping["from_mapping"]=transMappingType(fk.sourceCardinality)
mapping["to_mapping"]=transMappingType(fk.targetCardinality)
mappings.push(mapping)
})
model["mappings"]=mappings
group.push(model)
})
}
});
return group;
}