|
11 | 11 | </apex:define> |
12 | 12 | <apex:define name="html_content_core"> |
13 | 13 | <div id="datatable" /> |
| 14 | + |
| 15 | + <div class="slds-tabs_default"> |
| 16 | + <ul class="slds-tabs_default__nav" role="tablist"> |
| 17 | + <li class="slds-tabs_default__item slds-is-active" title="Apex Jobs" role="presentation"> |
| 18 | + <a class="slds-tabs_default__link" href="javascript:void(0);" role="tab" tabindex="0" aria-selected="true" aria-controls="tab-default-apexjobs" id="tab-default-apexjobs__item">Apex Jobs</a> |
| 19 | + </li> |
| 20 | + <li class="slds-tabs_default__item" title="Scheduled Jobs" role="presentation"> |
| 21 | + <a class="slds-tabs_default__link" href="javascript:void(0);" role="tab" tabindex="-1" aria-selected="false" aria-controls="tab-default-scheduledjobs" id="tab-default-scheduledjobs__item">Scheduled Jobs</a> |
| 22 | + </li> |
| 23 | + <li class="slds-tabs_default__item" title="Schedulable classes not yet scheduled" role="presentation"> |
| 24 | + <a class="slds-tabs_default__link" href="javascript:void(0);" role="tab" tabindex="-1" aria-selected="false" aria-controls="tab-default-notscheduledjobs" id="tab-default-notscheduledjobs__item">Schedulable classes not yet scheduled</a> |
| 25 | + </li> |
| 26 | + </ul> |
| 27 | + <div id="tab-default-apexjobs" class="slds-tabs_default__content slds-show" role="tabpanel" aria-labelledby="tab-default-apexjobs__item"> |
| 28 | + <div id="datatable-apexjobs" /> |
| 29 | + </div> |
| 30 | + <div id="tab-default-scheduledjobs" class="slds-tabs_default__content slds-hide" role="tabpanel" aria-labelledby="tab-default-scheduledjobs__item"> |
| 31 | + <div id="datatable-scheduledjobs" /> |
| 32 | + </div> |
| 33 | + <div id="tab-default-notscheduledjobs" class="slds-tabs_default__content slds-hide" role="tabpanel" aria-labelledby="tab-default-notscheduledjobs__item"> |
| 34 | + <div id="datatable-notscheduledjobs" /> |
| 35 | + </div> |
| 36 | + </div> |
14 | 37 | </apex:define> |
15 | 38 | <apex:define name="html_start_definition_script"> |
16 | 39 | <script> |
17 | 40 | function start2(controller, helper) { |
| 41 | + |
| 42 | + // Initialize TABS bindings |
| 43 | + helper.html.tabs.initialize('slds-tabs_default__item', 'slds-tabs_default__content', 'slds-button'); |
| 44 | + |
| 45 | + // RUN CONTROLLER |
18 | 46 | controller.run({ |
19 | | - datasets: [ 'batches' ], |
| 47 | + datasets: [ 'batchesApexJobs', 'batchesScheduledJobs', 'users', 'apexClasses' ], |
20 | 48 | onRecords: function(map) { |
21 | 49 |
|
22 | | - // Render the data in a table |
| 50 | + // Render the data in a table for failed Apex Jobs |
23 | 51 | helper.html.datatable.create({ |
24 | | - element: 'datatable', |
| 52 | + element: 'datatable-apexjobs', |
25 | 53 | columns: [ |
26 | | - { name: 'Context', property: 'context' }, |
27 | 54 | { name: 'Type', property: 'type' }, |
28 | | - { name: 'Status', property: 'status' }, |
29 | | - { name: 'Message', property: 'message' } |
| 55 | + { name: 'Apex Context', property: 'context' }, |
| 56 | + { name: 'Score', type: 'numeric', property: '##score##' }, |
| 57 | + { name: 'Status', property: 'status', |
| 58 | + scoreFormula: (r) => { |
| 59 | + if (r.status === 'Failed') return 1; |
| 60 | + } |
| 61 | + }, |
| 62 | + { name: 'Message', property: 'message' }, |
| 63 | + { name: 'Count', type: 'numeric', property: 'numIds' }, |
| 64 | + { name: 'Errors', type: 'numeric', property: 'numErrors' } |
30 | 65 | ], |
31 | | - data: map.apexTriggers, |
| 66 | + data: map.batchesApexJobs, |
32 | 67 | sorting: { name: 'Context', order: 'asc' }, |
33 | 68 | showSearch: true |
34 | 69 | }); |
| 70 | + |
| 71 | + // Render the data in a table for Scheduled Jobs |
| 72 | + helper.html.datatable.create({ |
| 73 | + element: 'datatable-scheduledjobs', |
| 74 | + columns: [ |
| 75 | + { name: 'Name', property: 'name' }, |
| 76 | + { name: 'Type', property: 'type' }, |
| 77 | + { name: 'Status', property: 'status', |
| 78 | + scoreFormula: (r) => { |
| 79 | + if (r.status !== 'WAITING') return 1; |
| 80 | + } |
| 81 | + }, |
| 82 | + { name: 'user', formula: (r) => { return helper.html.render.link('/'+r.userid, (map.users[r.userid]?.name || r.userid)); }}, |
| 83 | + { name: 'start', property: 'start' }, |
| 84 | + { name: 'end', property: 'end' }, |
| 85 | + { name: 'timezone', property: 'timezone' } |
| 86 | + ], |
| 87 | + data: map.batchesScheduledJobs, |
| 88 | + sorting: { name: 'Context', order: 'asc' }, |
| 89 | + showSearch: true |
| 90 | + }); |
| 91 | + |
| 92 | + // Render the data in a table for Not Scheduled Jobs |
| 93 | + helper.html.datatable.create({ |
| 94 | + element: 'datatable-notscheduledjobs', |
| 95 | + columns: [ |
| 96 | + { name: 'Name', formula: (r) => { return helper.html.render.link('/'+r.id, r.name); }}, |
| 97 | + { name: 'Score', type: 'numeric', property: '##score##' }, |
| 98 | + { name: 'Is Scheduled?', |
| 99 | + formula: (r) => { return helper.html.render.checkbox(r.isScheduled === true); }, |
| 100 | + scoreFormula: (r) => { if (r.isScheduled !== true) return 1; } |
| 101 | + }, |
| 102 | + { name: 'Package', property: 'namespace' } |
| 103 | + ], |
| 104 | + data: map.apexClasses, |
| 105 | + sorting: { name: 'Score', order: 'desc' }, |
| 106 | + filtering: { formula: (r) => { return (r.interfaces && r.interfaces.includes('System.Schedulable')); }}, |
| 107 | + showSearch: true |
| 108 | + }); |
35 | 109 | }, |
36 | 110 | actions: { |
37 | 111 | clearCache: { |
|
0 commit comments