在App Maker中,我正在显示一个表,并希望使用另一个表中的数据查找将表单元格数据替换为不同的文本。假设有两个表,部门和雇员。
部门是两个字段,DeptID和DeptDescription。 员工是多个字段,包括DeptID。
在雇员列表中,我想用DeptDescription替换DeptID。 (页面数据源是Employees。我不想在数据模型之间建立关系。)
我猜我想在onDataLoad事件中为DeptID的表格单元格标签编写一些脚本。到目前为止,我有这么多:
app.datasources.Departments.query.filters.DeptID._equals = widget.datasource.item.DeptID;
app.datasources.Departments.newQuery().run();
widget.text = app.datasources.Departments.item.DeptDescription;
我知道这是不正确的,但是我要关闭吗?
答案 0 :(得分:2)
1种方法)如果需要使用关系功能绕过,请创建一个将表联接在一起的汇总表。这样,您可以使用sql联接数据源定义中的两个表
2)如果您不想创建新表。将文本从值绑定更改为“更多选项”
=getDescription(@datasource.item.DeptId)
,然后是您在客户端脚本中编写的代码
function getDescription(id){
google.script.run
.withSuccessHandler(function successHandler(result){ return result;})
.withFailureHandler( function failureHandler(e){ console.log(" Failed" +e);})
.queryValue(id);
}
服务器端脚本:
function queryValue(id){
var query = app.models.Departments.newQuery();
query.filters.DeptID._equals = id;
var results = query.run();
return results[0]["DeptDescription"];
}
最后一行可能是结果[0] .DeptDescription
答案 1 :(得分:2)
该答案未经测试,但是我想提出一个可能的解决方案,该解决方案不需要大量的数据库调用,尤其是那些重复调用服务器脚本的解决方案,在您进行订单项调用时可能会消耗大量的处理时间
在“查询脚本”部分中,输入以下代码:
query.filters.Id._in = query.parameters.YourParameter;
返回query.run();
转到应该生成表的“雇员”数据源,然后找到“加载时”客户端脚本部分。在此部分中,输入以下代码:
var departmentDs = app.datasources.YourDepartmentsDs;
departmentsDs.properties.YourParameter = datasource.items.map(function(deptIds){return deptIds.DeptID;});
departmentDs.load();
现在转到包含表的页面。如果尚未创建标签窗口小部件,请立即创建。在用于文本绑定的此标签小部件中,输入以下内容:
@ datasources.YourDepartmentsDs.loaded &&(@ datasources.YourDepartmentsDs.items).map(function(Id){return Id.Id})。indexOf(@ widget.datasource.item.DeptID)!== -1吗? @ datasources.YourDepartmentDs.items [(@ datasources.YourDepartmentDs.items).map(function(Id){return Id.Id})。indexOf(@ widget.datasource.item.DeptID)]。DeptDescription:'无法检索部门说明”
如上所述,这未经测试,我在没有App Maker的情况下从内存中编写了代码,因此可能需要进行一些其他调整。与J.G.提供的第一个选项一起使用但这也是一个非常可行的解决方案。抱歉,代码格式化程序似乎对我不起作用。