Skip to main content

Hello everyone, i have a set of tasks that once a lead moved from one stage to another those tasks should be created. The set of tasks already listed in a Table called "Tasks Reference", content of the table as below:

Linked with another table called "Tasks Stages Reference", content of table as below:

"Tasks Stages Reference" this table is have all possible stages that the lead can go through.

I also built a junction table that will have the tasks that will be created for any lead, called "To Do's", as below:

Here's the script:

let inputVariables = input.config()

let lead = inputVariables.leadName

let stage = inputVariables.stageName



let leadTrackingT = base.getTable('Lead Tracking');

let tasksT = base.getTable("To Do's");

let stagesTemplateT = base.getTable('Tasks Stages Reference');





let stageTasks = [];

if (stage) {

for (let task of stage.getCellValue('Tasks Reference')) {

stageTasks.push(

{

fields: {

'Task': task.name,

'Lead': [ {id: lead.id} ]

}

}

)

}

}

while (stageTasks.length > 0) {

await tasksT.createRecordsAsync(stageTasks.slice(0, 50));

stageTasks = stageTasks.slice(50);

}

Once i test this script an error keeps coming as below:

below are the inputs: 

 

 

`getCellValue` should be used on a record selected via `selectRecordAsync()` or `selectRecordsAsync()` first right?


`getCellValue` should be used on a record selected via `selectRecordAsync()` or `selectRecordsAsync()` first right?


Thanks for your reply. I tried it before and similar error appeared as below:

 

I think maybe it's something related to the input as string.


Thanks for your reply. I tried it before and similar error appeared as below:

 

I think maybe it's something related to the input as string.


Nah, you have to do a `table.selectRecordsAsync`to get the records, and then per record you use `getCellValue`

I think you may want to use one of Airtable's existing scripts and modify it from there as that would help a lot


@TheTimeSavingCo  and @everyone this is the script I got so far after rewrite it :

 

let lead = input.config();

let stageName = lead.stageName;

let leadName = lead.leadName;

let leadID = lead.recordId

let assignee = lead.assginee;



let templateActionItemsTable = base.getTable("[hide] Action Items");

let allTemplateActionItems = await templateActionItemsTable.selectRecordsAsync({fields: templateActionItemsTable.fields});



let templateActionItems = allTemplateActionItems.records.filter(templateActionItem => {

// check wether action items matching request

return templateActionItem.getCellValueAsString("Stages") === lead.stageName;

})



console.log(templateActionItems);



// create template action items in work items table



let actionItems = templateActionItems.map(templateActionItem => {

return {

fields: {

"action-item": templateActionItem.getCellValue("Action Items"),

"Stage": {

name: lead.stageName

},

"Lead": [

{id: lead.recordId},

{name: lead.leadName},

],

"Assignee": [

{id: lead.assigneeId},

]

}

}

})





console.log(actionItems);



let workItemsTable = base.getTable("Work Items");



await workItemsTable.createRecordsAsync(actionItems);

 

Amendments were done and the script got updated after learning a couple of new things.

now the error showing is as below:

The error is coming even that the log is showing information that somehow i think correct.

This field is a linked record called "Lead" from another table called "Company". 

Input were updated as well as the below:


OK, i adjusted the script and now the tasks are created successfully. Here's the script were automation will make pre-defined tasks created automatically in "Work Items" table for specific lead/project. below is the final script that worked for me:

let lead = input.config();



// Find template action items

let templateActionItemsTable = base.getTable("[hide] Action Items");

let allTemplateActionItems = await templateActionItemsTable.selectRecordsAsync({fields: templateActionItemsTable.fields});



let templateActionItems = allTemplateActionItems.records.filter(templateActionItem => {

// check wether action items matching request

return templateActionItem.getCellValueAsString("Stages") === lead.stageName;

})



// create template action items in work items table



let actionItems = templateActionItems.map(templateActionItem => {

return {

fields: {

"action-item": templateActionItem.getCellValue("Action Items"),

"Stage": {

name: lead.stageName

},

}

}

})



let workItemsTable = base.getTable("Work Items");

await workItemsTable.createRecordsAsync(actionItems);

 


Reply