å®è¡ã³ã³ããã¹ãã®çè§£
åŠç¿ã®ç®ç
ãã®åå ãå®äºãããšã次ã®ããšãã§ããããã«ãªããŸãã
- Apex ã®åŒã³åºãã«äœ¿çšããæ¹æ³ãçè§£ãã
- Salesforce ãªããžã§ã¯ãã®ããªã¬ãŒãèšè¿°ãã
- éçºè
ã³ã³ãœãŒã«ã§ã³ãŒããå®è¡ããŠå®è¡ã³ã³ããã¹ãã®åäœã芳å¯ãã
- ã¬ããå¶éãèšèšãã¿ãŒã³ã«äžãã圱é¿ãçè§£ãã
- äžæ¬æäœã䜿çšããããšã®éèŠæ§ãçè§£ãã
äžç·ã«ãã¬ã€ã«ãé²ã¿ãŸããã
ãšãã¹ããŒããšäžç·ã«ãã®æé ãé²ããŸãã? 次ã®åç»ãã芧ãã ãããããã¯ãTrail Togetherã(äžç·ã«ãã¬ã€ã«) ã·ãªãŒãºã®äžéšã§ãã
(å·»ãæ»ããŠæåããèŠçŽãããå Žåããã®ã¯ãªãã㯠16:36 åããéå§ãããŸãã)
å®è¡ã³ã³ããã¹ããšã¯?
ASP.NET ã¢ããªã±ãŒã·ã§ã³ã®å Žåãã³ãŒãã¯ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã³ã®ã³ã³ããã¹ãã§å®è¡ãããŸããLightning ãã©ãããã©ãŒã ç°å¢ã§ã¯ãã³ãŒãã¯å®è¡ã³ã³ããã¹ãå ã§å®è¡ãããŸãã端çã«èšããšããã®ã³ã³ããã¹ãã¯ã³ãŒããå®è¡ãããŠããçµäºãããŸã§ã®æéã衚ããŸããéèŠãªã®ã¯ãäœæãã Apex ã³ãŒã以å€ã®ã³ãŒããå®è¡ãããå¯èœæ§ããããšçè§£ããŠããããšã§ãã
ãã®ããã¿ãçè§£ããã«ã¯ããã©ãããã©ãŒã ã§ Apex ã³ãŒããå®è¡ã§ããæ¹æ³ãããã€ãç¥ã£ãŠããå¿ èŠããããŸãã
Apex ãåŒã³åºãæ¹æ³
æ¹æ³ |
説æ |
|---|---|
ããŒã¿ããŒã¹ããªã¬ãŒ |
ã«ã¹ã¿ã ãŸãã¯æšæºãªããžã§ã¯ãã§ã®ç¹å®ã®ã€ãã³ãã«å¯ŸããŠåŒã³åºãããŸãã |
å¿å Apex |
éçºè ã³ã³ãœãŒã«ããã®ä»ã®ããŒã«ã«ãããŠãã®å Žã§å®è¡ãããã³ãŒãã¹ããããã |
éåæ Apex |
future ãŸã㯠Queueable Apex ã®å®è¡æãäžæ¬åŠçãžã§ãã®å®è¡æããŸãã¯æå®ééã§ã® Apex å®è¡ã®ã¹ã±ãžã¥ãŒã«æã«è¡ãããŸãã |
Web ãµãŒãã¹ |
SOAP ãŸã㯠REST ã®ã€ã³ããŠã³ããŸãã¯ã¢ãŠãããŠã³ã Web ãµãŒãã¹ãä»ããŠå ¬éãããã³ãŒãã |
ã¡ãŒã«ãµãŒãã¹ |
åä¿¡ã¡ãŒã«ãŸãã¯éä¿¡ã¡ãŒã«ãåŠçããããã«èšå®ãããã³ãŒãã |
Visualforce ãŸã㯠Lightning ããŒãž |
Visualforce ã³ã³ãããŒã©ãŒããã³ Lightning ã³ã³ããŒãã³ãã¯ãèªåçã«ããŸãã¯ãŠãŒã¶ãŒãã¢ã¯ã·ã§ã³ãéå§ãããšã (ãã¿ã³ã®ã¯ãªãã¯ãªã©) ã« Apex ã³ãŒããå®è¡ã§ããŸããLightning ã³ã³ããŒãã³ãã Lightning ããã»ã¹ããã³ãããŒã«ãã£ãŠå®è¡ã§ããŸãã |
Apex ã³ãŒãã®åŒã³åºã以å€ã«ããæ°èŠ ToDo ã®äœæãã¡ãŒã«ã®éä¿¡ãé ç®èªåæŽæ°ã®å®è¡ãã¢ãŠãããŠã³ãã¡ãã»ãŒãžã®éä¿¡ãªã©ã®ã¢ã¯ã·ã§ã³ãã¹ãŠããããããã®å®£èšåãã©ãããã©ãŒã æ©èœã«ãã£ãŠããªã¬ãŒã§ããŸãããããã®ã¢ã¯ã·ã§ã³ããå®è¡ã³ã³ããã¹ãå ã§å®è¡ãããŸãã
ãã 1 ã€ã®éèŠãªèæ
®äºé
ã¯ãApex ã³ãŒããå®è¡ãããŠãŒã¶ãŒã®ã³ã³ããã¹ãã§ããããã©ã«ãã§ã¯ãApex ã¯ã·ã¹ãã ã³ã³ããã¹ãã§å®è¡ãããŸããApex ã³ãŒãã¯ãã¹ãŠã®ãªããžã§ã¯ãããã³é
ç®ã«ã¢ã¯ã»ã¹ã§ããŸãããªããžã§ã¯ãæš©éãé
ç®ã¬ãã«ã»ãã¥ãªãã£ãå
±æã«ãŒã«ã¯çŸåšã®ãŠãŒã¶ãŒã«ã¯é©çšãããŸãããwith sharing ããŒã¯ãŒãã䜿çšããŠãã¯ã©ã¹ã§çŸåšã®ãŠãŒã¶ãŒã®å
±æã«ãŒã«ãèæ
®ããããã«æå®ã§ããŸãããã®ãããã¯ã¯éèŠã§ããããã詳现ã¯ããwith sharing ãŸã㯠without sharing ããŒã¯ãŒãã®äœ¿çšããåç
§ããŠãã ããã
ããªã¬ãŒã®åºæ¬
å®è¡ã³ã³ããã¹ãã«ã€ããŠè©³ããåŠç¿ããåã«ãå°ãç«ã¡æ¢ãŸã£ãŠããŒã¿ããŒã¹ããªã¬ãŒã«ã€ããŠèª¬æããŸããããSQL Server ã®ããªã¬ãŒãšåæ§ã«ãApex ããŒã¿ããŒã¹ããªã¬ãŒã¯ Salesforce ã®ã¬ã³ãŒãã«å¯Ÿããã€ãã³ãã®åãŸãã¯åŸã«ããã°ã©ãã³ã°ããžãã¯ãå®è¡ããŸããããªã¬ãŒãå®çŸ©ãããšãã«ã次ã®ã€ãã³ãã® 1 ã€ä»¥äžãæå®ã§ããŸãã
-
before insert(æ¿å ¥å) before updatebefore delete-
after insert(æ¿å ¥åŸ) after updateafter deleteafter undelete
ããªã¬ãŒã®åºæ¬æ§æã¯æ¬¡ã®ããã«ãªããŸãã
trigger TriggerName on ObjectName (trigger_events) {
// code_block
}ããªã¬ãŒã®çš®é¡
ããªã¬ãŒã«ã¯æ¬¡ã® 2 çš®é¡ããããŸãã
-
before ããªã¬ãŒã¯ãã¬ã³ãŒããããŒã¿ããŒã¹ã«ä¿åãããåã«ã¬ã³ãŒãã®å€ãæŽæ°ãŸãã¯æ€èšŒããå Žåã«äœ¿çšããŸãã
-
after ããªã¬ãŒã¯ãã·ã¹ãã ã«ãã£ãŠèšå®ãããé
ç®å€ (ã¬ã³ãŒãã®
Idé ç®ãLastModifiedDateé ç®ãªã©) ã«ã¢ã¯ã»ã¹ããå Žåããä»ã®ã¬ã³ãŒãã®å€æŽã«åœ±é¿ãäžããå Žåã«äœ¿çšããŸããafter ããªã¬ãŒãå®è¡ããã¬ã³ãŒãã¯åç §ã®ã¿ã§ãã
.NET éçºè ãã³ãŒãã§åé¡ã解決ããã®ã奜ããªããšã¯ããã£ãŠããŸãããããã§ã¯çç£æ§ãé£èºçã«é«ãããã³ãã玹ä»ããŸããããªã¬ãŒã¯ãåãåŠçã Salesforce ãæäŸãããã€ã³ã & ã¯ãªãã¯èªååããŒã«ã®ãããã§ãå®è¡ã§ããªãããšã絶察確å®ã§ããå Žåã«ã®ã¿ãæåŸã®ææ®µãšããŠäœ¿çšããŸãã
å¹ççã«äœæ¥ãé²ããããã«ãSalesforce ãã©ãããã©ãŒã ã«ã¯ãã³ãŒããèšè¿°ããã«ããžãã¹ããžãã¯ã管çããããã®åŒ·åãªèªååããŒã« Flow Builder ãçšæãããŠããŸããã»ãšãã©ã®å Žåããã€ãŠã¯ããªã¬ãŒã§ããå®è¡ã§ããªãã£ãã¿ã¹ã¯ã«ãããé©ããèªååããŒã«ããããŸãã
å®è¡ã³ã³ããã¹ãã®ããŒã¯
å®è¡ã³ã³ããã¹ãã®çè§£ãæ·±ããããã«ãæ°èŠååŒå ãå ¥åããããåè«ãäœæãã Apex ããŒã¿ããŒã¹ããªã¬ãŒãæé ã«åŸã£ãŠäœæããŠã¿ãŸãããããã®ããªã¬ãŒã¯ãã³ãã©ãŒã¯ã©ã¹ããã¡ãœãããã³ãŒã«ããããããŸããã³ãã©ãŒã¯ã©ã¹ãäœæããŸãã
- [Setup (èšå®)] (
) ãã [Developer Console (éçºè
ã³ã³ãœãŒã«)] ãéžæããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ã[File (ãã¡ã€ã«)] > [New (æ°èŠ)] > [Apex Class (Apex ã¯ã©ã¹)] ãéžæããŸãã
- ã¯ã©ã¹åãšããŠã
AccountHandlerããšå ¥åãã[OK] ãã¯ãªãã¯ããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸãã
public with sharing class AccountHandler { public static void CreateNewOpportunity(List<Account> accts) { for(Account acct : accts) { Opportunity opp = new Opportunity(); opp.Name = acct.Name + ' Opportunity'; opp.AccountId = acct.Id; opp.StageName = 'Prospecting'; opp.CloseDate = System.Today().addMonths(1); insert opp; } } }
-
Ctrl + S ããŒãæŒããŠã¯ã©ã¹ãä¿åããŸãã
ãã³ãã©ãŒã¯ã©ã¹ãã§ããã®ã§ãååŒå ããªã¬ãŒãäœæããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ã[File (ãã¡ã€ã«)] > [New (æ°èŠ)] > [Apex Trigger (Apex ããªã¬ãŒ)] ãéžæããŸãã
- ååã«
AccountTriggerãšå ¥åããsObject ãšã㊠[Account (ååŒå )] ãéžæããŸãã
-
[Submit (éä¿¡)] ãã¯ãªãã¯ããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸãã
trigger AccountTrigger on Account(before insert, before update, before delete, after insert, after update, after delete, after undelete) { if(Trigger.isAfter && Trigger.isInsert) { AccountHandler.CreateNewOpportunity(Trigger.New); } }
-
Ctrl + S ããŒãæŒããŠããªã¬ãŒãä¿åããŸãã
æé ã®æåŸã«ãSalesforce ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠæ°èŠååŒå ãå ¥åãããŠãŒã¶ãŒãã·ãã¥ã¬ãŒãããå¿åã³ãŒããå®è¡ããŸããApex ã³ãŒããå®è¡ããã«ã¯ããŸããŸãªæ¹æ³ããããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ã[Debug (ãããã°)] > [Open Execute Anonymous Window (å®è¡å¿åãŠã£ã³ããŠãéã)] ãéžæããŸãã
- æ¢åã®ã³ãŒããåé€ããæ¬¡ã®ã¹ãããããæ¿å
¥ããŸãã
Account acct = new Account( Name='Test Account 2', Phone='(415)555-8989', NumberOfEmployees=50, BillingCity='San Francisco'); insert acct;
-
[Open Log (ãã°ãéã)] ãªãã·ã§ã³ãéžæãããŠããããšã確èªãã[Execute (å®è¡)] ãã¯ãªãã¯ããŸãã
æ°ããã¿ãã«å®è¡ãã°ã衚瀺ãããŸããå®è¡ãã°ãå ¥å¿µã«èª¿æ»ã§ããããã«éãããŸãŸã«ããŸãã
å®è¡ãã°ã®èª¿æ»
å®è¡ãã°ã®æåã®è¡ã«ã¯ EXECUTION_STARTED ã€ãã³ããæåŸã®è¡ã«ã¯ EXECUTION_FINISHED ã€ãã³ããããŒã¯ãããŠããŸãããã®éã«ãããã¹ãŠãå®è¡ã³ã³ããã¹ãã§ãã
ã§ã¯ãäœãèµ·ãã£ããã詳ããèŠãŠãããŸããããæåã® CODE_UNIT_STARTED ã€ãã³ãã¯ã[Execute Anonymous (å®è¡å¿å)] ãŠã£ã³ããŠããã³ãŒããèµ·åããããšãã«ããŒã¯ãããŸããäžå³ã§ã¯ããã®è¡ã¯èµ€ã§åŒ·èª¿è¡šç€ºãããŠããŸãã

匷調衚瀺ããã 2 ã€ç®ã® CODE_UNIT_STARTED è¡ã¯ãBeforeInsert ã€ãã³ãã®ã³ãŒããå®è¡ããããšãã衚ããŸãã
ãã®å³ã«ã¯è¡šç€ºãããŠããŸããããéçºè ã³ã³ãœãŒã«ã®ç¬èªã®ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠããå Žåã¯ãçµæãããã«ã¹ã¯ããŒã«ããŠã³ã㊠CODE_UNIT_STARTED ã®ã»ãã®ã€ã³ã¹ã¿ã³ã¹ãæ¢ããŠãã ãããå°ãªããšããã 1 ã€ãAfterInsert ã€ãã³ãã®ã³ãŒããå®è¡ããããšãã衚ãã€ã³ã¹ã¿ã³ã¹ã衚瀺ãããã¯ãã§ããæ°èŠååŒå ãäœæããããèµ·åããã¯ãŒã¯ãããŒã«ãŒã«ãäœæããå Žåã¯ãããããå®è¡ãã°ã«è¡šç€ºãããŸãããã®ã³ãŒãã¯ãã¹ãŠåãå®è¡ã³ã³ããã¹ãäžã§åäœãããããåãã¬ããå¶éã»ãããé©çšãããŸãã
ãªãã¬ããå¶éãçè§£ããã®ãããã»ã©éèŠãªã®ã§ãããã? Salesforce ã¯ãã«ãããã³ãç°å¢ã§ããããã1 ã€ã® Salesforce çµç¹ã®åã€ã³ã¹ã¿ã³ã¹ããªãœãŒã¹ãæ¶è²»ããããªãããã«ããããã¬ããå¶éãäžå¯æ¬ ã§ããåºæ¬çã«ãã¬ããå¶éã¯ã·ã¹ãã å šäœãã¯ã©ãã·ã¥ããªãããã«ãããã®ã§ãã
å¶éãžã®å¯Ÿå¿
åã³ãå¶éãžã®å¯Ÿå¿ãšããããŒãã«æ»ã£ãŠããŸãããããããæãèæ ®ããããšã«ãªã 2 ã€ã®å¶éã«ã¯ãSOQL ã¯ãšãªãŸã㯠DML ã¹ããŒãã¡ã³ãã®æ°ãé¢ä¿ããŸãããã®ãã©ãããã©ãŒã ã«äžæ £ããªéçºè ã¯ãããã®å¶éã«è¶³ããããããã¡ãªã®ã§ãå°ãäœåã«æéããšã£ãŠåé¿æ¹æ³ã«åãçµãã§ãã ããã
äžæ¬åŠç
å€ãã®éçºè ããã³ãŒãã 1 ä»¶ã®ã¬ã³ãŒããåŠçããããã«èšèšãããšããå ±éã®çœ ã«èœã¡ãŠããŸããLightning ãã©ãããã©ãŒã ã§ã¯ããã¯å€§ããªééãã§ããããšã«ããæ°ä»ãã§ãããã
Apex ããªã¬ãŒãäžåºŠã«åä¿¡ã§ããã¬ã³ãŒãã¯æå€§ 200 åã§ããçŸåšãSOQL ã¯ãšãªã®åèšæ°ã®åæå¶é㯠100ãçºè¡ããã DML ã¹ããŒãã¡ã³ãã®åèšæ°ã®åæå¶é㯠150 ã§ãããã®ãããã«ãŒãå ã§ SOQL ã¯ãšãªãŸã㯠DML ã¹ããŒãã¡ã³ããå®è¡ããããªã¬ãŒãããããã®ããªã¬ãŒãäžæ¬åŠçã§èµ·åããããã©ããªãã§ãããã?
ãã£ãšã
å¶éãšã©ãŒã«ãªããŸããã³ãŒãããªãªãŒã¹ããŠãã°ããã®éãã€ãŸãå¶éã«éãããŸã§ã¯æ£åžžã«å®è¡ã§ããå¯èœæ§ããããŸããã²ãšãã³å¶éã«éããããéçºè ã¯ããã«ã³ãŒãã調ã¹ãŠãäžæ¬åŠç察å¿ãæ¹æ³ãè§£æããªããã°ãªããŸããããã®èšèšãçŽãã«æåã®èšèšãããæéããããããšããããããŸãããã®ç¶æ³ãé¿ããããã«ãæåãã Apex ã³ãŒããäžæ¬åŠçã«å¯Ÿå¿ã§ããããã«èšèšããŸãããã®æ¹æ³ã¯ããApex ããªã¬ãŒãã¢ãžã¥ãŒã«ã§åŠç¿ã§ããŸãã
ãæ°ã¥ããããããŸããããåã«äœæããããªã¬ãŒãã³ãã©ãŒã³ãŒãã§ã¯äžæ¬ãã¿ãŒã³ã䜿çšããŠããªãã£ããããå¶éãšã©ãŒã«ãªãå¯èœæ§ããããŸããããäžåºŠãå ã®ã³ãŒãã確èªããŠã¿ãŸãããã
public with sharing class AccountHandler {
public static void CreateNewOpportunity(List<Account> accts) {
for(Account acct : accts) {
Opportunity opp = new Opportunity();
opp.Name = acct.Name + ' Opportunity';
opp.AccountId = acct.Id;
opp.StageName = 'Prospecting';
opp.CloseDate = System.Today().addMonths(1);
insert opp;
}
}
}insert DML æäœ (insert opp) ã for ã«ãŒãå
ã«ãããŸããããã¯ãéåžžã«ãããªãæ¹æ³ã§ãã®ã§ãåžžã«é¿ããŠãã ããã
幞ãã1 ã¹ãããã§ã«ãŒãå ã®ãªã¹ã倿°ã«æžãåºãããªã¹ãã®å å®¹ãæ¿å ¥ããããã«ã³ãŒãã倿ŽããŠä¿®æ£ã§ããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ [File (ãã¡ã€ã«)] > [Open (éã)] ãéžæããŸãã
- ãšã³ãã£ãã£çš®å¥ãšããŠã[Classes (ã¯ã©ã¹)] ãéžæããŸãããšã³ãã£ãã£ãšã㊠[AccountHandler] ãéžæããŸãã
-
[Open (éã)] ãã¯ãªãã¯ããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸãã
public with sharing class AccountHandler { public static void CreateNewOpportunity(List<Account> accts) { List<Opportunity> opps = new List<Opportunity>(); for(Account acct : accts) { Opportunity opp = new Opportunity(); opp.Name = acct.Name + ' Opportunity'; opp.AccountId = acct.Id; opp.StageName = 'Prospecting'; opp.CloseDate = System.Today().addMonths(1); opps.add(opp); } if(opps.size() > 0) { insert opps; } } }
-
Ctrl + S ããŒãæŒããŠã¯ã©ã¹ãä¿åããŸãã
ããªã¬ãŒãã³ãã©ãŒã³ãŒããä¿®æ£ã§ããã®ã§ããã¹ãããŠããªã¬ãŒã 200 ã¬ã³ãŒããšããè² è·ãåŠçã§ããããšã確èªããŸãããããåãã®ããã«ããã¹ããã©ã¯ãã£ã¹ãšããŠãã³ãŒããæ©èœããããšã確èªã§ããããã«åäœãã¹ããèšè¿°ããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ã[File (ãã¡ã€ã«)] > [New (æ°èŠ)] > [Apex Class (Apex ã¯ã©ã¹)] ãéžæããŸãã
- ã¯ã©ã¹åãšããŠ
AccountTrigger_Testãšå ¥åãã[OK] ãã¯ãªãã¯ããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸãã
@isTest private class AccountTrigger_Test { @isTest static void TestCreateNewAccountInBulk() { // Test Setup data // Create 200 new Accounts List<Account> accts = new List<Account>(); for(Integer i=0; i < 200; i++) { Account acct = new Account(Name='Test Account ' + i); accts.add(acct); } // Perform Test Test.startTest(); insert accts; Test.stopTest(); // Verify that 200 new Accounts were inserted List<Account> verifyAccts = [SELECT Id FROM Account]; Assert.areEqual(200, verifyAccts.size()); // Also verify that 200 new Opportunities were inserted List<Opportunity> verifyOpps = [SELECT Id FROM Opportunity]; Assert.areEqual(200, verifyOpps.size()); } }
-
Ctrl + S ããŒãæŒããŠã¯ã©ã¹ãä¿åããŸãã
-
[Test (ãã¹ã)] > [New Run (æ°èŠå®è¡)] ãéžæããŸãã
- TestClass ãšã㊠AccountTrigger_Testããã¹ãã¡ãœãããšã㊠TestCreateNewAccountInBulk ãéžæããŸãã
-
[å®è¡] ãã¯ãªãã¯ããŸãã
-
[Test (ãã¹ã)] ã¿ããéžæãããã¹ãããšã©ãŒãªãã§å®äºããããšã確èªããŸããããã¯ã[Status (ç¶æ³)] åã®ç·ã®ãã§ãã¯ããŒã¯ã§ç€ºãããŸãã
ããã²ãšããš...
Apex ã§ã¯ãã銎æã¿ã® try-catch-finally ãããã¯ã䜿çšããŠäŸå€ãåŠçããŸãããã ããApex ã³ãŒããå®è¡ãããå Žæã«å¿ããŠãcatch ã¹ããŒãã¡ã³ããšãããã rollback ãå€ããå¯èœæ§ããããŸããApex ã§ tryãcatchãrollback ãåŠçããéã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠã¯ãããªãœãŒã¹ãã®ãªã³ã¯ãåç §ããŠãã ããã
Lightning ãã©ãããã©ãŒã ã«ã¯ã¢ããªã±ãŒã·ã§ã³å€æ°ãã»ãã·ã§ã³å€æ°ã®ãããªãã®ã¯ãããŸãããã¯ã©ã¹éã§ããŒã¿ãä¿æããå¿ èŠãããå Žåã¯ãéç倿°ã䜿çšããŸãããã ããéç倿°ã®åäœã¯ Lightning ãã©ãããã©ãŒã ãš .NET ã§ã¯ç°ãªãããšã«çæããŠãã ãããLightning ãã©ãããã©ãŒã ç°å¢ã§ã¯ãéç倿°ãæ å ±ãä¿æã§ããã®ã¯ 1 ã€ã®å®è¡ã³ã³ããã¹ãå ã«éå®ãããŸãããã»ãã®ãªãã·ã§ã³ã䜿çšããŠããªã¬ãŒåŒã³åºãéã§ããŒã¿ãä¿æããããšã¯ã§ããŸãã詳现ã¯ãããªãœãŒã¹ãã®é«åºŠãª Apex ã«é¢ãããªã³ã¯ãåç §ããŠãã ããã
å¶éã«å¯Ÿå¿ããå Žåãç¹ã«ç®¡çããã±ãŒãžã®éçºè ã¯ãå€ãã®ãã¬ãŒããªããèæ ®ããå¿ èŠããããŸããSalesforce ããŒãããŒã¯éåžžã管çããã±ãŒãžã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãé åžããã³è²©å£²ããŸãããã®ã¢ãžã¥ãŒã«ã§ã¯ãç¥ã£ãŠããã¹ãæ å ±ã®æŠèŠããã£ãšç¢ºèªããã ãã§ããApex éçºã«æ¬æ Œçã«åãçµãå Žåã¯ãããªãœãŒã¹ãã®é«åºŠãª Apex ã«é¢ãããªã³ã¯ãåç §ããŠãã ããã
