صيغة كرون في Salesforce
يتكوّن التعبير الذي يُمرَّر إلى System.schedule من ستة حقول إلزامية وحقل اختياري للسنة:
| الحقل | القيم المسموحة | الرموز الخاصة |
|---|---|---|
| الثانية | 0–59 | رقم صحيح واحد فقط |
| الدقيقة | 0–59 | رقم صحيح واحد فقط |
| الساعة | 0–23 | , - * / |
| يوم الشهر | 1–31 | , - * ? / L W |
| الشهر | 1–12 أو JAN–DEC | , - * / |
| يوم الأسبوع | 1–7 أو SUN–SAT (1 = الأحد) | , - * ? / L # |
| السنة | 1970–2099 (اختياري) | , - * / |
الرموز الخاصة
| الرمز | المعنى |
|---|---|
? | بلا قيمة محددة، ويجب وضعه في حقل يوم الشهر أو حقل يوم الأسبوع: 0 0 8 ? * MON-FRI. |
L | الأخير: L في حقل يوم الشهر هو آخر يوم في الشهر، و6L في حقل يوم الأسبوع آخر جمعة. |
W | أقرب يوم عمل إلى تاريخ معيّن: 15W، أما LW فهو آخر يوم عمل في الشهر. |
# | ترتيب اليوم في الشهر: 2#1 هو أول إثنين في الشهر. |
/ | خطوة التكرار، وهي مسموحة في الساعات والأيام والأشهر (0 0 */4 * * ?) لكنها غير مسموحة في الثواني والدقائق. |
أمثلة على كرون Salesforce
اضغط على أي تعبير لتحميله في المولّد أعلاه.
| التعبير | الجدول الزمني |
|---|---|
| في تمام الساعة 8:00 ص، من الإثنين إلى الجمعة. | |
| عند الدقيقة 0 من كل ساعة. | |
| في تمام الساعة 10:30 م. | |
| عند الدقيقة 0 من كل ساعة، كل 4 ساعات. | |
| في تمام الساعة 12:00 ص، في اليوم 1 من الشهر. | |
| في تمام الساعة 6:00 م، في آخر يوم من الشهر. | |
| في تمام الساعة 9:00 ص، في أول إثنين من الشهر. | |
| في تمام الساعة 12:00 م، في آخر جمعة من الشهر. | |
| في تمام الساعة 6:00 ص، في اليوم 15 من الشهر، في شهر مارس فقط، في عام 2027. |
قواعد Salesforce التي يجب معرفتها
- يجب أن تكون الثواني والدقائق رقمًا صحيحًا واحدًا. فالتعبير
0 */15 * * * ?يفشل برسالة «Seconds and minutes must be specified as integers»، لذا تحتاج المهمة التي تعمل كل 15 دقيقة إلى أربع مهام مجدولة عند الدقائق 0 و15 و30 و45. - يستخدم الجدول المنطقة الزمنية للمستخدم الذي يستدعي
System.schedule. - يمكن أن يحتوي الحساب (org) على 100 مهمة Apex مجدولة كحد أقصى في الوقت نفسه، لذا تستهلك حلول التشغيل كل بضع دقائق هذا الحد بسرعة.
- تعمل المهمة عند توفّر موارد النظام، لذا قد تبدأ بعد الموعد المحدد بقليل.
الاستخدام في Apex
جدول صنفًا (class) يطبّق الواجهة Schedulable. تعيد الدالة System.schedule معرّف المهمة:
// Weekdays at 08:00, in the time zone of the user running this code
System.schedule('Weekday report', '0 0 8 ? * MON-FRI', new WeekdayReport());
// Every 15 minutes: one job per quarter hour
for (Integer m = 0; m < 60; m += 15) {
System.schedule('Sync at :' + String.valueOf(m).leftPad(2, '0'),
'0 ' + m + ' * * * ?', new SyncJob());
}
الأسئلة الشائعة
هل يمكن جدولة Apex كل 5 أو 15 دقيقة؟
ليس بتعبير واحد، لأن Salesforce يقبل رقمًا واحدًا فقط في حقل الدقائق. جدول عدة مهام بدلًا من ذلك: أربع مهام عند الدقائق 0 و15 و30 و45 تعطيك دورة كل 15 دقيقة، واثنتا عشرة مهمة تعطيك دورة كل 5 دقائق. وتُحتسب كل مهمة ضمن حد المهام المجدولة البالغ 100 مهمة.
ما المنطقة الزمنية التي يستخدمها System.schedule؟
المنطقة الزمنية للمستخدم الذي يجدول المهمة. فإذا جدول مسؤول في دبي التعبير 0 0 8 * * ? فستعمل المهمة الساعة 08:00 بتوقيت دبي.
كيف أعرض مهمة مجدولة أو أوقفها؟
افتح Setup ثم Scheduled Jobs لعرضها وحذفها، أو استدعِ System.abortJob(jobId) مع المعرّف الذي يعيده System.schedule.
مولدات كرون لمنصات أخرى
*/15 8-18 * * 1-5
مولد تعبيرات كرون Quartz
0 0 8 ? * MON-FRI
مولد تعبيرات كرون لـ Spring
0 0 8 * * MON-FRI
مولد تعبيرات كرون لـ AWS
0 8 ? * MON-FRI *
مولد تعبيرات كرون لـ Jenkins
H 2 * * 1-5
مولد تعبيرات كرون لـ Hangfire
0 8 * * 1-5
مولد تعبيرات كرون لـ Airflow
0 6 * * 1-5
مولد تعبيرات node-cron
0 30 8 * * 1-5