Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
automation:agenda_item_request [2025/01/22 02:33] – Jeff Johnson | automation:agenda_item_request [2025/01/22 03:02] (current) – Jeff Johnson | ||
---|---|---|---|
Line 2: | Line 2: | ||
This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting. | This automation sends an email out to each board member to request any agenda items they want to discuss at the next meeting. | ||
===== Trigger ===== | ===== Trigger ===== | ||
- | * Table: "Board Meeting" | + | * TriggerRecord: < |
- | * Field: "Actions on Submit" | + | * Field: <color darkred> |
- | * Is Exactly | + | * Is Exactly |
=====Flow===== | =====Flow===== | ||
- | <code> | + | >For each <color green> |
- | For each BoardMeetingMembers | + | >> Create Record <color green> |
+ | >>Run Script | ||
+ | >>>< | ||
+ | |||
+ | |||
+ | let Email_table = base.getTable("emails" | ||
+ | let inputConfig = input.config(); | ||
+ | |||
+ | let Email_Rec_ID = inputConfig[' | ||
+ | let Member_Rec_ID = inputConfig[' | ||
+ | let Board_Meeting_Rec_ID = inputConfig[' | ||
+ | let Agenda_Form | ||
+ | let Member_Name = inputConfig[' | ||
+ | let Member_Full_Name = inputConfig[' | ||
+ | let Body_Template_Long = inputConfig[' | ||
+ | let Body_Template = Body_Template_Long.join(' | ||
+ | let Meeting_Date = inputConfig[' | ||
+ | let Meeting_Title = inputConfig[' | ||
+ | let Agenda_Deadline = inputConfig[' | ||
+ | let Email_Body_Field = " | ||
+ | let Email_Status_field = " | ||
+ | let displayText = " | ||
+ | let currentDate = new Date(); | ||
+ | let Overdue_HTML = `<span style=" | ||
+ | let email=null; | ||
+ | |||
+ | let BoardMembersTable = base.getTable(" | ||
+ | let memberRecord = await BoardMembersTable.selectRecordAsync(Member_Rec_ID); | ||
+ | if (memberRecord) { | ||
+ | email = memberRecord.getCellValue(" | ||
+ | Member_Name = memberRecord.getCellValue(" | ||
+ | Member_Full_Name = memberRecord.getCellValue(" | ||
+ | console.log(`Email: ${email}`); | ||
+ | console.log(`Nickname0: | ||
+ | console.log(`Full Name: ${Member_Full_Name}`); | ||
+ | } | ||
+ | else { | ||
+ | console.log(" | ||
+ | } | ||
+ | let MembersTable = base.getTable(" | ||
+ | let officersView = MembersTable.getView(" | ||
+ | |||
+ | // Query the records | ||
+ | let query = await officersView.selectRecordsAsync({ | ||
+ | fields: [" | ||
+ | |||
+ | // Initialize a variable to hold the secretary' | ||
+ | let secretaryEmail = null; | ||
+ | let secretaryName = null; | ||
+ | |||
+ | for (let record of query.records) { | ||
+ | let roles = record.getCellValue(" | ||
+ | |||
+ | if (roles && roles.includes(" | ||
+ | // Get the value of the " | ||
+ | secretaryEmail = record.getCellValue(" | ||
+ | secretaryName = record.getCellValue(" | ||
+ | console.log(`secretaryEmail: ${secretaryEmail}`); | ||
+ | console.log(`secretaryName: | ||
+ | break; // Stop searching once we've found the record | ||
+ | } | ||
+ | } | ||
+ | console.log(`Meeting_Date: | ||
+ | |||
+ | Body_Template = Body_Template.replace(" | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | Body_Template = Body_Template.replace(/ | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | |||
+ | // Get a reference to the " | ||
+ | let ItemsTable = base.getTable(" | ||
+ | let ItemsView = ItemsTable.getView(" | ||
+ | |||
+ | let Itemquery = await ItemsView.selectRecordsAsync({ | ||
+ | fields: [ " | ||
+ | |||
+ | // Initialize a variable to hold the secretary' | ||
+ | let ItemName = null; | ||
+ | let ItemTitle = null; | ||
+ | let ItemPresenter = null; | ||
+ | let ItemEditForm = null; | ||
+ | let ItemCount=0; | ||
+ | let Agenda_Label = null | ||
+ | let Agenda_List = "< | ||
+ | |||
+ | for (let Itemrecord of Itemquery.records) { | ||
+ | let Meeting = Itemrecord.getCellValue(" | ||
+ | console.log(Meeting + " : " + Meeting_Title) | ||
+ | ItemCount++; | ||
+ | |||
+ | if (Meeting && Meeting==Meeting_Title) { | ||
+ | console.log(Agenda_Label); | ||
+ | |||
+ | ItemTitle = Itemrecord.getCellValue(" | ||
+ | ItemPresenter = Itemrecord.getCellValue(" | ||
+ | ItemEditForm = Itemrecord.getCellValue(" | ||
+ | Agenda_List = Agenda_List + `< | ||
+ | } | ||
+ | |||
+ | } | ||
+ | Agenda_List = Agenda_List + "</ | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | |||
+ | // Get Task list | ||
+ | let WorkListTable = base.getTable(" | ||
+ | let BoardMeetingTasksView = WorkListTable.getView(" | ||
+ | |||
+ | let WorkListquery = await BoardMeetingTasksView.selectRecordsAsync({ | ||
+ | |||
+ | let Work_List = "< | ||
+ | |||
+ | for (let WorkListrecord of WorkListquery.records) { | ||
+ | let Assignees = WorkListrecord.getCellValue(" | ||
+ | |||
+ | if (Assignees) { | ||
+ | for (let assignee of Assignees) { | ||
+ | console.log(assignee.name + "," | ||
+ | |||
+ | if (assignee.name == Member_Full_Name) { | ||
+ | let TaskTitle = WorkListrecord.getCellValue(" | ||
+ | let WorkListForm = WorkListrecord.getCellValue(" | ||
+ | let Due_Date = WorkListrecord.getCellValue(" | ||
+ | let dueDateObj = new Date(Due_Date); | ||
+ | let Overdue_CD = ""; | ||
+ | if (dueDateObj < currentDate) { | ||
+ | Overdue_CD = Overdue_HTML; | ||
+ | } | ||
+ | Work_List = Work_List + `< | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | Work_List | ||
+ | Body_Template = Body_Template.replace(" | ||
+ | |||
+ | |||
+ | let newstatus=" | ||
+ | |||
+ | console.log(Body_Template); | ||
+ | |||
+ | await Email_table.updateRecordAsync(Email_Rec_ID, | ||
+ | [Email_Body_Field]: | ||
+ | [Email_Status_field]: | ||
+ | }); | ||
+ | |||
+ | await unselectOption(Board_Meeting_Rec_ID, | ||
+ | |||
+ | |||
+ | async function unselectOption(recordId, | ||
+ | // Get the table and record | ||
+ | let table = base.getTable(tableName); | ||
+ | |||
+ | // Get the record' | ||
+ | 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]: | ||
+ | }); | ||
+ | |||
+ | console.log(`Unselected option ' | ||
+ | } | ||
</ | </ |