[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.

[WordPress]VisualStudio CodeでWordPressとFTPで接続

VisualStudio CodeでWordPressとFTPで接続例を紹介します。

VisualStudio Codeの拡張で、「ftp-simple」入力し、Installします。

VisualStudio Codeのメニュー「View」押下し、「ftp-simple:Config」押下し、ファイルを開きます。

開かれた「ftp-simple-temp.json」ファイルを編集します。

[
	{
		"name": "test.test.or.jp",
		"host": "host.test.or.jp",
		"port": 21,
		"type": "ftp",
		"username": "testadmin",
		"password": "xxxxxxxxxxxxxxxx",
		"path": "/",
		"autosave": true,
		"confirm": true
	}
]

VisualStudio Codeのメニュー「View」押下し、「ftp-simple:Remote directory open to workspace」押下し、「.Current Directory:/」押下します。成功すると、Successが画面に表示され、WordpressのDirectoryが左サイドに表示されます。

[Salesforce]lightning-record-form を使用して取引先責任者を作成

lightning-record-form を使用して取引先責任者を作成例を紹介します。

contactCreator.html

<template>
    <lightning-card>
        <lightning-record-form
            object-api-name={objectApiName}
            fields={fields}
            onsuccess={handleSuccess}>
        </lightning-record-form>
    </lightning-card>    
</template>

contactCreator.js

import { LightningElement } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import CONTACT_OBJECT from '@salesforce/schema/Contact';
import FIRSTNAME_FIELD from '@salesforce/schema/Contact.FirstName';
import LASTNAME_FIELD from '@salesforce/schema/Contact.LastName';
import EMAIL_FIELD from '@salesforce/schema/Contact.Email';
export default class ContactCreator extends LightningElement {
    objectApiName = CONTACT_OBJECT;
    fields = [FIRSTNAME_FIELD, LASTNAME_FIELD, EMAIL_FIELD];
    handleSuccess(event) {
        const toastEvent = new ShowToastEvent({
            title: "Contact created",
            message: "Record ID: " + event.detail.id,
            variant: "success"
        });
        this.dispatchEvent(toastEvent);
    }    
}

contactCreator.js-meta.xml 

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>51.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
    </targets>
</LightningComponentBundle>

設定 をクリックして [設定] を選択します。
[クイック検索] ボックスに「Lightning アプリケーションビルダー」(Lightning App Builder)と入力し、[Lightning アプリケーションビルダー] を選択します。

Lightning ページを作成します。

[新規] (New)をクリックします。
[アプリケーションページ] (App Page)を選択し、[次へ] をクリックします。
[表示ラベル] に「Working with Data」(データの操作) と入力し、[次へ] をクリックします。
レイアウトで [ヘッダーと左サイドバー] (Header and Left Sidebar)を選択します。
[完了] (Finish)をクリックします。

contactCreator コンポーネントをページサイドバーにドラッグします。

ページを保存(Save)します。
ページを有効化します。デフォルトのアプリケーション名 (Working with Data) のままで [保存] (Save)をクリックします。
ページをナビゲーションメニューに追加するように要求されたら、[完了] (Finish)をクリックします。


新しいページを開きます。アプリケーションランチャーの検索で「work」と入力し、[Working with Data (データの操作)] を選択します。

データを登録します。

First name: Lisa
Last name: Jones
Email: ljones@developer.com