Google app maker 正在尝试对关系数据源的列进行合计

Google app maker 正在尝试对关系数据源的列进行合计,google-app-maker,Google App Maker,我正在整理采购订单申请经理 我创建了一个模型:PORequests 然后与另一个模型创建一对多关系:项 左边的表格是数据源:PORequests。右边的表格是poresquests:Items(关系) 因此,当您单击左侧的PORequest#1时,您只会看到与特定PO请求相关的项目 然后,当用户更改项目的数量或成本时,onValueEdit会运行此代码,为小计(项目模型中的一个字段)创建一个条目 所有这些都很好,但是现在我想添加所有项目的小计,并让它填充PORequest模型中的Total字段

我正在整理采购订单申请经理

我创建了一个模型:PORequests

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

左边的表格是数据源:PORequests。右边的表格是poresquests:Items(关系)

因此,当您单击左侧的PORequest#1时,您只会看到与特定PO请求相关的项目

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

所有这些都很好,但是现在我想添加所有项目的小计,并让它填充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});
}
/**
*用于货币格式设置的区域设置常量。
*/
var CURRENT_LOCALE='en-US';
/**
*计算所有POR项目的总成本并设置其格式。
*@param{Array}PORItems-用户的POR项列表。
*@return{string}格式的所有POR项目的总成本。
*/
函数getSubtotalTotal(项目数){
var成本=项目。减少(功能(结果,项目){
返回结果+项目.小计;
}, 0);
返回“$”+cost.toLocaleString(当前语言环境,{minimumFractionDigits:2});
}
然后我将getSubtotalTotal(@datasource.items)作为标签的文本


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

好吧,下面是我所做的:

1。我创建了两个谷歌硬盘型号:PORequests和Items。

PORequests有如下字段:PoreQuestNumber、Vendor和Total*

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

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

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

/**
 * 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});
}
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;
3。我创建了一个包含两个表的页面。

/**
 * 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});
}
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;
表1的数据源=PORequests 表2的数据源=PORequests:Items(关系)*

这样,如果单击表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});
}
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首先:将成本乘以数量,然后将该值放入小计字段

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


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

我认为这在一定程度上取决于你在哪里存储的总任务。它是PO请求中的字段吗?如果您使用的是App Maker驱动器表,它们不提供聚合,因此您可能需要使用计算模型,或者在项目onCreate、onEdit、,假设你的PORequest模型中有一个PO total$字段,那么onDelete事件将重新计算PO的总数。我的目标是让它成为PORequest模型中的一个字段,在OneEdit、onDelete等中包含一些代码(如你所提到的),然后重新计算总数并弹出新的金额。我唯一搞不懂的是如何告诉App Maker如何汇总与该PO请求相关的小计。这种方法不考虑安全性,客户端上的任何人都可以编辑汇总和价格。。。但我不知道你们的业务需求,也许它适合那个特殊情况。是的,它主要是我的工具。不太担心把所有东西都锁起来。