ThingsBoard:如何通过widget的custom action修改server attribute
ThingsBoard Widget自定义动作修改服务端属性解答
完全可以通过Widget的Custom Action(自定义动作)选项修改服务端属性,直接在自定义动作的JS逻辑中调用平台内置的属性服务接口即可实现,不需要额外开发自定义插件。
实现步骤
- 确认操作权限:当前登录的系统用户,需要对目标设备/资产拥有「写入属性」的操作权限,否则接口会返回403权限错误。
- 进入Widget编辑页,找到你要绑定触发逻辑的Custom Action配置项,选择自定义JS动作,写入对应逻辑即可。
- 核心调用逻辑参考如下代码,可根据你的实际业务调整属性键值、成功/失败后的回调动作:
// 1. 定义你要更新的服务端属性键值对,替换成你自己的属性名和目标值 const updateAttributes = { "your_server_attr_key": "your_target_value" }; // 2. 获取当前Widget默认绑定的实体信息(设备/资产/客户等) const targetEntity = widgetContext.defaultSubscription.configuredDatasources[0].entity; // 3. 调用平台内置属性保存接口,指定作用域为SERVER_SCOPE即操作服务端属性 widgetContext.attributeService.saveEntityAttributes( targetEntity, "SERVER_SCOPE", updateAttributes ).subscribe({ next: () => { // 更新成功后的自定义逻辑,示例是弹成功提示+刷新Widget订阅数据 widgetContext.showSuccessToast("服务端属性更新成功"); widgetContext.defaultSubscription.update(); }, error: (err) => { // 更新失败后的自定义逻辑,示例是弹错误提示 widgetContext.showErrorToast(`更新失败:${err.message}`); } });
补充说明
- 如果你要修改的不是当前Widget绑定的实体属性,只需要把代码里
targetEntity替换为你指定的实体对象(需包含id和entityType两个字段)即可。 - 该逻辑支持绑定在按钮点击、表单提交、值变更等各类Widget支持的触发事件上,触发条件可以根据业务需求自由配置。
内容的提问来源于stack exchange,提问作者Vitor Marques Lourenco
相关产品推荐
相关产品推荐

