Apexの基礎

By | May 7, 2020

■コレクションの種別

  • List:順序付け+インデックス付け
  • Set:重複を含まない+順序付けされていない
  • Map:キーと値のペア

■Apexのデータ操作

DBから情報をメモリ内に取得→メモリ内でデータを変更→変更情報をDBに反映

■SOQLの結果を配列を格納する

・Listの場合

List<Opportunity> oppList = [SELECT Id FROM Opportunity];

・Setの場合

Set<Opportunity> oppSet = new Set<Opportunity>([SELECT Id FROM Opportunity]);

・Mapの場合

Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>([SELECT Id FROM Opportunity]);

※SetとMapはSOQLの結果を直接受け取ることはできないため、コンストラクタを利用する必要がある。

※一般に、SOQLの戻り値のデータ型にはsObjectとList<sObject>の二つがあり、前者は取得されるレコードが一つであると確定している場合にのみ使用する。

バインド変数を使用した静的SOQL(インラインSOQL)

String searchfor = 'SalesforceKid' ;Contact[] Contacts = [SELECT xyz__c, Firstname, Lastname FROM Contact WHERE Lastname = :searchfor]; 

動的SOQL

LString myTestString = 'TestName';List<sObject> sobjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = :myTestString');

※Apexの処理の中で実行するSOQLを動的に編集し、StringでDatabase.queryにパスする

○参照方法まとめ

子から親(標準)List<Contact> contact = [SELECT FirstName, Account.Name From Contact];
子から親(カスタム)List<child__c> ch = [SELECT Id, Name, parent__r.FirstName, parent__r.LastName__c from child__c WHERE age__c < 25];
※cがrになる
親から子(標準)List<Account> account = [SELECT Name,(SELECT FirstName, LastName FROM contacts) FROM Account];
※子リレーション名
親から子(カスタム)List<Opportunity> Parent__c = [SELECT ParentName__c, Age__c, (SELECT Child_Name__c, Dob__c FROM Child__r) FROM Parent__c];
※子リレーション名__r

※「親から子」ではそれぞれcontactsとChild__rが子リレーション名である

よくあるクエリまとめ

子のいる親だけ取得SELECT id FROM Account WHERE Id IN (SELECT accountid FROM Opportunity)

■基本用語

SQL:Structured Query Language

SOQL:Salesforce Object Query Language

sObject:Lightning PlatformのDBに保存できるApex内のObjectのこと

API参照名:ApexでsObject内の項目を参照するために使用される名前

■おすすめサイト

https://yhayashi30.org/salesforce/soql-basics/#outline__4_5

http://blog.flect.co.jp/salesforce/2011/11/soql-a233.html