Fiori Elements列表报表:如何用extensionAPI获取隐藏列选中行值
Fiori Elements列表报表:获取选中行隐藏列值并修改按钮文本
问题场景
我需要在简易Fiori Elements列表报表中实现逻辑:基于表格选中行的隐藏列值修改按钮文本,且必须使用extensionAPI。目前已能通过以下代码获取选中行的可见列数据:
let aContexts = this.extensionAPI.getSelectedContexts(); aContexts.forEach(element => { let data = element.getModel().getObject(element.getPath()); console.log('Selected Rows are => ', data); });
也知道如何修改按钮文本:
oEvent.getSource().setProperty("text","Text");
但无法获取隐藏列的值,看起来this.extensionAPI.getSelectedContexts()仅返回可见列数据。
解决方法
方法1:显式指定读取隐藏列字段
getObject()默认可能仅返回表格渲染时用到的可见字段,隐藏列字段未被自动加载。可以通过$select参数强制指定要读取的字段:
let aContexts = this.extensionAPI.getSelectedContexts(); aContexts.forEach(element => { // 替换"HiddenField"为你的实际隐藏列字段名 const fullRowData = element.getModel().getObject(element.getPath(), "$select=*,HiddenField"); const hiddenValue = fullRowData.HiddenField; console.log("隐藏列值:", hiddenValue); // 示例:根据隐藏列值修改按钮文本 const oButton = oEvent.getSource(); // 或通过this.byId("按钮ID")获取 oButton.setProperty("text", `状态:${hiddenValue}`); });
$select=*,HiddenField表示读取所有已加载字段+指定的隐藏字段,既保留原有数据,又确保拿到隐藏列的值。
方法2:主动读取完整实体数据
如果需要获取行的完整数据(所有字段),可以调用模型的read()方法主动请求:
let aContexts = this.extensionAPI.getSelectedContexts(); aContexts.forEach(element => { const oModel = element.getModel(); const sEntityPath = element.getPath(); oModel.read(sEntityPath, { success: (oFullData) => { console.log("完整行数据(含隐藏列):", oFullData); // 根据隐藏列值更新按钮文本 const oButton = this.byId("yourButtonId"); oButton.setProperty("text", `操作:${oFullData.HiddenField}`); }, error: (oErr) => console.error("读取数据失败:", oErr) }); });
关键注意点
- 确认隐藏列对应的字段在OData服务中是可访问的,没有权限拦截;
- 如果是JSON客户端模型,隐藏列数据本来就存在于模型中,直接
getObject()就能拿到,检查下是否是数据未正确赋值; - 修改按钮文本时,确保按钮实例获取正确,可通过事件源
oEvent.getSource()或控件IDthis.byId()获取。
内容的提问来源于stack exchange,提问作者toffler
相关产品推荐
相关产品推荐

