本地存储 API
借助本地存储 API,可以在浏览器的本地存储中存储数据。 若要使用本地存储 API,必须启用客户的本地存储管理员开关。
本地存储是独立的,因此每种类型的视觉对象都有其自己单独的存储访问权限。
注意
开发人员有责任确保存储的数据符合使用者的组织策略,并告知用户存储了什么信息(如果数据的敏感度需要)。 具体而言,如果业务目标或方案需要,自定义视觉对象开发人员应加密数据。
如何使用本地存储
此版本的本地存储 API 已计划弃用。 我们不会再接受任何请求。 如果可能,请使用版本 2。
在以下示例中,只有调用 update 方法,计数器值就会增加。 计数器值保存在本地,并在每次启动视觉对象时调用。 这样,每次启动视觉对象时,计数器就会从停止的地方开始计数,而不是从头开始:
export class Visual implements IVisual {
// ...
private updateCountName: string = 'updateCount';
private updateCount: number;
private storage: ILocalVisualStorageService;
// ...
constructor(options: VisualConstructorOptions) {
// ...
this.storage = options.host.storageService;
// ...
this.storage.get(this.updateCountName).then(count =>
{
this.updateCount = +count;
})
.catch(() =>
{
this.updateCount = 0;
this.storage.set(this.updateCountName, this.updateCount.toString());
});
// ...
}
public update(options: VisualUpdateOptions) {
// ...
this.updateCount++;
this.storage.set(this.updateCountName, this.updateCount.toString());
// ...
}
}
本地存储方法
本地存储 API 有四种方法:
如何使用本地存储 API
若要使用本地存储 API,请向视觉功能中的特权数组添加声明。
以下示例演示如何使用本地存储 API 版本 2 设置和检索本地存储中的数据:
import IVisualLocalStorageV2Service = powerbi.extensibility.IVisualLocalStorageV2Service;
import StorageV2ResultInfo = powerbi.extensibility.StorageV2ResultInfo;
import PrivilegeStatus = powerbi.PrivilegeStatus;
export class Visual implements IVisual {
// ...
private updateCountName: string = 'updateCount';
private updateCount: number;
private storageV2Service: IVisualLocalStorageV2Service;
constructor(options: VisualConstructorOptions) {
this.storageV2Service = options.host.storageV2Service;
this.init();
}
private async init() {
try {
let status: powerbi.PrivilegeStatus = await this.storageV2Service.status();
if (status === PrivilegeStatus.DisabledByAdmin) {
//handle if the api blocked by admin
} else if (status === PrivilegeStatus.Allowed) {
this.updateCount = await this.storageV2Service.get(this.updateCountName);
}
} catch (error) {
//handle error
}
}
private async updateCount(count: number) {
try {
let status: PrivilegeStatus = await this.storageV2Service.status();
if (status === PrivilegeStatus.Allowed) {
let resultInfo: StorageV2ResultInfo = this.storageV2Service.set(this.updateCountName, count);
if (resultInfo.success) {
//updateCount was set.
} else {
}
}
} catch (error) {
// handle error
}
}
private async removeUpdateCount() {
let status: PrivilegeStatus = await this.storageV2Service.status();
if (status === PrivilegeStatus.Allowed) {
this.storageV2Service.remove(this.updateCountName);
}
}
}
注意事项和限制
- 本地存储限制为每个 GUID 1 mb。
- 只能在具有相同 GUID 的视觉对象之间共享数据。
- 不能与 Power BI Desktop 的其他实例共享数据。
- 默认情况下,本地存储 API 处于未激活状态。 要为 Power BI 视觉对象激活它,请将请求发送到 Power BI 视觉对象支持团队
pbicvsupport@microsoft.com
。
- 本地存储 API 不支持
await
构造。 仅允许 then
和 catch
方法。
视觉对象应在 AppSource 中可用且经过认证。
- 自定义视觉对象本地存储限制为 100 KB。
- 数据可以在具有相同 GUID、相同环境和属于同一用户的视觉对象之间共享。
- 以下环境中支持该 API:
- Web
- 桌面
- SaaS Embed
- 移动
- 报表服务器
- 导出到 PDF 或 pptx 时不支持本地存储。
- 仅当用户登录时,才支持该 API。
- 视觉对象的数据会在最近修改时间 29 天后清除。
- 此 API 是特权 API。
- 键(提供给 set、get、remove 的参数)具有以下限制:
- 如果浏览器处于展台模式,则浏览器之间的本地存储可用性可能会有差异,取决于展台所有者的设置。
- 此 API 可能不受支持的原因有许多。 例如,环境可能不受支持,或者浏览器的本地存储不可用。 建议在使用 set/get/remove 方法之前检查 API 的状态。 错误处理很重要,因为即使 API 受支持,它也可能失败。
相关内容