Table of Contents
Agenda Item Request
This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting.
Trigger
- TriggerRecord: Board Meeting
- Field: Actions on Submit
- Is Exactly Request Agenda Items
Flow
For each Board Meeting Members where Name=TriggerRecord.NameCreate Record Email
Run Script<code>// Specify the table and view where you want to apply the autonumbering
let Email_table = base.getTable(“emails”); let inputConfig = input.config();
let Email_Rec_ID = inputConfig['Email_Rec_ID']; let Member_Rec_ID = inputConfig['Member_Rec_ID']; let Board_Meeting_Rec_ID = inputConfig['inp_Board_Meeting_Rec_ID']; let Agenda_Form = inputConfig['Agenda_Form'] + “&submitter=” + Member_Rec_ID; let Member_Name = inputConfig['inp_Member_Name']; let Member_Full_Name = inputConfig['inpMember_Full_Name']; let Body_Template_Long = inputConfig['Email Body']; let Body_Template = Body_Template_Long.join(' '); let Meeting_Date = inputConfig['inpMeeting_Date']; let Meeting_Title = inputConfig['inpMeeting_Title']; let Agenda_Deadline = inputConfig['Deadline']; let Email_Body_Field = “Body”; let Email_Status_field = “Status”; let displayText = “Agenda Submittal Form”; let currentDate = new Date(); let Overdue_HTML = `<strong>(Overdue)</strong>`; let email=null;
let BoardMembersTable = base.getTable(“Board Meeting Members”); let memberRecord = await BoardMembersTable.selectRecordAsync(Member_Rec_ID); if (memberRecord) {
email = memberRecord.getCellValue("Email");
Member_Name = memberRecord.getCellValue("Nickname");
Member_Full_Name = memberRecord.getCellValue("Full Name");
console.log(`Email: ${email}`);
console.log(`Nickname0: ${Member_Name}`);
console.log(`Full Name: ${Member_Full_Name}`);
} else {
console.log("memberRecord is null");
} let MembersTable = base.getTable(“Members”); let officersView = MembersTable.getView(“Officers”);
// Query the records from the “Officers” view let query = await officersView.selectRecordsAsync({
fields: ["Office", "Email", "Nickname"] });
// Initialize a variable to hold the secretary's email let secretaryEmail = null; let secretaryName = null;
for (let record of query.records) {
let roles = record.getCellValue("Office");
if (roles && roles.includes("Secretary")) {
// Get the value of the "Email" field
secretaryEmail = record.getCellValue("Email");
secretaryName = record.getCellValue("Nickname");
console.log(`secretaryEmail: ${secretaryEmail}`);
console.log(`secretaryName: ${secretaryName}`);
break; // Stop searching once we've found the record
}
} console.log(`Meeting_Date: ${Meeting_Date}`);
Body_Template = Body_Template.replace(“[NICKNAME]”,Member_Name); Body_Template = Body_Template.replace(“[MEETING TITLE]”,Meeting_Title); Body_Template = Body_Template.replace(“[MEETING DATE]”,Meeting_Date); Body_Template = Body_Template.replace(“[AGENDA FORM]”,Agenda_Form); Body_Template = Body_Template.replace(“[AGENDA DEADLINE]”,Agenda_Deadline); Body_Template = Body_Template.replace(/\[SECRETARY EMAIL\]/g, secretaryEmail); Body_Template = Body_Template.replace(“[SECRETARY NAME]”,secretaryName);
// Get a reference to the “Officers” view let ItemsTable = base.getTable(“Board Meeting Agenda Items”); let ItemsView = ItemsTable.getView(“Current Items”);
let Itemquery = await ItemsView.selectRecordsAsync({
fields: [ "Meeting", "Name", "Title", "Presenter","Edit Form"] });
// Initialize a variable to hold the secretary's email let ItemName = null; let ItemTitle = null; let ItemPresenter = null; let ItemEditForm = null; let ItemCount=0; let Agenda_Label = null let Agenda_List = “<ul>\n”;
for (let Itemrecord of Itemquery.records) {
let Meeting = Itemrecord.getCellValue("Meeting")[0].name;
console.log(Meeting + " : " + Meeting_Title)
ItemCount++;
if (Meeting && Meeting==Meeting_Title) {
console.log(Agenda_Label);
ItemTitle = Itemrecord.getCellValue("Title");
ItemPresenter = Itemrecord.getCellValue("Presenter")[0].name;
ItemEditForm = Itemrecord.getCellValue("Edit Form");
Agenda_List = Agenda_List + `<li><a href="${ItemEditForm}">${ItemTitle}</a> presented by ${ItemPresenter}</li>`;
}
} Agenda_List = Agenda_List + “</ul>” Body_Template = Body_Template.replace(“[AGENDA_LIST]”,Agenda_List);
// Get Task list let WorkListTable = base.getTable(“Worklist”); let BoardMeetingTasksView = WorkListTable.getView(“Board Meeting Tasks”);
let WorkListquery = await BoardMeetingTasksView.selectRecordsAsync({ fields: [ “Name”,“Assignee”, “Task Title”, “Email”,“Due Date”,“Worklist Form”] });
let Work_List = “<ul>\n”;0
for (let WorkListrecord of WorkListquery.records) {
let Assignees = WorkListrecord.getCellValue("Assignee");
if (Assignees) {
for (let assignee of Assignees) {
console.log(assignee.name + "," + Member_Full_Name);
if (assignee.name == Member_Full_Name) {
let TaskTitle = WorkListrecord.getCellValue("Task Title");
let WorkListForm = WorkListrecord.getCellValue("Worklist Form");
let Due_Date = WorkListrecord.getCellValue("Due Date");
let dueDateObj = new Date(Due_Date);
let Overdue_CD = "";
if (dueDateObj < currentDate) {
Overdue_CD = Overdue_HTML;
}
Work_List = Work_List + `<li><a href="${WorkListForm}">${TaskTitle}</a> due by ${Due_Date}${Overdue_CD}</li>`;
}
}
}
}
Work_List += “</ul>”; Body_Template = Body_Template.replace(“[WORK_LIST]”,Work_List);
let newstatus=“Send”;
console.log(Body_Template);
await Email_table.updateRecordAsync(Email_Rec_ID, {
[Email_Body_Field]: Body_Template,
[Email_Status_field]: { name: newstatus }
});
await unselectOption(Board_Meeting_Rec_ID, “Board Meeting”, “Actions on Submit”, “Request Agenda Items”);
async function unselectOption(recordId, tableName, fieldName, optionLabel) {
// Get the table and record let table = base.getTable(tableName);
// Get the record's multi-select field value let record = await table.selectRecordAsync(recordId); let multiSelectField = record.getCellValue(fieldName);
// Filter out the option you want to unselect let updatedOptions = multiSelectField.filter(option => option.name !== optionLabel);
// Update the multi-select field with the filtered options
await table.updateRecordAsync(recordId, {
[fieldName]: updatedOptions
});
console.log(`Unselected option '${optionLabel}' from the field '${fieldName}'`);
}
</code>
