LoginSignup
17
16

More than 5 years have passed since last update.

SOQL

Last updated at Posted at 2017-01-24

クエリーの発行

xxx__c[] result = Database.query(query);
sObject[] result = [SELECT xxx FROM xxx_c];

if (result.isEmpty()){
    //0件チェック
    ...
}else{
    ...
}

//1件しかデータがない場合は下記の形式も取れるが、データが0件の場合はnullが返るわけではなくQueryExceptionが返ることに注意
xxx__c result = Database.query(query); 

日付の条件1

DAY_IN_YEAR関数を使って年で比較する
WHERE DAY_IN_YEAR(convertTimezone(StartDateTime)) >= :fromDayOfYear AND DAY_IN_YEAR(convertTimezone(StartDateTime)) <= :toDayOfYear

日付の条件2

LAST_N_DAYS関数を使って過去の日付分を取り出す(0:00からxx日前のデータを取得する。本日のデータも含まれる)
LastPublishedDate = LAST_N_DAYS:5'

DateとDatetimeの比較

DAY_ONLY(datetime__c) =:date

日付文字列との比較

DAY_ONLY(createddate) >= 2017-03-26

レコードタイプの取得

Nameは表示ラベル、DeveloperNameはレコードタイプ名として英字で指定したもの
SELECT RecordTypeId, RecordType.Name, RecordType.DeveloperName FROM xx
xx はオブジェクト

上記のDeveloperNameからレコードタイプIDを取得するクエリー
SELECT DeveloperName, Id, Name FROM RecordType WHERE sObjectType='xxx__c' AND DeveloperName='###'

公開グループの取得

Type='Regular'が通常のグループ。ロールに紐付いて作成されるものは'RoleAndSubordinates'がセットされる

//公開グループの取得
Group[] groups = [SELECT DeveloperName, Name, Type FROM Group WHERE DeveloperName=:xx];
//グループメンバーの取得 UserOrGroupIdにユーザーまたはグループのIDがセットされている
SELECT GroupId, Id, UserOrGroupId FROM GroupMember WHERE GroupId=:groups[0].Id

権限セットを持っているかのチェック

SELECT AssigneeId, Id FROM PermissionSetAssignment 
WHERE PermissionSetId in
 (SELECT Id FROM PermissionSet WHERE Name = '##権限セット名##')

ロール関連

API名(xx_xx)は DeveloperName項目を使う。

//特定のロールに紐付くユーザを取得する。developerNameは英字名
SELECT Id, Name From User WHERE userRoleId in
 (SELECT Id from UserRole WHERE DeveloperName = 'xxxx')

//ユーザーに紐付くロール名を取得する
SELECT Id, userRole.Name, Name FROM User WHERE Id='xxx'

添付ファイル(Files)

  • 従来からの添付ファイルはサブクエリー(SELECT Id, Name FROM Attachments)を使って取得できるが、Filesに格納されたファイルは ContentDocumentLinkオブジェクトから取得する。 ContentDocumentはファイルを管理する親オブジェクトであり、実際のファイルを取得するには各バージョンを管理する ContentVersion から取得する。
  • ファイル本体はContentVersion#VersionDateフィールドにBase64形式で格納されている。
  • ContentBodyは内部用なので直接使わない。代わりにContentVersionを使う。
//LinkedEntityIdにレコードのIDを指定すると、そのレコードに紐付くファイルの一覧を取得できる
SELECT ContentDocumentId, Id FROM ContentDocumentLink 
 WHERE LinkedEntityId ='a0SN0000004B75W'

//上記で取得できるのはContentDocumentIdなので、実際にダウンロード可能な各バージョンは
 ContentVersionオブジェクトから取得する
SELECT Id, CreatedDate, Title, Description, FileType, Owner.UserName, 
       VersionNumber, ContentDocumentId 
FROM ContentVersion Where IsLatest = true and ContentDocumentId in :cIds order by CreatedDate desc

取引先住所の検索

BillingAddressやShippingAddressという項目はない。

BillingCountry : 国(請求先)
BillingPostalCode : 郵便番号(請求先)
BillingState : 都道府県(請求先)
BillingCity : 市区郡(請求先)
BillingStreet : 町名・番地(請求先)

SELECT BillingCountry,BillingPostalCode,BillingState,
       BillingCity,BillingStreet FROM Account

ユーザー住所の検索

Addressではなく、個別に項目を検索する。

PostalCode : 郵便番号
Country : 国
State : 都道府県
City : 市区郡
Street : 町名・番地

SELECT Country, PostalCode, State, City, Street From User

グループ関数を使う

AggregateResultを使う
参考

AggregateResult[] groupedResults
  = [SELECT AVG(Amount)aver FROM Opportunity];
Object avgAmount = groupedResults[0].get('aver');

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16