[Salesforce]Exception

[Salesforce]Exceptionについて紹介します。

getCause:
例外オブジェクトとして例外の原因を返します。

getLineNumber:
例外が発生した箇所の行番号を返します。

getMessage: 
ユーザに表示されるエラーメッセージを返します。

getStackTraceString: 
文字列としてスタック追跡を返します。

getTypeName: 
DMLException、ListException、MathException などの例外種別を返します。

try {
    xxx
} catch(Exception e) {
    System.debug('Exception type: ' + e.getTypeName());
    System.debug('Message: ' + e.getMessage());
    System.debug('Cause: ' + e.getCause());
    System.debug('Line number: ' + e.getLineNumber());
    System.debug('Stack trace: ' + e.getStackTraceString());
}

[Salesforce]Id重複のListをMapに入れることでId重複解消策

Id重複のListをMapに入れることでId重複解消策を紹介します。

Account acc = [SELECT Id, Name FROM Account LIMIT 1];
List<Account> accList = new List<Account>();
accList.add(acc);
accList.add(acc);
System.debug('accList:'+accList);

Map<Id, Account> mapAccIdToAcc = new Map<Id, Account>();
mapAccIdToAcc.putAll(accList);
System.debug('mapAccIdToAcc:'+mapAccIdToAcc);

ログは以下です。

19:07:46:010 USER_DEBUG [97]|DEBUG|accList:(Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更}, Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更})
19:07:46:010 USER_DEBUG [101]|DEBUG|mapAccIdToAcc:{0016T00002kM9AVQA0=Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更}}

[Salesforce]プロセスビルダーでToDoの「期日」項目表示

プロセスビルダーでToDoの「期日」項目表示

Salesforceの画面では「ToDo」で「期日」と表示される項目が、プロセスビルダーでは「期日のみ」と表示されてしまいます。

これは、SalesforceのAPIがこの項目(ActivityDate)に関しては、項目の表示ラベルと異なる値を返すことが原因です。

[Salesforce]オブジェクトのレコードタイプ名からレコードタイプ表示ラベル取得

オブジェクトのレコードタイプ名からレコードタイプ表示ラベル取得例を紹介します。

String RecordTypeDevName = 'testDevName';
String objName = 'testObject__c';

List<RecordType> recordTypeList = [
    SELECT Id
      , Name
      FROM RecordType
      WHERE SobjectType = : objName
      AND DeveloperName = : RecordTypeDevName
  ];

for(RecordType rtobj : recordTypeList){
    system.debug('rtobj.Name:'+rtobj.Name);
}

[Salesforce]オブジェクトAPI参照名からオブジェクト表示ラベル取得

オブジェクトAPI参照名からオブジェクト表示ラベル取得例を紹介します。

    String searchObjName = 'Account';
    Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
    for (String sKey : gd.keySet()) {
        Schema.DescribeSObjectResult targetObject = gd.get(sKey).getDescribe();
        if(targetObject.getName() == searchObjName){
			System.debug('targetObject.getLabel()----->targetObject.getName()::::::'+targetObject.getLabel()+'----->'+targetObject.getName());
        }
    }

[Salesforce]オブジェクト表示ラベルからオブジェクトAPI参照名取得

オブジェクトAPI参照名からオブジェクト表示ラベル取得例を紹介します。

    String searchObjLabelName = '取引先';
    Map<String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
    for (String sKey : gd.keySet()) {
        Schema.DescribeSObjectResult targetObject = gd.get(sKey).getDescribe();
        if(targetObject.getLabel() == searchObjLabelName){
			System.debug('targetObject.getLabel()----->targetObject.getName()::::::'+targetObject.getLabel()+'----->'+targetObject.getName());
        }
    }

[Salesforce]オブジェクトのレコードタイプIDからレコードタイプ名取得

オブジェクトのレコードタイプIDからレコードタイプ名取得例を紹介します。

  List<RecordType> recordTypeList = [
    SELECT Id
      , Name
      FROM RecordType
      WHERE SobjectType = 'testObj__c'
      AND Id = '012211111111111111'
  ];

for(RecordType rtobj : recordTypeList){
    system.debug('rtobj.Name:'+rtobj.Name);
}

または、以下の例もあります。

String searchObjName = 'testObj__c';
String searchRecordTypeId = '012211111111111111';
List<RecordType> recordTypeList = [
    SELECT Id
      , Name
      FROM RecordType
      WHERE SobjectType  = : searchObjName
      AND Id = : searchRecordTypeId
  ];

for(RecordType rtobj : recordTypeList){
    system.debug('rtobj.Name:'+rtobj.Name);
}

[Salesforce]Failed to run tests synchronously.: Your query request was running for too long.

テストクラス実行時、「Failed to run tests synchronously.: Your query request was running for too long.」エラーの対応

Summary
Test classes failing with QUERY_TIMEOUT Failed to run tests synchronously when running in synchronous mode

  1. Login to the org which has quite number of managed package apex classes.
  2. Run the Apex Test Class from Developer Console in Sync Mode
  3. You may notice below exception when running the apex test class:

Error Message:

“QUERY_TIMEOUT Failed to run tests synchronously: Your query request was running for too long”

Workaround
As a workaround, please try to run the test class in asynchronous mode.