.NET ã®æŠå¿µã® Lightning ãã©ãããã©ãŒã ãžã®å¯Ÿå¿ä»ã
åŠç¿ã®ç®ç
ãã®åå ãå®äºãããšã次ã®ããšãã§ããããã«ãªããŸãã
- Lightning ãã©ãããã©ãŒã ãæ§æããäž»èŠãªæ©èœãš Apex ããã°ã©ãã³ã°èšèªãç解ãã
- .NET ãš Lightning ãã©ãããã©ãŒã ã®é¡äŒŒç¹ãšçžéç¹ãèå¥ãã
- éçºè
ã³ã³ãœãŒã«ã䜿çšããŠæåã® Apex ã¯ã©ã¹ãäœæãã
- å¿å Apex ã䜿çšã㊠Apex ã¯ã©ã¹ããã¡ãœãããåŒã³åºã
äžç·ã«ãã¬ã€ã«ãé²ã¿ãŸããã
ãšãã¹ããŒãã®èª¬æãèŠãªãããã®ã¹ããããå®è¡ãããå Žåã¯ã次ã®åç»ãã芧ãã ãããããã¯ãTrail Togetherã(äžç·ã«ãã¬ã€ã«) ã·ãªãŒãºã®äžéšã§ãã
Lightning ãã©ãããã©ãŒã ã®æŠèŠ
Lightning ãã©ãããã©ãŒã ãç解ããã»ã©ããã®è¯ãããããããã«ãªããŸãããã®ã¢ãžã¥ãŒã«ã§ã¯ããã§ã«ããç¥ã£ãŠãã .NET ã®æŠå¿µã Lightning ãã©ãããã©ãŒã ãšã©ãé¢é£ä»ããããåŠç¿ããŸãã
ãã©ãããã©ãŒã ã®åºæ¬
ãŸããLightning ãã©ãããã©ãŒã ãå ·äœçã«äœã§æ§æãããããç°¡åã«ç¢ºèªããŸããããForce.com ãã©ãããã©ãŒã ãšä»ã® SaaS (Software-as-a-Service) 補åãšã®éãã® 1 ã€ã¯ãã¡ã¿ããŒã¿é§ååã¢ãŒããã¯ãã£ã«äŸåããŠããç¹ã§ããã³ãŒããèšå®ãã¢ããªã±ãŒã·ã§ã³ãªã©ããã¹ãŠãã¡ã¿ããŒã¿ãšããŠæå®ãããŸãã
.NET éçºè ã®çããã¯ããããããã§ã« Microsoft Azure ã§å®è¡ãããŠããã¯ã©ãŠãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠè©³ãããåãã§ããããLightning ãã©ãããã©ãŒã ã®åäœã¯ç°ãªããŸããLightning ãã©ãããã©ãŒã ã¯ããŒã¿ããŒã¹ãšç·å¯ã«çµ±åãããŠããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãã»ãã¥ãªãã£ãã¬ããŒããªã©ããŸããŸãªæ©èœããã©ãããã©ãŒã ã«çŽæ¥çµã¿èŸŒãŸããŠããŸãããã®çµ±åã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ãããçæéã§äœæã§ããŸãã
ãã ããéçºè ã®çç£æ§ãé«ããããã®ã³ã³ãããŒã«ãã§ããªãéšåããããæåã¯å°ãéåæããããããããŸãããLightning ãã©ãããã©ãŒã ã§ã¯ãããŒãã管çã¿ã¹ã¯ã®èšå®ã«ã€ããŠå¿é ããå¿ èŠããããŸãããããããã¢ããã°ã¬ãŒãã調æŽãæ¡åŒµã«ã€ããŠãå¿é ã¯äžèŠã§ããå®éã«ã¯ãåªããã¢ããªã±ãŒã·ã§ã³ããã°ããäœæããããšã ãã«å°å¿µã§ããã®ã§ãããããè€éããäœæ¥ãããã»ã©æãããã¯æããªãã§ãããã
ãã®ãã©ãããã©ãŒã ãæäŸããæ©èœã®æŠèŠããã£ãšç¢ºèªããŸãããã¢ãŒããã¯ãã£ã«ã€ããŠããã«ç¥èãæ·±ããå Žåã¯ãããã©ãããã©ãŒã ã®åºæ¬ãã¢ãžã¥ãŒã«ãåç §ããŠãã ããã
Apex ã®åºæ¬
Lightning ãã©ãããã©ãŒã ã¯ã¡ã¿ããŒã¿ã¢ãŒããã¯ãã£ã«ç·å¯ã«çµ±åãããäŸåããŠããããã宣èšåéçºãã€ãŸãããã€ã³ã & ã¯ãªãã¯ãã¢ããªã±ãŒã·ã§ã³éçºã䜿çšããŠå®ã«å€ãã®æ©èœãå®çŸã§ããŸããLightning ãã©ãããã©ãŒã ãåããŠäœ¿çšããå Žåã¯ãããªãœãŒã¹ãã«ãããã€ã³ã & ã¯ãªãã¯éçºã«é¢ããèšäºãåç §ããããšã匷ããå§ãããŸãã
ã³ãŒãã£ã³ã°ã奜ã㪠.NET éçºè ã®çããã¯ãLightning ãã©ãããã©ãŒã ã§ã¯ã³ãŒããå¿ èŠãšã¯éããªããšèªèããŠããå¿ èŠããããŸããéèŠãªã®ã¯ãã³ãŒããå¿ èŠãªç¶æ³ãšããã§ãªãç¶æ³ãç解ããããšã§ãããã€ã³ã & ã¯ãªãã¯ã§éçºãããšããšãã³ãŒãã£ã³ã°ãå¿ èŠãªãšãã®éãã«ã€ããŠã®è©³çŽ°ã¯ããã¡ãã®èšäºãåç §ããŠãã ããã
ãã€ã³ã & ã¯ãªãã¯ã®è©±ã¯ãããããã«ããŠããã®ãã©ãããã©ãŒã ã§ã®ããã°ã©ãã³ã°æ¹æ³ãã€ãŸã Apex ã䜿çšããæ¹æ³ã«ã€ããŠåŠç¿ããŠãããŸãããã
é¡äŒŒç¹
Apex ããã°ã©ãã³ã°èšèªã¯ãçããã«ã¯ããããã銎æã¿ã® C# ã«äŒŒãŠããŸããApex ã¯ãLightning ãã©ãããã©ãŒã äžã§çŽæ¥ã«ä¿åãã³ã³ãã€ã«ãããã³å®è¡ãããŸããC# ãšåæ§ããªããžã§ã¯ãæåã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ããã®ãã㪠.NET èšèªãšã®é¡äŒŒç¹ã«ã€ããŠèª¬æããŸãã
ãªããžã§ã¯ãæåèšèš
çããã¯ãã§ã«ãªããžã§ã¯ãæåèšèšã®æŠå¿µãææ¡ããŠãããšæãããŸãã®ã§ãåã話ãç¹°ãè¿ããŠæéãç¡é§ã«ããã®ã¯ãããŸããããApex ã§ã¯ãã«ãã»ã«åãæœè±¡åãç¶æ¿ããå€æ æ§ãŸã§ããªããžã§ã¯ãæåã®ååã®å€ãããµããŒããããŠããããšã ããèŠããŠãããŠãã ãããå®éã«ãApex èšèªã«ã¯ãã¯ã©ã¹ãã€ã³ã¿ãŒãã§ãŒã¹ãããããã£ãã³ã¬ã¯ã·ã§ã³ãªã©ããã§ã«äœ¿ãæ £ããŠããå€ãã®èšèªæ§é ãå«ãŸããŠããŸãã
ããšãã°ã次ã®ãã㪠HelloWorld ãšãã Apex ã¯ã©ã¹ããããŸãã
public with sharing class HelloWorld { public void printMessage() { String msg = 'Hello World'; System.debug(msg); } }
ãã®åçŽãª HelloWorld ã¯ã©ã¹ã«ã¯ãã·ã¹ãã ãããã°ãã°ã«ã¡ãã»ãŒãžãHello Worldããåºåããããã ãã«äœ¿çšããã printMessage ãšããã¡ãœããã 1 ã€å«ãŸããŠããŸããããªãåçŽãªäŸã§ãã®ã§ãApex ã C# ãšãã䌌ãŠããããšã確èªããããã§ãããã
ã¯ã©ã¹ãå®çŸ©ããããã®åºæ¬æ§æã¯ã次ã®ããã«ãªããŸãã
private | public | global [virtual | abstract][with sharing | without sharing | inherited sharing] class ClassName [implements InterfaceNameList] [extends ClassName] { // The body of the class }
æéãããã°ããã¯ã©ã¹ãç解ããããåç §ããŠã¯ã©ã¹ããªããžã§ã¯ããããã³ã€ã³ã¿ãŒãã§ãŒã¹ã®ããã¿ã«ã€ããŠè©³çŽ°ãåŠç¿ããŠãã ããã
ããŒã¿å
Apex ã§ã¯ãéåžžæ±ããããããŒã¿åã¯ãµããŒããããŠããŸããIntegerãDoubleãLongãDateãDatetimeãStringãBoolean ãªã©ã®ããªããã£ãåããããŸããã·ã¹ãã ã§å²ãåœãŠãããæå¹ãª 18 æ¡ã® Lightning ãã©ãããã©ãŒã ã¬ã³ãŒãèå¥åã«äœ¿çšããã ID ããŒã¿åããããŸãã
å€ãšåç §ã®ããŒã¿åã¯åæ§ã«æ©èœããŸãããApex ã§ã¯ãã¹ãŠã®å€æ°ãããã©ã«ã㧠null ã«åæåãããŸãã泚æç¹ã® 1 ã€ã¯ã.NET æååã¯äžå€ã§ãããããå€ã®åã®ããã«åäœããŠãå®éã«ã¯åç §ã«ãªãããšã§ããäžæ¹ãApex ã§ã¯æååã¯åžžã«ããªããã£ããªå€ã®åãšããŠæ±ãããŸãã
ããªããã£ã以å€ã«ãµããŒããããããŒã¿åãšã㊠sObject ããããæ±çš sObject ããååŒå ãååŒå 責任è ãªã©ç¹å®ã® sObject ã«ãªããŸããsObject ã¯åãªã Salesforce ãªããžã§ã¯ãã§ããããã¯ããŒã¿ããŒã¹ã®ããŒãã«ã®ãããªãã®ãšèããããšãã§ããŸããsObject ã«ã¯ãSalesforce ã«çµã¿èŸŒãŸããŠããæšæº sObject ãšèªåã§å®çŸ©ããã«ã¹ã¿ã sObject ããããŸãã
ããã«ãããŒã¿åã Enum (åæ) ãšãåŒã°ããåä»ããããå€ã®ãªã¹ãã«ã§ããŸãããã ããããã㯠.NET ã§äœ¿ãæ £ããŠãã Enum ãšã¯ç°ãªããŸãã®ã§æ³šæããŠãã ãããApex ã§ã¯ãæ°å€ãå«ã Enum ã䜿çšã§ããŸããããããã®æ°å€ã®å 容ãå®çŸ©ããããšã¯ã§ããŸããããŸããåºæ°ã®å²ãåœãŠã¯ 0 ããéå§ããŸããããšãã°ã次ã®ãã㪠Enum ããããšããŸãã
public enum myEnums { Enum1, Enum2, Enum3 }
3 ã€ç®ã® Enum ã®åºæ°å€ã«ã¢ã¯ã»ã¹ããããšããå ŽåãenumOrd å€æ°ã®å€ã¯ 2 ã«ãªããŸãã
Integer enumOrd = myEnums.Enum3.ordinal();
ã³ã¬ã¯ã·ã§ã³ã®äœ¿çš
.NET ã§ã¯ãå€ãã®åãšæ¡åŒµã¡ãœãããå«ã倧èŠæš¡ãª 1 ã€ã®ã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªããµããŒããããŠããŸãããã®ç¹ã§ããç¥ããããããŸããApex ã«ã¯æ¬¡ã® 3 ã€ã®ã³ã¬ã¯ã·ã§ã³ãããããŸãããã·ã³ãã«ã§ããã?
ãªã¹ã
ãªã¹ãã¯ãåŸæ¥ã®é åãšåæ§ã«åäœããèŠçŽ ã®é åºä»ããããã³ã¬ã¯ã·ã§ã³ã§ãããã ããApex ã¯é åãã³ã¬ã¯ã·ã§ã³ãšããŠã§ã¯ãªãããªã¹ããšããŠãµããŒãããŸããããã§ããé åè¡šèšããšåŒã°ããæ©èœã«ãããè§æ¬åŒ§ [ ] ã䜿ã£ãŠãªã¹ãå ã®ç¹å®ã®é ç®ãåç §ã§ããŸããããšãã°ã次ã®æ¹æ³ã§å€æ°ãæååã®ãªã¹ããšããŠå®£èšã§ããŸãã
List<String> myStrings = new List<String>();
ãŸãã¯ã次ã®ããã«ãè§æ¬åŒ§ã䜿ã£ãŠ myStrings ãªã¹ãå€æ°ã宣èšã§ããŸãã
String[] myStrings = new List<String>();
ä»ã«ãã次ã®ãã㪠1 ã¹ãããã§ãªã¹ãã宣èšããŠãã®å€ãåæåã§ããŸãã
List<String> myStrings = new List<String> {'String1', 'String2', 'String3' };
ãŸãã次ã®ããã«ãªã¹ããäœæããåŸã«å€ãè¿œå ããããšãã§ããŸãã
List<String> myStrings = new List<String>(); myStrings.add('String1'); myStrings.add('String2'); myStrings.add('String3');
ãã¹ãŠã® SOQL ã¯ãšãªã®åºåã¯ãªã¹ãã§ãããããApex éçºã§ã¯å€ãã®ãªã¹ãå€æ°ãäœæããããšã«ãªãã§ããããããšãã°ã次ã®ãããªã³ãŒãã䜿çšããŠååŒå ã®ãªã¹ããäœæã§ããŸãã
List<Account> myAccounts = [SELECT Id, Name FROM Account];
ãªã¹ãã®ã€ã³ããã¯ã¹ã¯ãåžžã« 0 ããå§ãŸããŸãããã®ããããªã¹ãã®æåã®ååŒå ã®ååã«ã¢ã¯ã»ã¹ããå Žåã¯ã次ã®ããã«ãªããŸãã
String firstAccount = myAccounts.get(0).Name;
ãŸãã次ã®æ¹æ³ã§ãåæ§ã«ã¢ã¯ã»ã¹ã§ããŸãã
String firstAccount = myAccounts[0].Name; // Uses Array Notation []
ã»ãã
ã»ããã¯ãéè€ãå«ãŸãªãèŠçŽ ã®é åºä»ããããŠããªãã³ã¬ã¯ã·ã§ã³ã§ããã»ããã¯éåžžãID å€ã®ä¿åã«äœ¿çšãããŸããID ã®å€ã¯åžžã«äžæã§ããããã§ãããã®ãããã»ããã SOQL ã¯ãšãªã® WHERE å¥ã®äžéšãšããŠäœ¿çšã§ããŸããããšãã°ãååŒå ã®äžæã® ID ã 2 ã€å«ãŸããã»ããã次ã®ããã«äœæã§ããŸãã次ã«ãã®ã»ããã SOQL ã¯ãšãªã§äœ¿çšããŠããããã® ID ã«å¯ŸããååŒå ã®ã¿ãè¿ããŸãã
Set<ID> accountIds = new Set<ID>{'001d000000BOaHSAA1','001d000000BOaHTAA1'}; List<Account> accounts = [SELECT Name FROM Account WHERE Id IN :accountIds];
察å¿ä»ã
察å¿ä»ãã¯ãã㌠- å€ã®ãã¢ã®ã³ã¬ã¯ã·ã§ã³ã§ããåããŒã¯ 1 ã€ã®å€ã«å¯Ÿå¿ä»ããããŸãã察å¿ä»ãã¯ãããŒã§ãã°ããæ€çŽ¢ããå¿ èŠãããå Žåã«äŸ¿å©ã§ããããŒå€ã¯äžæã§ããå¿ èŠããããŸããããã«ããã察å¿ä»ãã«å«ãŸããããŒã® ID å€ã sObject ã«å¯Ÿå¿ä»ããããšãã§ããŸããããšãã°ã次ã®ã³ãŒãã䜿çšããŠãã® ID ã«å¯Ÿå¿ä»ãããããã¹ãŠã®ååŒå ãå«ãŸãããaccountMap ãšãã察å¿ä»ãå€æ°ã宣èšã§ããŸãã
Map<Id, Account> accountMap = new Map<Id, Account>([SELECT Id, Name FROM Account]);
次ã«ãget ã¡ãœãããšæ¬¡ã®ãããªã³ãŒãã䜿çšããŠç¹å®ã®ååŒå ã¬ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸãã
Id accId = '001d000000BOaHSAA1'; Account acc = accountMap.get(accId);
Apex ããµããŒãããããŒã¿åã«ã€ããŠã®è©³çŽ°ã¯ãå ¬åŒãªããã¥ã¡ã³ããåç §ããŠãã ããã
ASP.NET ãš Visualforce
ASP.NET Web ãã©ãŒã éçºè ã§ããã°ãããã« Visualforce ã«ç¿çã§ããããšã§ããããããã 2 ã€ã®éã«ã¯å€ãã®é¡äŒŒç¹ããããŸããç¹ã«ãã©ã¡ããã³ãŒããšããŒã¯ã¢ãããæ確ã«åé¢ãããŠããŸãããŸãããã©ãŒã é ç®ã¯ãã³ãŒããã³ã³ãããŒã©ãŒã«å®çŸ©ãããŠããããããã£ã«å¯Ÿå¿ä»ããããã«ã䜿çšããŸãã
åä»ãªç¹ãšããŠã¯ãHTTP ãã¹ããŒãã¬ã¹ã§ããããããã¥ãŒã¹ããŒã㯠Visualforce ã§ã ASP.NET ãšåæ§ã«æ±ãã¥ããããšã§ãã幞ãããã¥ãŒã¹ããŒãã®å¶éãåé¿ããæ¹æ³ããããŸãã詳现ã¯ãããªãœãŒã¹ãã®ãªã³ã¯ãåç §ããŠãã ããã
Visualforce ã¯ãMVC ãã©ãã€ã ã䜿çšã㊠HTML ããŒãžã衚瀺ããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãããVisualforce ã¯ã倧奜ã㪠ASP.NET MVC ãšäŒŒãŠããããšå€§åã³ããã®ã¯ãŸã åŸ ã£ãŠãã ããããã® 2 ã€ãæ¯èŒããããšã¯ããããšããŒã¡ããæ¯èŒãããããªãã®ã§ããã©ã¡ãã䜿çšããŠã Web ããŒãžã衚瀺ã§ããã©ã¡ããã¢ããªã±ãŒã·ã§ã³ããžãã¯ãããŒã¯ã¢ãããšããŒã¿ããŒã¹ã¢ãã«ããåé¢ã§ããŸããããã®æ¹æ³ãç°ãªããŸãã
Visualforce ã«ã€ããŠã®è©³çŽ°ã¯ããVisualforce ã®åºæ¬ãã¢ãžã¥ãŒã«ãåç §ããŠãã ãããããã§ã¯ãäŸãæããªãã Visualforce ã®ããã¿ã«ã€ããŠåºæ¬çãªèãæ¹ã®ã¿ã説æããŸãã次ã®ããŒã¯ã¢ããã³ãŒãã䜿çšããŠãååŒå 責任è ããŒã¿ã®å ¥åã«äœ¿çšããåçŽãªããŒãžã衚瀺ã§ããŸãã
<apex:page standardController="Contact"> <apex:form> <apex:pageBlock title="Edit Contact" mode="Edit"> <apex:pageBlockButtons > <apex:commandButton action="{!edit}" id="editButton" value="Edit"/> <apex:commandButton action="{!save}" id="saveButton" value="Save"/> <apex:commandButton action="{!cancel}" id="cancelButton" value="Cancel"/> </apex:pageBlockButtons> <apex:pageBlockSection > <apex:inputField value="{!contact.lastname}" /> <apex:inputField value="{!contact.accountId}"/> <apex:inputField value="{!contact.phone}"/> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
ãã®äŸã§ã¯ãLightning ãã©ãããã©ãŒã ã«å«ãŸããŠããæšæºã³ã³ãããŒã©ãŒãšåŒã°ããæ©èœã䜿çšããŠããŸããããã¯åºæ¬çã«ã¯ã·ã¹ãã ã§çæãããã³ãŒãã§ãããVisualforce ããŒãžã«åºæ¬ã® CRUD æ©èœããã°ããåã蟌ããããã«ããŸããããè€éãªã³ãŒããè¿œå ããå Žåã¯ãç¬èªã®ã«ã¹ã¿ã ã³ã³ãããŒã©ãŒãäœæã§ããã®ã§å®å¿ããŠãã ãããæšæºã³ã³ãããŒã©ãŒãšã«ã¹ã¿ã ã³ã³ãããŒã©ãŒã®ããã¿ã«ã€ããŠã®è©³çŽ°ã¯ããVisualforce ã®åºæ¬ãã¢ãžã¥ãŒã«ãåç §ããŠãã ããããã®ããŒãžã¯ã次ã®ããã«è¡šç€ºãããŸãã
çžéç¹
Apex ãš .NET ãšã®é¡äŒŒç¹ã«ã€ããŠå°ãç解ã§ããã®ã§ã次ã¯çžéç¹ã確èªããŸãããããŸããC# ãšã¯ç°ãªããApex ã¯å€§æåãšå°æåãåºå¥ããŸããã
Apex ãšããŒã¿ããŒã¹ã¯ç·å¯ã«çµåãããŠãã
Apex ã³ãŒããš Lightning ãã©ãããã©ãŒã ããŒã¿ããŒã¹ã¯ç·å¯ã«çµåãããŠãããããåºå¥ã§ããªãå ŽåããããŸããããŒã¿ããŒã¹å ã®æšæºãªããžã§ã¯ããšã«ã¹ã¿ã ãªããžã§ã¯ãã«ã¯ãããããããŒã¿ããŒã¹ãšã®ããåããç°¡åã«ããããã®ããããæ©èœãæäŸãããApex ã¯ã©ã¹ãä»ãããè¬ã®ãè¡šçŸããããŸããæ¬è³ªçã«ãã¯ã©ã¹ãšãã®åºç€ãšãªããªããžã§ã¯ãã¯åžžã«åæãããäºãã®ãã©ãŒã€ã¡ãŒãžã§ããããšãã°ããªããžã§ã¯ãã«æ°ããé ç®ãäœæãããšåžžã«ãã¯ã©ã¹ã¡ã³ããŒãèªåçã«è¡šããŠããŒã¿ããŒã¹ã®å€ãåç §ããŸããååšããªãé ç®ãžã®åç §ã Apex ã³ãŒãã«è¿œå ããããšãã§ããŸãããã³ã³ãã€ã©ãŒã§ãšã©ãŒãè¿ãããã³ãŒããä¿åãããŸããããã©ãããã©ãŒã ã¯ãããããé£åé¢ä¿ãç¶æããããŒã¿ããŒã¹ã¹ããŒããšã³ãŒãéã®åæãéåããªãããã«æ©èœããŸãããã®ãããApex ã³ãŒãã§åç §ãããã«ã¹ã¿ã ãªããžã§ã¯ããé ç®ãåé€ããããšãããšããã©ãããã©ãŒã ã§ãšã©ãŒãçºçãããã®ã¢ã¯ã·ã§ã³ã¯èš±å¯ãããŸããã
èšèšãã¿ãŒã³ãç°ãªã
.NET éçºè ã§ããã°ããããããã§ã«èšèšãã¿ãŒã³ã«ç¿çããŠããã§ãããããã ãããããããã¿ãŒã³ã®ã»ãšãã©ã¯ Lightning ãã©ãããã©ãŒã ã§ã¯æ©èœããŸãããããã«ã€ããŠã¯ã次ã®åå ã§å®è¡ã³ã³ããã¹ããšããªã¬ãŒã®èšèšãåãäžããéã«èª¬æããŸãããããªãœãŒã¹ãã«ãã Apex èšèšãã¿ãŒã³ã«é¢ãããªã³ã¯ã確èªããããšããå§ãããŸãã
éèŠãªã®ã¯ã.NET ã§äœ¿çšããã®ãšåãèšèšæŠç¥ã Lightning ãã©ãããã©ãŒã ã«é©çšããããšãããšããœãªã¥ãŒã·ã§ã³ããã¹ãããã³ãªãªãŒã¹ãããšãã«åé¡ãçºçããå¯èœæ§ããããšç解ããŠããããšã§ããã³ãŒãã£ã³ã°ãéå§ããåã«ãå°ãæéãåã£ãŠ Lightning ãã©ãããã©ãŒã ç°å¢ã§æé©ã«æ©èœããèšèšãã¿ãŒã³ã«ã€ããŠåŠç¿ããããšããå§ãããŸãã
åäœãã¹ãã¯å¿ é ã§ãã
.NET ã¢ããªã±ãŒã·ã§ã³ã®åäœãã¹ãèšè¿°ã«æ £ããŠããæ¹ãªããåäœãã¹ãã䜿çšããå©ç¹ã«ã€ããŠãç解ãããŠããã¯ãã§ããLightning ãã©ãããã©ãŒã ã§ã¯ãApex ã³ãŒããæ¬çªçµç¹ã«ãªãªãŒã¹ããã«ã¯ 75% ã®ãã¹ãã«ããŒçãå¿ èŠã§ããç¹ãç°ãªããŸãã
åäœãã¹ãã®å®æœã«ãããåã¡ãžã£ãŒãªãªãŒã¹ã®åã«ã¯ãã¹ãŠã®ãã¹ããå®è¡ããããããåäœãã¹ãã¯å ç¢ãã€ãšã©ãŒã®ãªãã³ãŒãã®éçºãä¿é²ããã ãã§ãªãããã©ãããã©ãŒã ã®å®å®æ§ã«ãšã£ãŠãäžå¯æ¬ ã§ããåäœãã¹ãã«ã€ããŠã®è©³çŽ°ã¯ããAn Introduction to Apex Code Test Methods (Apex ã³ãŒããã¹ãæ¹æ³ã®æŠèŠ)ããåç §ããŠãã ããã
ãœãªã¥ãŒã·ã§ã³ãã¡ã€ã«ããããžã§ã¯ããã¡ã€ã«ãèšå®ãã¡ã€ã«ããªã
Lightning ãã©ãããã©ãŒã ã«ã¯ããœãªã¥ãŒã·ã§ã³ãã¡ã€ã«ããããžã§ã¯ããã¡ã€ã«ã®ãããªãã®ããããŸãããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããããã㯠.NET ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã¢ã»ã³ããªã®äœæãšåãã§ã¯ãããŸããã
Lightning ãã©ãããã©ãŒã äžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¿ããã¬ããŒããããã·ã¥ããŒããããŒãžãªã©ã®ã³ã³ããŒãã³ãã®ç·©ãã³ã¬ã¯ã·ã§ã³ã«ãããŸãããSalesforce çµç¹ã«æšæºã§çµã¿èŸŒãŸããŠãããã®ããããŸããããã€ã³ã & ã¯ãªãã¯æäœã®ãŠã£ã¶ãŒãã«åŸã£ãŠç¬èªã®ã¢ããªã±ãŒã·ã§ã³ããŸãããéã«äœæããããšãã§ããŸãããµãŒãããŒãã£ãéçºããã¢ããªã±ãŒã·ã§ã³ã AppExchange ã§è³Œå ¥ããããšãã§ããŸãã
ã³ãŒãã¯ãã¹ãŠã¯ã©ãŠãã§ä¿åãããå®è¡ãããŸããLightning ãã©ãããã©ãŒã ç°å¢ã«ã¯èšå®ãã¡ã€ã«ã®ãããªãã®ããããŸãããããŒã¿ããŒã¹ã¯çŽæ¥çµã¿èŸŒãŸããŠãããããæ¥ç¶æååã¯å¿ èŠãããŸãããããã« ASP.NET MVC ãšã¯ç°ãªããã«ãŒããèšå®ããå¿ èŠããããŸãããSalesforce ã«ã«ã¹ã¿ã èšå®ãäœæã§ããŸããããããã¯å®£èšçã«è¿œå ããã³ç®¡çãããŸãã
ã¯ã©ã¹ã©ã€ãã©ãªãã¯ããã«å°ãã
Apex ã¯ã©ã¹ã©ã€ãã©ãªã¯ .NET Framework ã¯ã©ã¹ã©ã€ãã©ãªããã¯ããã«å°ããããã容æãã€è¿ éã« Apex ãé«éåããããšãã§ããŸããæ£çŽãªãšãããApex ã§æ¯èŒã§ããæ©èœãæ¢ãããšããŠååšããªãããšããããããã£ãããããããããŸããã
Lightning ãã©ãããã©ãŒã ã¯ãè¿ éãªã¢ããªã±ãŒã·ã§ã³éçºãæäŸãããšããèãã«åºã¥ããŠæ§ç¯ãããŠããããšã«çæããŠãã ããããã®ç¹ã .NET ãã©ãããã©ãŒã ãšã¯ç°ãªãããã䜿ãæ £ããæ©èœãæ¢ããŠããã®ã«çµå± Lightning ãã©ãããã©ãŒã ã«ååšããªããšããããšãããåŸãŸãããã ãã詳现ãã€å®ç§ã«ã«ã¹ã¿ã ã³ãŒãã£ã³ã°ãããã¢ããªã±ãŒã·ã§ã³ãéçºããæ¹æ³ãæ€èšããŠããå Žåã¯ãHeroku Enterprise ãã©ãããã©ãŒã ã«ãã£ãŠå¿ èŠãªæ§èœãšæ©èœãåŸãããŸãã
éçºããŒã«
çããã®å€ãã¯ãã§ã«ç¡æã® Developer Edition (DE) çµç¹ã«ãµã€ã³ã¢ãããããŠããŠããããããªã³ã©ã€ã³ã®éçºè ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãéããŠäœ¿çšããããšããããšæããŸãã
éçºè ã³ã³ãœãŒã«ã¯ããœãŒã¹ã³ãŒãã®ç·šéãæäœã«äœ¿çšã§ããŸãããŸãããããã°ããã©ãã«ã·ã¥ãŒãã£ã³ã°ã«ã圹ç«ã¡ãŸããããã«ã€ããŠã¯åŸã®åå ã§èª¬æããŸãã®ã§ããã®ãŸãŸç¶ããŸããããããŒã¿ããŒã¹ã®åºæ¬ã«é¢ããæåã®ã¢ãžã¥ãŒã«ãä¿®äºããŠããå Žåã¯ãéçºè ã³ã³ãœãŒã«ã SOQL ããã³ SOSL ã¯ãšãªã®å®è¡ãšã¯ãšãªãã©ã³ã®è¡šç€ºã«ã䜿çšã§ããããšããåãã§ãããããããŸã§éçºè ã³ã³ãœãŒã«ã䜿çšããããšããªããŠããApex ã¯ã©ã¹ãäœæãããšãã«ç°¡åã«èª¬æããŸãã®ã§å¿é ã¯ãããŸããã
.NET éçºè ã®æ¹ã¯ããããããã Visual Studio ã³ãŒãã®ããšã¯çç¥ãããŠãããšæããŸããå®ã¯ããŒã«ã«ãã·ã³ã§ã«ã¹ã¿ã éçºãè¡ãããšãã§ãã VS Code åã Salesforce æ¡åŒµæ©èœãçšæãããŠããã®ã§ãããã®æ¡åŒµæ©èœã¯ãææ°ã®ãœãŒã¹é§ååéçºäœéšãæäŸãã Salesforce DX ãšå¯æ¥ã«çµã³ä»ããŠããŸããSalesforce DX ã®è©³çŽ°ã¯ãSalesforce DX å ¥éããã¬ã€ã«ãåç §ããŠãã ããã
ããã«ãLightning ãã©ãããã©ãŒã ãžã®åŒ·åãªã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ããããŸããã³ãã³ãã©ã€ã³ã奜ãéçºè ã¯ãSalesforce CLI ã䜿çšã§ããŸãã
Salesforce ã® DevOps åãè©äŸ¡ããã³æšæºãµããŒãã®ææ°æ å ±ã¯ãã³ãŒããã«ããŒãš DevOps Center ãã確èªãã ããã
ã»ãã¥ãªãã£ã®åŠç
Lightning ãã©ãããã©ãŒã ã§ã¯ãèªèšŒãããã¹ã¯ãŒãããã³ããŒã¿ããŒã¹æ¥ç¶æååã®ä¿åã«ã€ããŠå¿é ããå¿ èŠããããŸãããID ã¯ãã©ãããã©ãŒã ã«ãã£ãŠåŠçãããŸããããŒã¿ãžã®ã¢ã¯ã»ã¹ã¯ããªããžã§ã¯ãã¬ãã«ãã¬ã³ãŒãã¬ãã«ãé ç®ã¬ãã«ãªã©ãå€æ§ãªã¬ãã«ã§ã³ã³ãããŒã«ã§ããŸããã»ãã¥ãªãã£ã宣èšçã«åŠçãããŸããå€ãã®å Žåãã»ãã¥ãªãã£ã¯ Salesforce ã·ã¹ãã 管çè ã«ãã£ãŠå®çŸ©ããã³èšå®ãããŸããéçºè ã«ãšã£ãŠããã®ããã¿ãæèããŠããããšãéèŠã§ãã詳现ã¯ããããŒã¿ã»ãã¥ãªãã£ãã¢ãžã¥ãŒã«ãåç §ããŠãã ããã
ã€ã³ãã°ã¬ãŒã·ã§ã³ã«ã€ããŠ
Force.com ãã©ãããã©ãŒã ãšã®ã€ã³ãã°ã¬ãŒã·ã§ã³ã«ã¯ããŸããŸãªæ¹æ³ããããŸãããSOAP ãš REST ãæããã䜿çšããããšã«ãªãã§ãããããããã¯ã©ã¡ãã®æ¹åã«ã䜿çšã§ããŸãã
Apex ããã°ã©ãã³ã°èšèªã䜿çšã㊠Web ãµãŒãã¹ãäœæããŠå ¬éããããApex ããå€éš Web ãµãŒãã¹ãåŒã³åºãããã§ããŸããåä¿¡ããã¡ãŒã«ã¡ãã»ãŒãžã«å¯Ÿå¿ããç¹å®ã®ã€ãã³ããçºçãããéä¿¡ã¡ãã»ãŒãžãèªåéä¿¡ããããšãã§ããŸãã
èªåã§åŠçãéçºããå Žåã¯ãSalesforce ãæäŸãã SOAP API ãš REST API ã䜿çšããŠçµç¹ã®ããŒã¿ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããAPI ãã©ããããããŒã«ãããã䜿çšã§ããããã.NETãJavaãPHPãObjective CãRubyãJavaScript ã®ã©ãã§ã奜ããªèšèªã䜿çšã§ããŸãã
AppExchange ã§ã¯å€ãã®ãµãŒãããŒãã£ã€ã³ãã°ã¬ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ãå ¥æã§ããŸããã€ãŸããã»ãŒã©ã®ãããªåŠçã§ãå¯èœã§ãããã¹ãŠã®ã€ã³ãã°ã¬ãŒã·ã§ã³ãã€ã³ãã«ã€ããŠã®è©³çŽ°ã¯ããApex ã€ã³ãã°ã¬ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ãåç §ããŠãã ããã
Apex ã¯ã©ã¹ãäœæãã
Lightning ãã©ãããã©ãŒã ãš .NET ãã©ãããã©ãŒã ã®é¢é£ã«ã€ããŠç解ãæ·±ãŸã£ããšããã§ãæ©ééçºè ã³ã³ãœãŒã«ã䜿çšã㊠Apex ã¯ã©ã¹ãäœæããŠã¿ãŸããããäœæããã¯ã©ã¹ã«ã¯å ¬éã¡ãœãã sendMail ãå«ãŸããŸãããã®ã¡ãœããã«ã¯ãã¡ãŒã«éä¿¡ã³ãŒã«ã®çµæãæ€æ»ãã inspectResults ãšããéå ¬éãã«ããŒã¡ãœãããå«ãŸããŸãã
- éçºè
çµç¹ã® [èšå®] ã§ã[<ããªãã®åå>]ããªãã®åå> > [éçºè
ã³ã³ãœãŒã«] ãã¯ãªãã¯ããŠéçºè
ã³ã³ãœãŒã«ãéããŸãã
- éçºè
ã³ã³ãœãŒã«ã§ã[File (ãã¡ã€ã«)] > [New (æ°èŠ)] > [Apex Class (Apex ã¯ã©ã¹)] ãéžæããŸãã
- ã¯ã©ã¹åããEmailManagerããšæå®ãã[OK] ãã¯ãªãã¯ããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸãã
public with sharing class EmailManager { // Public method public static void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results. inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns an array of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
-
Ctrl + S ããŒãæŒããŠã¯ã©ã¹ãä¿åããŸãã
ã¡ãœãããåŒã³åºã
å ¬é sendMail ã¡ãœããã¯éçãšããŠå®£èšããã®ã§ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã¢ã¯ã»ã¹ã§ããŸããããã¯ãéçºè ã³ã³ãœãŒã«ã®å¿å Apex ã䜿çšããŠç°¡åã«è¡ãããšãã§ããŸãã
- [èšå®] ã§ã[<ããªãã®åå>]ããªãã®åå> > [éçºè
ã³ã³ãœãŒã«] ãã¯ãªãã¯ããŠéçºè
ã³ã³ãœãŒã«ãéããŸãã
-
[Debug (ãããã°)] > [Open Execute Anonymous Window (å®è¡å¿åãŠã£ã³ããŠãéã)] ãéžæããŸãã
- æ¢åã®ã³ãŒããåé€ããŠã次ã®ã¹ãããããæ¿å
¥ããŸããæåã®ãã©ã¡ãŒã¿ãŒã«ã¯èªåã®ã¡ãŒã«ã¢ãã¬ã¹ãæå®ããŠãã ããã
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- [Open Log (ãã°ãéã)] ãªãã·ã§ã³ãéžæãããŠããããšã確èªãã[Execute (å®è¡)] ãã¯ãªãã¯ããŸããæ°ããã¿ãã«å®è¡ãã°ã衚瀺ãããŸãã
- ãã°ã«ãããã°ã¹ããŒãã¡ã³ãã®ã¿ã衚瀺ãããããã«ã[Debug Only (ãããã°ã®ã¿)] ãªãã·ã§ã³ãéžæããŸããã¡ãŒã«ãæ£åžžã«éä¿¡ãããããšãäŒããã¡ãã»ãŒãžã衚瀺ãããŸããæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ãå
¥åããŠããã°ãã¡ãŒã«ãåä¿¡ããŸãã
åãäœæ¥ã .NET ã§è¡ãããšãæ³åããŠã¿ãŠãã ãããã¡ãŒã«ãéä¿¡ãã .NET ã¢ããªã±ãŒã·ã§ã³ã®äœæã¯ãã®ããã«ç°¡åã§ãããã? æ£çŽã«çããŸãããã
ãªãœãŒã¹
- Salesforce ã¢ãŒããã¯ãã£ã«ã€ããŠ
- Visual Development â When to Click Instead of Write Code (ããžã¥ã¢ã«éçº â ã³ãŒããæžãã®ã§ã¯ãªãã¯ãªãã¯æäœã§éçºããã®ã¯ã©ã®ãããªå Žåã)
- ãApex ã³ãŒãéçºè ã¬ã€ããã®ãApex ã®æŠèŠã
- An Introduction to View State (ãã¥ãŒã¹ããŒãã®æŠèŠ)
- Apex Design Patterns (Apex èšèšãã¿ãŒã³)
- ã€ã³ãã°ã¬ãŒã·ã§ã³ã®ãã¿ãŒã³ãšå®è·µ