关于如何导入与导出imodel中schema文件
我们使用imodel.js后端代码可以将schema文件导入到imodel中,也可以将imodel中的schema文件导出到指定的路径。
需要首先打开一个imodel文件,然后进行相关schema导入/导出操作(如果是导入需要以可写模式打开),最后关闭imodel文件。
导入schema示例代码如下:
public async ImportSchema(schemaFilePath: string) {
if (this._imodel == undefined) {
return;
}
//导入Schema.
let imodel = this._imodel;
imodel.importSchemas(this.requestContext, [schemaFilePath]);
}
导出schema示例代码如下:
public async ExportEchema(savedSchemaPath: string) {
if (this._imodel === undefined) {
return;
}
if (
DbResult.BE_SQLITE_OK ===
this._imodel.nativeDb.exportSchemas(savedSchemaPath)
) {
console.log("schema导出成功");
} else {
console.log("schema导出失败");
}
}
整个应用代码如下所示:
import { BackendRequestContext, SnapshotDb } from "@bentley/imodeljs-backend";
import { DbResult } from "@bentley/bentleyjs-core";
class ImportAndExportSchema {
public constructor() {}
public async CreateIModelFromSeed(
seedFileName: string,
MyiModelFileName: string
) {
const seedDb: SnapshotDb = SnapshotDb.openFile(seedFileName);
this._imodel = SnapshotDb.createFrom(seedDb, MyiModelFileName);
if (this._imodel) {
console.log("imodel创建成功");
} else {
console.log("imodel创建失败");
}
seedDb.close();
}
public async ImportSchema(schemaFilePath: string) {
if (this._imodel == undefined) {
return;
}
//导入Schema.
let imodel = this._imodel;
imodel.importSchemas(this.requestContext, [schemaFilePath]);
}
public async ExportEchema(savedSchemaPath: string) {
if (this._imodel === undefined) {
return;
}
if (
DbResult.BE_SQLITE_OK ===
this._imodel.nativeDb.exportSchemas(savedSchemaPath)
) {
console.log("schema导出成功");
} else {
console.log("schema导出失败");
}
}
public async dispose() {
if (this._imodel != undefined) {
this._imodel.close();
}
}
public InspectSchema(schemaName: string) {
if (this._imodel === undefined) {
return;
}
const versinon = this._imodel.querySchemaVersion(schemaName);
if (versinon) {
console.log("版本=" + versinon);
}
}
private requestContext = new BackendRequestContext();
private _imodel: SnapshotDb | undefined;
}
export async function ImportAndExportSchema_Handle() {
const seedFileName = "./data/Baytown.bim";
const testFileName = "./data/TestBaytown.bim";
const example = new ImportAndExportSchema();
example.CreateIModelFromSeed(seedFileName, testFileName);
const schemaPath = "./data/RobotWorld.ecschema.xml";
await example.ImportSchema(schemaPath);
example.InspectSchema("RobotWorld");
const SaveSchemaFilePath = "D:/schema/";
await example.ExportEchema(SaveSchemaFilePath);
example.dispose();
}
导出结果: