Schema + sample data: SCHEMA_AND_DATA.html · App sys_id e5f5bc9493a303507520703efaba104d
HR Leave — All Scripts Inventory (كل السكربتات)
اقرأ أولاً (ملخص سريع): MASTER_ALL_IN_ONE_SUMMARY.md · HTML: html/MASTER_ALL_IN_ONE_SUMMARY.html
الدليل الشامل الواحد: MASTER_ALL_IN_ONE.md · HTML: html/MASTER_ALL_IN_ONE.html
ممارسة الشاشات (New/Open): MASTER_PRACTICE_GUIDE_ALL_TOPICS.md · html/MASTER_PRACTICE_GUIDE_ALL_TOPICS.html
Platform: ServiceNow Australia · Scopex_786686_hr_leave· sys_ide5f5bc9493a303507520703efaba104d
Platform target: ServiceNow Australia (current family, Sep 2026) · next EA: Brazil
App: Custom · Scope x_786686_hr_leave · sys_id e5f5bc9493a303507520703efaba104d
URLs: ../SERVICENOW_DIRECT_URLS_CATALOG.md · 1-week: ../SERVICENOW_ONE_WEEK_STUDY_DEPLOY_AUSTRALIA.mdApp type: Custom
Scope:x_786686_hr_leave
sys_id:e5f5bc9493a303507520703efaba104d
Date created: 2026-09-09 20:20:55
الهوية: APPLICATION.md
الصق السكربتات داخل التطبيق x_786686_hr_leave فقط (Application picker = HR Leave).
1) Business Rules — src/server/business_rules/
| File | Table | When | Purpose |
|---|---|---|---|
BR1_calculate_days.js |
x_786686_hr_leave_req_v2 |
before insert/update | يحسب الأيام + يضبط Approver عبر x_786686_hr_leave.HRLXProLeaveUtilsV2 |
BR2_on_submit_event.js |
x_786686_hr_leave_req_v2 |
after | Event: x_786686_hr_leave.leave_v2.submitted |
BR3_audit_state_change.js |
x_786686_hr_leave_req_v2 |
after update | Audit + recalculate balance عند الاعتماد |
BR4_on_approve_reject_event.js |
x_786686_hr_leave_req_v2 |
after update | Events: .approved / .rejected |
Fluent mirror: sdk/examples/business-rules.now.ts · servicenow-ai-workspace/hr-leave-sdk/src/fluent/business-rules.now.ts
2) Client Scripts — src/client/client_scripts/
| File | Table | Type | Purpose |
|---|---|---|---|
CS1_validate_dates.js |
x_786686_hr_leave_req_v2 |
onChange u_end_date |
يمنع End قبل Start |
CS2_calc_days_glideajax.js |
x_786686_hr_leave_req_v2 |
onChange u_end_date |
GlideAjax('x_786686_hr_leave.HRLXProLeaveUtilsV2') → u_days_count |
UI Policy (doc): src/client/ui_policies/UIP1_sick_requires_reason.md
3) Script Includes — src/server/script_includes/
| File | API name | Client callable | Purpose |
|---|---|---|---|
HRLXProLeaveUtilsV2.js |
x_786686_hr_leave.HRLXProLeaveUtilsV2 |
Yes | أيام عمل، Approver، رصيد، Audit |
HRLXProSecurityUtilsV2.js |
x_786686_hr_leave.HRLXProSecurityUtilsV2 |
— | ACL helpers |
HRLXProIntegrationUtilsV2.js |
x_786686_hr_leave.HRLXProIntegrationUtilsV2 |
— | REST in/out |
4) Catalog / Record Producer — src/catalog/
| File | Target table | Purpose |
|---|---|---|
RP_submit_leave.js |
x_786686_hr_leave_req_v2 |
يملأ الطلب من Variables عند Submit |
5) REST — src/server/rest/
| File | Purpose |
|---|---|
inbound_scripted_rest_leave.js |
Scripted REST وارد — إنشاء إجازة |
outbound_rest_message.js |
Outbound REST Message / push قرار |
Docs: SCRIPTED_REST_INBOUND_SETUP.md · OUTBOUND_REST_MESSAGE_SETUP.md · rest_api_explorer.md
6) Scheduled Jobs — src/server/scheduled_jobs/
| File | Purpose |
|---|---|
annual_accrual.js |
ترحيل رصيد سنوي على جداول x_786686_hr_leave_* |
7) Portal Widgets — src/portal/widgets/
| Widget | Files | Tables |
|---|---|---|
hrlx_my_leaves |
server.js + client.js |
x_786686_hr_leave_req_v2 |
hrlx_balance |
server.js + client.js |
x_786686_hr_leave_employee_v2 · _bal_v2 |
8) قواعد الاستدعاء (مهم)
| من أين | الشكل الصحيح |
|---|---|
| Client Script / GlideAjax | new GlideAjax('x_786686_hr_leave.HRLXProLeaveUtilsV2') |
| Business Rule / REST داخل التطبيق | new x_786686_hr_leave.HRLXProLeaveUtilsV2() |
| Events | x_786686_hr_leave.leave_v2.submitted / .approved / .rejected |
| Tables | x_786686_hr_leave_req_v2 … |
استخدم فقط النطاق x_786686_hr_leave — لا تستخدم النطاقات القديمة (x_2065034_hr_leave / x_demo_hr_leave / x_pro_hrlx).
9) Checklist على المثيل
- Application picker → HR Leave (
x_786686_hr_leave) - افتح
sys_app→ sys_id =e5f5bc9493a303507520703efaba104d - أنشئ/حدّث كل ملف أعلاه داخل نفس الـ Scope
- Script Include: Client callable = true لـ
HRLXProLeaveUtilsV2 - اختبر CS2: تغيير End date يملأ
u_days_countعبر GlideAjax