用户选择保存感兴趣的视图


有的时候,用户需要保存一些感兴趣的视图,以方便自己下次快速打开或者通过云共享给其他人。

实现方法:

首先将感兴趣的视图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("获取设置失败");
  }
}