Dec 31, 2020 04:10 AM
Hi Experts,
I am trying to create multiple child records from a parent record and came arcross an existing script in the forums and updated it to suit my needs. My aim is to ask user for the parent table, child table, link field and for each link field add the user inputted no of entries into the child table. Where I am stuck is that for each entry I want to add and increment the Date as entered by user. What I am finding is that in the below code when the recor actually gets created the date for all records is created as the latest value of startdate instead of incrementally changing for each record of the linked field:
/**
/**
hardCoded
./**
/**
// Airtable limits batch operations to 50 records or fewer.
const maxRecordsPerCall = 50;
const parentTable = hardCoded.parentTableName
? base.getTable(hardCoded.parentTableName)
: await input.tableAsync(‘Parent table name (holds the existing record)’);
const parentTableView = hardCoded.parentTableViewName
? parentTable.getView(hardCoded.parentTableViewName)
: await input.viewAsync(‘Parent table View name (holds the view of existing record)’, parentTable);
// let parentRecord = recordAsync(‘Parent record’, parentTableView);
let queryResult = await parentTableView.selectRecordsAsync();
console.log (Total of ${queryResult.records.length} records found
);
const childTable = hardCoded.childTableName
? base.getTable(hardCoded.childTableName)
: await input.tableAsync(‘Child table name (holds the new records)’);
const linkField = hardCoded.linkFieldName
? childTable.getField(hardCoded.linkFieldName)
: await input.fieldAsync(‘Link field’, childTable);
const linkDateField = hardCoded.linkFieldName
? childTable.getField(hardCoded.linkFieldName)
: await input.fieldAsync(‘Date field’, childTable);
let startfromdate = await input.textAsync(‘Start Date for records (format DD-MM-YYYY)’);
let startdate = new Date(startfromdate);
console.log (${startdate}
);
const newRecordCount = hardCoded.newRecordCount
? parseInt(hardCoded.newRecordCount, 10)
: parseInt(await input.textAsync(‘Number of records to create’), 10);
let newRecords = ;
// Part 1: Prepare the new records
for (let record of queryResult.records) {
for (let index = 0; index < newRecordCount; index += 1) {
console.log (updated Start Date is ${startdate}
);
newRecords.push({
fields: {
[linkField.id]: [{id: record.id}],
“Date”: startdate
}
});
// await childTable.createRecordsAsync([
// {
// fields: {
// [linkField.id]: [{id: record.id}],
// “Date”: startdate,
// },
// },
// ]);
startdate.setDate(startdate.getDate() + 1);
console.log (Incremented Start Date is ${startdate}
);
}
startdate.setDate(startdate.getDate() - newRecordCount);
console.log (Old Start Date is ${startdate}
);
}
// Part 2: Perform the record creation operations in batches
while (newRecords.length > 0) {
await childTable.createRecordsAsync(newRecords.slice(0, maxRecordsPerCall));
newRecords = newRecords.slice(maxRecordsPerCall);
}
output.text(‘Done’);
Dec 31, 2020 06:15 AM
It looks like you are pushing the same date object to all of the records, so they all have the same value. Try converting the date to an ISO string when you push the field values so that each record has a different string value.