Is it possible to create a new function then assign it to a trigger when you click a button or use an existing function?

Viewed 46

At the moment, I manually create code then manually ask the user to set the trigger for the said function in order for the said user to receive a task and update task.

Heres an example of my coding:

User's Function

function Person1Variables () {
taskedPerson = assignedPerson.filter(x => x == "Person1 (assigned by Somebody)").length
taskReceiver = "Person1 (assigned by Somebody)"
taskReceived = "Person1 (Sent)"
functionCaller = "Person1 "
myTask = "My Tasks"
}

function taskSendPerson1() {
Person1Variables()
if (taskedPerson + 1 > 1){taskSending(taskTitle(myTask)); console.log("Snag")}
}

function updateTaskPerson1() {
Person1Variables()
taskComplete(taskTitle(myTask));
}

Task Creation and Update

function taskTitle(titleTasksList) {
if (typeof titleTasksList === 'undefined') { titleTasksList = 'default'; }
var rezultId = 0;
var response = Tasks.Tasklists.list();
var taskLists = response.items;
if (taskLists && taskLists.length > 0) {
  for (var i = 0; i < taskLists.length; i++) {
    var taskList = taskLists[i];
    if (titleTasksList == 'default') {
      rezultId = taskList.id; //return first item
      break;
    } else {
      Logger.log('%s (%s)', taskList.title, taskList.id);
      if (titleTasksList == taskList.title) {
        rezultId = taskList.id;
        break;
      }
    }
  }
} else {
  Logger.log('No task lists found.');
}
return rezultId;
}

 function taskSending(taskListId) {
 // Task details with title and notes for inserting new task  

 var currentResult = 1
 var nextResult = 1

 for (var resultsFound = 0; resultsFound < taskedPerson; resultsFound++){

 console.log("pong")  

 var searchEngine = "Assigned Person"

 var searchRange = sheet.getRange(nextResult,(lastColumn[0].indexOf(searchEngine) + 1), 
 sheet.getLastRow(), 1)
 var searchRangeValues= searchRange.getValues()

 currentResult = searchRangeValues.map(String).indexOf(taskReceiver) + nextResult

 var resultTitle = responseNumber[currentResult -1]
 var resultNote = typeSupport[currentResult - 1] + " = " + typeRequest[currentResult - 1]

 let task = {
 title: String(resultTitle),
 notes: resultNote,
 };

 // Call insert method with taskDetails and taskListId to insert Task to specified tasklist.

 console.log(task)
 console.log(taskListId)
 
 task = Tasks.Tasks.insert(task, taskListId);
 // Print the Task ID of created task.
 Logger.log('Task with ID "%s" was created.', task.id);

 sheet.getRange(currentResult,2).setValue (taskReceived)

 nextResult = currentResult + 1

 console.log(nextResult + " " + "processed")

 }
 } 

function newTask(taskListId) {
// Task details with title and notes for inserting new task

var allResults = [];
var allTitles = [];

for (var j = 0; j < itemResponses.length + 1; j++) {
  var itemResponse = itemResponses[j]; 
  for (var g = 0; g < 30; g++){ try {allResults [g] = String(itemResponses[g].getResponse()); allTitles [g] = itemResponses[g].getItem().getTitle();var lastResponse = g} catch(err) {}}    
  }
  
  console.log("PING")

  var refNumber =  new Date().getFullYear().toString().substr(-2) + String(("00000000" + (formResponses.length))).substr(String(("00000000" + (formResponses.length))).length - 8);
  
let task = {
  title: refNumber,
  notes: allTitles [3] + " = " + allResults [3],
};
try {
  // Call insert method with taskDetails and taskListId to insert Task to specified tasklist.
  task = Tasks.Tasks.insert(task, taskListId);
  // Print the Task ID of created task.
  Logger.log('Task with ID "%s" was created.', task.id);
} catch (err) {
  // TODO (developer) - Handle exception from Tasks.insert() of Task API
  Logger.log('Failed with an error %s', err.message);
}
}

 function taskComplete(taskListId) {
var optionalArgs = {
  maxResults: 100,
  showHidden: true  
};
var tasks = Tasks.Tasks.list(taskListId, optionalArgs);
if (tasks.items) {

  for (var i = 0; i < tasks.items.length; i++) {
    var task = tasks.items[i];
    for (var x = 0; x < responseNumber.length; x++){
      if (responseNumber[x] == task.title){sheet.getRange(x + 1,lastColumn[0].indexOf("Status")+1).setValue(task.status); } 
    }
  }

var dataFound = 0

//Tasks.Tasks.remove(taskListId,tasks.items[dataFound].id)


for (var x = 0; x < responseNumber.length; x++)
  {try{if (tasks.items[dataFound].status == "completed" && (responseNumber.map(String).indexOf(String(tasks.items[dataFound].title))) > 1){Tasks.Tasks.remove(taskListId,tasks.items[dataFound].id); sheet.getRange(responseNumber.map(String).indexOf(String(tasks.items[dataFound].title)) + 1,lastColumn[0].indexOf("Assigned Person")+1).setValue(functionCaller)}; dataFound++} catch(err){}} 
}

}

My plan was to create a button that can detect if that user has or has not created a function. If the user does not have dedicated function, then this button will create a function and assigned the trigger.

1 Answers
Related