google-app-maker - 尝试对关系数据源的列进行总计

标签 google-app-maker

我正在组建一个 PO 请求管理器。

我创建了一个模型:PORequests

然后与另一个模型创建一对多关系:Items

左侧表格是数据源:PORequests。右表为PORequests:Items(关系)

因此,当您单击左侧的 PORequest #1 时,您将看到与该特定 PO 请求关联的项目。

enter image description here

然后,当用户更改商品的数量或成本时,onValueEdit 会运行此代码,为小计创建一个条目(商品模型中的一个字段)。

widget.datasource.item.Subtotal = widget.datasource.item.Quantity * widget.datasource.item.Cost;

所有这些都很好用,但是现在我想添加所有项目的小计,并让它填充 PORequest 模型中的 Total 字段。

如何告诉应用制作工具将 PORequest #1 中所有项目的所有小计相加?

感谢您的帮助!

<小时/>

更新:

所以我离得更近了一点。我能够获得一个标签来显示小计总数。从企业商店模板中窃取了以下客户端脚本:

/**
 * Locale constant that is used for currency formatting.
 */
var CURRENT_LOCALE = 'en-US';


/**
 * Calculates and formats total cost of all POR items.
 * @param {Array<CartItem>} PORItems - list of user's POR items.
 * @return {string} formatted total cost of all POR items.
 */
function getSubtotalTotal(PORItems) {
  var cost = PORItems.reduce(function(result, item) {
    return result + item.Subtotal;
  }, 0);
  return '$' + cost.toLocaleString(CURRENT_LOCALE, {minimumFractionDigits: 2});
}

然后我将 getSubtotalTotal(@datasource.items) 作为标签的文本。

所以现在我只需要弄清楚如何告诉 App Maker 从脚本中获取结果并将其添加到 PORequests 数据源中的 Total 字段。

最佳答案

好的,这就是我所做的:

<强>1。我创建了两个 Google Drive 表模型:PORequest 和 Items。

PORequests 具有以下字段:PORequest 编号、供应商和总计*。

*注意:“总计”字段必须是字符串而不是数字。

项目具有以下字段:项目名称、数量、成本和小计。

<强>2。我创建了与两个数据源的一对多关系(PORequests 作为所有者)。

<强>3。我创建了一个包含两个表的页面。

表 1 的数据源 = PORequests 表2的数据源 = PORequests: 项目(关系)*

这样,如果我单击表 1 中的 PORequest #1,我只会看到与该 POR 关联的项目。

*注意:我将小计字段设置为“不可编辑/标签”,因此没有人会意外手动更改它。

<强>4。然后我创建了一个客户端脚本:

/**
 * Locale constant that is used for currency formatting.
 */
var CURRENT_LOCALE = 'en-US';


/**
 * Calculates and formats total cost of all POR items.
 * @param {Array<CartItem>} PORItems - list of user's POR items.
 * @return {string} formatted total cost of all POR items.
 */
function getSubtotalTotal(PORItems) {
    var cost = PORItems.reduce(function(result, item) {
    return result + item.Subtotal;
  }, 0);
  var total = cost + app.datasources.PORequests_HideArchived.item.Tax + app.datasources.PORequests_HideArchived.item.Shipping;
  return '$' + total.toLocaleString(CURRENT_LOCALE, {minimumFractionDigits: 2});
}

<强>5。然后我将“数量”和“成本”字段的 onValueEdit 设置为:

widget.datasource.item.Subtotal = widget.datasource.item.Quantity * widget.datasource.item.Cost;

var subtotalTotal = getSubtotalTotal(app.datasources.PORequests.relations.Items.items);
app.datasources.PORequests.item.Total = subtotalTotal;

这会告诉应用制作工具首先:将成本乘以数量,并将该值放入“小计”字段中。

然后,它告诉应用制作工具:使用 getSubtotalTotal 脚本添加所有小计值,并将该值放入 PORequest 数据源的 Total 字段中。

希望所有这些对将来的人有所帮助。

关于google-app-maker - 尝试对关系数据源的列进行总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46801400/

相关文章:

javascript - 应用程序制作工具的时间选择器和自动完成功能

javascript - 如何从动态数据的 Javascript 设置 CSS

google-app-maker - 谷歌应用程序制造商架构

google-app-maker - 将脚本库应用于时间轴

database - 为 Google App Maker 记录添加多个所有者

javascript - 如何防止 Google App Maker 应用超时

google-app-maker - 需要将目录输出显示为全名而不是电子邮件地址

google-app-maker - 显示服务器端验证错误

google-chrome - 链接到 G-Cal 事件时如何修复 'Unchecked runtime.lastError: The message port closed before a response was received.'?

google-app-maker - 如何在 App Maker 数据源中设置当前项目?