代码之家  ›  专栏  ›  技术社区  ›  Adam Bergeron

尝试合计关系数据源的列

  •  3
  • Adam Bergeron  · 技术社区  · 7 年前

    我正在建立一个采购订单请求管理器。

    我创建了一个模型:

    然后与另一个模型建立一对多关系: 项目

    所以当你点击左边的PORequest#1时,你会看到 只有 与该特定采购订单请求关联的项目。

    enter image description here

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

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

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

    我如何告诉App Maker将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});
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Adam Bergeron    7 年前

    好的,下面是我所做的:

    1.我创建了两个Google Drive Table模型:PORequests和Items。

    PORequests有如下字段:PORequest Number、Vendor和Total*。

    *注意:Total字段必须是字符串,而不是数字。

    2.我与这两个数据源建立了一对多关系(PORequests作为所有者)。

    我创建了一个包含两个表的页面。

    表1的数据源=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;
    

    这告诉App Maker首先:将成本乘以数量,然后将该值放入小计字段。

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

    希望这一切对将来的人有帮助。