Search code examples
google-app-maker

Want To Copy Certain Fields From Previous Entry To New Fragment


Short Version: I want to have my Copy button in a table to be able to grab the values from an existing entry and populate those into a "Create Entry" Page Fragment. This way users don't have to reenter all the data when making a new entry.


Long Version:

I have two buttons added the rows in my table: Edit and Copy.

enter image description here

The Edit Button uses the following code to grab the information from that specific row and uses the Fragment to edit the entry.

widget.datasource.saveChanges();
app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);

The Copy button is currently using the following code to duplicate the entry and automatically create it.

//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();

I would like to change this behavior so that the Copy button grab the values from those specific fields, however instead of doing a createDataSource/createItem(); I want it to place those values into a Page Fragment (ex: SystemOrders_Add) that has the corresponding fields.

This way the user can click "Copy" and the SystemOrders_Add Fragment appears with pre-populated values.

I want to make sure these values are only in the Page Fragment and do not get commited until the user presses the Submit button.

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

Thank you for your help!


Solution

  • Thank you to Pavel and Wilmar. The solution that worked for me is listed below:

    //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);