നിങ്ങളുടെ Apex-ൽ സമ്മർ '26-ൽ കുറഞ്ഞ റെക്കോർഡുകൾ ലഭിച്ചേക്കാം
Salesforce Summer '26 (API v67.0) Apex-ൽ ഒരു പ്രധാന മാറ്റം കൊണ്ടുവരുന്നു. ഈ മാറ്റം ഒരു എറർ (error) കാണിക്കാതെ തന്നെ നിങ്ങളുടെ കോഡിന്റെ ഫലങ്ങളിൽ മാറ്റം വരുത്തിയേക്കാം.
വർഷങ്ങളായി, Apex ഡിഫോൾട്ട് ആയി system mode-ലാണ് പ്രവർത്തിച്ചിരുന്നത്. ഇതിനർത്ഥം SOQL, SOSL, DML എന്നിവ യൂസർ പെർമിഷനുകളും (user permissions) ഷെയറിംഗ് റൂളുകളും (sharing rules) അവഗണിക്കും എന്നാണ്. കാണാൻ അനുവാദമില്ലാത്ത ഡാറ്റ പോലും നിങ്ങളുടെ കോഡ് ഉപയോക്താക്കൾക്ക് കാണിച്ചുേക്കാം.
API v67.0-ൽ, ഈ രീതി മാറുന്നു. ഡാറ്റാബേസ് ഓപ്പറേഷനുകൾ ഇനി user mode-ലാണ് പ്രവർത്തിക്കുക.
v67.0-ൽ വരുന്ന മാറ്റങ്ങൾ:
• SOQL, SOSL, DML എന്നിവ ഡിഫോൾട്ട് ആയി യൂസർ പെർമിഷനുകളും ഷെയറിംഗ് റൂളുകളും നടപ്പിലാക്കും. • ഷെയറിംഗ് ഡിക്ലറേഷൻ ഇല്ലാത്ത ക്ലാസുകൾ ഇനി മുതൽ "with sharing" ആയി കണക്കാക്കപ്പെടും. • "WITH SECURITY_ENFORCED" ഒഴിവാക്കി. പകരം നിങ്ങൾ "WITH USER_MODE" ഉപയോഗിക്കണം. • Triggers എപ്പോഴും system mode-ൽ തന്നെ പ്രവർത്തിക്കും.
ഈ മാറ്റം നിങ്ങളുടെ ക്ലാസിന്റെ API വേർഷനുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു. നിങ്ങൾ അവയെ 67.0-ലേക്ക് അപ്ഗ്രേഡ് ചെയ്യുന്നത് വരെ പഴയ ക്ലാസുകളിൽ മാറ്റം വരില്ല. ഇത് മൈഗ്രേഷൻ (migration) നിയന്ത്രിക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു.
ശ്രദ്ധിക്കേണ്ട നിശബ്ദമായ പ്രശ്നങ്ങൾ (silent issues):
- ക്വറികളിൽ കുറഞ്ഞ റെക്കോർഡുകൾ ലഭിക്കുന്നു: യൂസർക്ക് ആക്സസ് ഇല്ലാത്തതിനാൽ ഒരു ക്വറി 500തിന് പകരം 40 വരികൾ മാത്രം നൽകിയേക്കാം. ഇത് തെറ്റായ ടോട്ടലുകൾക്കും റിപ്പോർട്ടുകൾക്കും കാരണമാകും.
- കോമ്പിലേഷൻ എററുകൾ (Compilation errors): പുതിയ വേർഷനിൽ "WITH SECURITY_ENFORCED" ഉപയോഗിച്ചാൽ കോമ്പൈൽ ചെയ്യാൻ കഴിയില്ല.
- ഇന്റഗ്രേഷൻ പരാജയങ്ങൾ: ഓട്ടോമേറ്റഡ് ജോലികൾക്കായി ആവശ്യമായ ഡാറ്റയിലേക്ക് ഇന്റഗ്രേഷൻ യൂസർമാർക്ക് ആക്സസ് നഷ്ടപ്പെട്ടേക്കാം.
- ഷെയറിംഗ് മാറ്റങ്ങൾ: ഷെയറിംഗ് ഡിക്ലറേഷൻ ഇല്ലാതെ പ്രവർത്തിച്ചിരുന്ന ക്ലാസുകൾ ഇനി ഷെയറിംഗ് നിയമങ്ങൾ പാലിക്കാൻ നിർബന്ധിതമാകും.
സുരക്ഷിതമായി മൈഗ്രേറ്റ് ചെയ്യുന്നത് എങ്ങനെ:
- കോഡ് പരിശോധിക്കുക: "WITH SECURITY_ENFORCED" എന്നതും ഷെയറിംഗ് ഡിക്ലറേഷൻ ഇല്ലാത്ത ക്ലാസുകളും തിരയുക.
- sandbox-ൽ ടെസ്റ്റ് ചെയ്യുക: കൺട്രോളറുകൾ (controllers), REST എൻഡ്പോയിന്റുകൾ (REST endpoints) തുടങ്ങിയ ഉയർന്ന റിസ്കുള്ള ക്ലാസുകൾ ആദ്യം അപ്ഡേറ്റ് ചെയ്യുക.
- System.runAs() ഉപയോഗിക്കുക: ടെസ്റ്റുകൾ പാസായതുകൊണ്ട് മാത്രം വിശ്വസിക്കരുത്. ഡാറ്റാ വിസിബിലിറ്റി പരിശോധിക്കാൻ നിയന്ത്രണങ്ങളുള്ള (restricted) യൂസർമാരെ ഉപയോഗിച്ച് ടെസ്റ്റ് ചെയ്യുക.
- കൃത്യത പാലിക്കുക: വ്യക്തമായ കാരണമുണ്ടെങ്കിൽ മാത്രം "SYSTEM_MODE" അല്ലെങ്കിൽ "without sharing" ഉപയോഗിക്കുക.
ഈ മാറ്റങ്ങൾ ഇപ്പോൾ വരുത്തുന്നത് ഭാവിയിൽ പ്രൊഡക്ഷനിൽ ഉണ്ടായേക്കാവുന്ന നിശബ്ദമായ ബഗുകൾ (bugs) ഒഴിവാക്കാൻ സഹായിക്കും.
Optional learning community: https://t.me/GyaanSetuAi