有的时候,用户需要保存一些感兴趣的视图,以方便自己下次快速打开或者通过云共享给其他人。
实现方法:
首先将感兴趣的视图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("获取设置失败"); } }