Google app maker 要将某些字段从以前的条目复制到新片段吗

Google app maker 要将某些字段从以前的条目复制到新片段吗,google-app-maker,Google App Maker,简短版本:我希望我的复制按钮位于表格中,以便能够从现有条目中获取值,并将这些值填充到“创建条目”页面片段中。这样,用户在创建新条目时不必重新输入所有数据 长版本: 我在表格中添加了两个按钮:编辑和复制 编辑按钮使用以下代码从特定行获取信息,并使用片段编辑条目 widget.datasource.saveChanges(); app.datasources.SystemOrders.selectKey(widget.datasource.item._key); app.showDialog(a

简短版本:我希望我的复制按钮位于表格中,以便能够从现有条目中获取值,并将这些值填充到“创建条目”页面片段中。这样,用户在创建新条目时不必重新输入所有数据


长版本:

我在表格中添加了两个按钮:编辑和复制

编辑按钮使用以下代码从特定行获取信息,并使用片段编辑条目

widget.datasource.saveChanges();
app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);
“复制”按钮当前正在使用以下代码复制条目并自动创建它

//Allows for copying table/row
var rowDataSource = widget.datasource;
var listDatasource = app.datasources.SystemOrders_HideComplete;
var createDataSource = listDatasource.modes.create;

widget.datasource.saveChanges();

// Enter fields you want to duplicate below
createDataSource.item.ProjectName = rowDataSource.item.ShowName;
createDataSource.item.DeliveryInfo = rowDataSource.item.DeliveryInfo;
createDataSource.item.SOB = rowDataSource.item.SOB;
createDataSource.item.DeliveryDate = rowDataSource.item.DeliveryDate;
createDataSource.item.Company = rowDataSource.item.Company;
createDataSource.item.Location = rowDataSource.item.Location;
 createDataSource.item.AdditionalPeripherals = rowDataSource.item.AdditionalPeripherals;
createDataSource.item.Notes = rowDataSource.item.Notes;
createDataSource.createItem();
我想更改此行为,以便复制按钮从这些特定字段获取值,而不是执行createDataSource/createItem();我希望它将这些值放入具有相应字段的页面片段(例如:SystemOrders\u Add)

通过这种方式,用户可以单击“复制”,SystemOrders\u Add片段将显示预先填充的值

我想确保这些值仅在页面片段中,并且在用户按下提交按钮之前不会提交

newSOEmailMessage(widget);
widget.datasource.createItem();
app.closeDialog();

谢谢你的帮助

实现这一点的一种方法是将数据传递给页面片段中定义的自定义属性,然后将这些属性放置到相应的字段中。我建议你也看看这篇文章

首先,您需要在页面片段中创建自定义属性。然后,在复制按钮onClick事件中,您可以使用类似的方法将表中的行数据保存到自定义属性:

var rowDataSource = widget.datasource.item._key;
app.datasources.SystemOrders.selectKey(rowDataSource);

var projectName = app.datasources.SystemOrders.item.project_name;
var deliveryInfo = app.datasources.SystemOrders.item.delivery_info;
//...
app.pageFragments.SystemOrders_Edit.properties.ProjectName = projectName;
app.pageFragments.SystemOrders_Edit.properties.DeliveryInfo = deliveryInfo;
//...
app.showDialog(app.pageFragments.SystemOrders_Edit);
假设您的页面片段中有一个表单,您可以使用自定义属性绑定每个字段的值。绑定将确保预填充数据。可以通过属性编辑器对每个字段执行此操作,绑定应如下所示:@properties.ProjectName

在Submit button onClick事件中,您可以使用类似这样的内容,使用每个字段中可用的值在数据源中创建一个新项

var projectName = widget.root.descendants.Field1.value;
var deliveryInfo = widget.root.descendants.Field2.value;
//...

var myDatasource = app.datasources.SystemOrders_HideComplete;
var myCreateDatasource = myDatasource.modes.create;
var draft = myDatasource.modes.create.item;

   draft.project_name = projectName;
   draft.delivery_info = deliveryInfo;
   //...

   // Create the new item
   myCreateDatasource.createItem();

app.closeDialog();
创建项后(可能是onDetach),可以将属性设置回null,如下所示: app.pageFragments.SystemOrders\u Edit.properties.ProjectName=null


希望这有帮助

我觉得从复制按钮点击处理程序中删除这一行会带来麻烦(当然,如果页面片段绑定到ds.modes.create.item):

createDataSource.createItem();
在这种情况下,您使用的是手动保存模式,并且尝试在不重写数据源的情况下重用页面片段。。。您需要使用不同的方法创建新项目:

//复制按钮单击处理程序
var source=widget.datasource.item;
var listDatasource=app.datasources.SystemOrders\u HideComplete;
//此行将向列表数据源添加新项
//没有保存到数据库。
listDatasource.createItem();
var target=listDatasource.item;
//在下面输入要复制的字段
target.Field1=source.Field1;
target.Field2=source.Field1;
...
//显示片段(假设它绑定到listDatasource.item)
app.showDialog(app.pageFragments.EditItemFragment);
// -----------
//页面片段的提交按钮单击处理程序
...
saveChanges(函数(){
//TODO:处理成功的保存
});

感谢帕维尔和威尔玛。下面列出了对我有效的解决方案:

//Allows for copying table/row
var rowDataSource = widget.datasource;
var listDatasource = app.datasources.SystemOrders_HideComplete;
var createDataSource = listDatasource.modes.create;

widget.datasource.saveChanges();

// Enter fields you want to duplicate below
createDataSource.item.ShowName = rowDataSource.item.ShowName;
createDataSource.item.DeliveryInfo = rowDataSource.item.DeliveryInfo;
createDataSource.item.SOB = rowDataSource.item.SOB;
createDataSource.item.Notes = rowDataSource.item.Notes;

app.datasources.SystemOrders.selectKey(widget.datasource.item._key);

app.showDialog(app.pageFragments.SystemOrders_Add);

尝试了上面列出的选项,但似乎不起作用。我想这是因为我的片段的数据源是SystemOrders\uHideComplete(create)。无论如何,删除createDataSource.createItem();上一篇文章中的选项起作用了!谢谢你的帮助。