Advanced Save Operations for Items
The options available for the parameter objects used when saving items enables you to perform a variety of advanced operations that go beyond what you have seen so far. A few examples:
•
You can save a new version of an item using the version of some other item as a source. This is useful, for example, if you have previously created a new regular model via
Save as New
(
) in the
Save
window but now would like to save the new model back to its origin model.
•
You can combine file resources belonging to different file versions into a new file version. You may, for example, want to combine external components files from different CAD assemblies into a new fileset version.
•
You can save a model and multiple data files as new versions in a single commit. The data files could, for example, be working copies containing output files exported by the model. Saving the items collectively in a single commit enables you to easily trace the source model version of the output files via the
References
window.
Examples
Save a model loaded into COMSOL Multiphysics as a version of another model in the database.
// The targetItemKey variable is initialized elsewhere as the
// identifying key of an existing model in the database.
SaveModelItemParamGenerator p = DatabaseApiUtil.param()
.forSaveModel()
.withSourceModel(model.getTag())
.withTargetItemKey(targetItemKey);
ModelItemVersion version = branch
.saveModel(p, "Saved a model as a version of another model.");
Combine three file resources from two separate file versions into a new file.
DatabaseApiParamGenerators param = DatabaseApiUtil.param();
// The itemVersionKey1 and itemVersionKey2 variables are obtained
// elsewhere as the identifying keys of two existing file versions.
SourceFileParamGenerator p1 = param
.forSourceFile()
.withItemVersionKey(itemVersionKey1)
.withFileResourcePath("casing.prt");
SourceFileParamGenerator p2 = param
.forSourceFile()
.withItemVersionKey(itemVersionKey1)
.withFileResourcePath("cover.prt");
SourceFileParamGenerator p3 = param
.forSourceFile()
.withItemVersionKey(itemVersionKey2)
.withFileResourcePath("stator_coil.prt");
SaveFileItemParamGenerator p = param
.forSaveFile()
.withSourceFiles(p1, p2, p3)
.withTitle("My Induction Motor Assembly")
.withTargetAsNew();
FileItemVersion version = branch.saveFile(p, "Saved a new file.");
Export a file version containing table data to a temporary file using the
temp
file scheme. Append a table row to the temporary file using the
writeFile
method from the Method Editor’s built-in method library. Save the updated table data as a new file version.
String tempFilePath = "temp:///table.tmp";
// Make sure that there is no file at the export location.
deleteFile(tempFilePath);
// The location variable identifying the file version is
// initialized elsewhere.
FileItemVersion fileVersion = api
.fileVersionByLocationUri(location);
FileResourcePath fileResourcePath = fileVersion
.firstFileResourceOrNull()
.path();
DatabaseApiParamGenerators param = DatabaseApiUtil.param();
ExportFileItemVersionParamGenerator p1 = param
.forExportFileVersion()
.withSourceFileResourcePath(fileResourcePath)
.withTargetLocationModel(model.tag())
.withTargetLocation(tempFilePath);
fileVersion.export(p1);
// Append a table row to the exported file.
writeFile(tempFilePath, new String[][]{{"1", "2", "3"}}, true);
// Save the updated table data as a new file version.
SourceFileParamGenerator p2 = param
.forSourceFile()
.withLocationModel(model.tag())
.withLocation(tempFilePath);
UpdateFileItemParamGenerator p3 = param
.forUpdateFile()
.withSourceFiles(p2);
fileVersion
.branchItem()
.update(p3, "Appended a table row.");
Export table data from a model and then save both the model and the table data as new versions in a single commit.
String location = branch.newFileLocationUri("my_table.txt");
ExportFeature e = model.result().export("table1");
e.set("filename", location);
e.run();
DatabaseApiParamGenerators param = DatabaseApiUtil.param();
SaveModelItemParamGenerator p1 = param
.forSaveModel()
.withSourceModel(model.tag());
SaveFileItemParamGenerator p2 = param
.forSaveFile()
.withSourceItemVersionWorkingCopy(model.tag(), location);
SaveCommitParamGenerator p = param
.forSaveCommit()
.withModelsToSave(p1)
.withFilesToSave(p2);
Commit commit = branch.saveCommit(p);