有的时候,用户需要保存一些感兴趣的视图,以方便自己下次快速打开或者通过云共享给其他人。
实现方法:
首先将感兴趣的视图ViewState序列化为一个SavedViewProps对象,然后将该对象按照键值对的方式保存到云上。使用的时候,从云上获取该键值对中的SavedViewProps对象,然后将其反序列化为视图ViewState对象即可(注意,此处的键可以选择作为所保存的视图的名称,保持其唯一性即可)。
具体实现代码如下所示:
将视图ViewState序列化为SavedViewProps并保存到云上
async function TestSerializationView() {
const vp = IModelApp.viewManager.selectedView!.view;
const viewProp = SavedView.viewStateToProps(vp);
const imodel = UiFramework.getIModelConnection()!;
const requestContext = await AuthorizedFrontendRequestContext.create();
const userResult = await IModelApp.settings.saveUserSetting(
requestContext,
viewProp,
"NineZoneSample",
"SaveView1",
true,
imodel.contextId,
imodel.iModelId
);
if (userResult.status === SettingsStatus.Success) {
alert("保存成功");
} else {
alert("保存失败");
}
}
从云上获取SavedViewProps,并将其反序列化为视图ViewState,然后将其设置为当前视口。
async function TestDeserializationView() {
const imodel = UiFramework.getIModelConnection()!;
const requestContext = await AuthorizedFrontendRequestContext.create();
const userResult = await IModelApp.settings.getUserSettingsByNamespace(
requestContext,
"NineZoneSample",
true,
imodel.contextId,
imodel.iModelId
);
if (userResult.status == SettingsStatus.Success && userResult.settingsMap) {
if (userResult.settingsMap && userResult.settingsMap.get("SaveView1")) {
const v: SavedViewProps | undefined = userResult.settingsMap.get(
"SaveView1"
) as SavedViewProps;
if (v) {
const state = await SavedView.viewStateFromProps(imodel, v);
const vp = IModelApp.viewManager.selectedView!;
vp.changeView(state!);
}
}
} else {
alert("获取设置失败");
}
}