// Returns scheduled task definitions for a business // Input: BusinessID (required) // Output: { OK: true, SCHEDULED_TASKS: [...] } function apiAbort(required struct payload) { writeOutput(serializeJSON(payload)); abort; } function readJsonBody() { var raw = getHttpRequestData().content; if (isNull(raw)) raw = ""; if (!len(trim(raw))) return {}; try { var data = deserializeJSON(raw); if (isStruct(data)) return data; } catch (any e) {} return {}; } try { data = readJsonBody(); // Get BusinessID from body, header, or URL businessID = 0; httpHeaders = getHttpRequestData().headers; if (structKeyExists(data, "BusinessID") && isNumeric(data.BusinessID)) { businessID = int(data.BusinessID); } else if (structKeyExists(httpHeaders, "X-Business-ID") && isNumeric(httpHeaders["X-Business-ID"])) { businessID = int(httpHeaders["X-Business-ID"]); } else if (structKeyExists(url, "BusinessID") && isNumeric(url.BusinessID)) { businessID = int(url.BusinessID); } if (businessID == 0) { apiAbort({ "OK": false, "ERROR": "missing_params", "MESSAGE": "BusinessID is required" }); } // Get scheduled task definitions for this business q = queryTimed(" SELECT st.ID, st.Name as Name, st.TaskCategoryID as CategoryID, st.Title as Title, st.Details as Details, st.CronExpression as CronExpression, COALESCE(st.ScheduleType, 'cron') as ScheduleType, st.IntervalMinutes as IntervalMinutes, st.IsActive as IsActive, st.LastRunOn as LastRunOn, st.NextRunOn as NextRunOn, st.CreatedOn as CreatedOn, tc.Name as Name, tc.Color as CategoryColor FROM ScheduledTaskDefinitions st LEFT JOIN TaskCategories tc ON st.TaskCategoryID = tc.ID WHERE st.BusinessID = :businessID ORDER BY st.IsActive DESC, st.Name ", { businessID: { value: businessID, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" }); scheduledTasks = []; for (row in q) { arrayAppend(scheduledTasks, { "ScheduledTaskID": row.ID, "Name": row.Name, "CategoryID": isNull(row.CategoryID) ? "" : row.CategoryID, "Title": row.Title, "Details": isNull(row.Details) ? "" : row.Details, "CronExpression": row.CronExpression, "ScheduleType": row.ScheduleType, "IntervalMinutes": isNull(row.IntervalMinutes) ? "" : row.IntervalMinutes, "IsActive": row.IsActive ? true : false, "LastRunOn": isNull(row.LastRunOn) ? "" : dateTimeFormat(row.LastRunOn, "yyyy-mm-dd HH:nn:ss"), "NextRunOn": isNull(row.NextRunOn) ? "" : dateTimeFormat(row.NextRunOn, "yyyy-mm-dd HH:nn:ss"), "CreatedOn": dateTimeFormat(row.CreatedOn, "yyyy-mm-dd HH:nn:ss"), "Name": isNull(row.Name) ? "" : row.Name, "CategoryColor": isNull(row.CategoryColor) ? "" : row.CategoryColor }); } apiAbort({ "OK": true, "SCHEDULED_TASKS": scheduledTasks, "COUNT": arrayLen(scheduledTasks) }); } catch (any e) { apiAbort({ "OK": false, "ERROR": "server_error", "MESSAGE": e.message }); }