[Salesforce]Lightning Web ComponentからApex呼び出し方法

Lightning Web ComponentでApex呼び出し方法

■LWCから呼び出せるApexメソッド

条件

  @AuraEnabledがついていること

  staticであること

  publicもしくはglobalであること

例)

Apexクラス作成します。

testController

public with sharing class testController {
    @AuraEnabled
    public static List<test__c> getRecord( String str ){
        return [
                SELECT
                 Id,
                 Name
                FROM test__c
                Where Name = str
            ];
    }
}

■LWCからApex呼び出し

・Javascript

testLwc.js

import { ShowToastEvent } from "lightning/platformShowToastEvent";
import { CurrentPageReference } from "lightning/navigation";
import getRecord from '@salesforce/apex/testController.getRecord';

export default class testLwc extends LightningElement {

 @api recordId;

  @wire(CurrentPageReference)
  async getStateParameters(currentPageReference) {
    //ScreenActionの場合、レコード詳細画面でLightning Web コンポーネントアクション押下時のレコードID取得
    this.recordId = currentPageReference.state.recordId;
    //Apexクラスメソッド呼び出して、レコード取得
    const rows = await getRecords({ recordId: this.recordId }).catch((e) => {
      console.error(e);
   //dispatchEventメソッドでカスタムイベントをディスパッチし、親コンポーネントに伝達します。
      this.dispatchEvent(
        new ShowToastEvent({
          title: "エラーが発生しました。",
          message: e.body.message,
          variant: "error",
        })
      );
    });
  }

}

・xml

testLwc.js-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>true</isExposed>
  <targets>
  <target>lightning__RecordAction</target>
  </targets>
  <targetConfigs>
    <targetConfig targets="lightning__RecordAction">
      <actionType>ScreenAction</actionType>
    </targetConfig>
  </targetConfigs>
</LightningComponentBundle>

・html

testLwc.html

<template>
        <lightning-quick-action-panel header="test">
            ここにモーダルコンテンツを記載する
            <div slot="footer">
                <lightning-button variant="neutral" label="ボタン1" class="slds-m-left_x-small"></lightning-button>
                <lightning-button variant="brand" label="ボタン2" class="slds-m-left_x-small"></lightning-button>
            </div>
        </lightning-quick-action-panel>
</template>

[Salesforce]Salesforce CLI使用の流れ

Salesforce CLI(Command Line Interface)使用の流れ

・Install

https://developer.salesforce.com/ja/tools/sfdxcli

コマンドプロンプトにて、以下のコマンドを実行します。

・sfdx update

Salesforce CLI とプラグインの最新バージョンをインストールするには、次のコマンドを実行します。

・sfdx –version

現在のバージョンを確認します

・sfdx force:auth:web:login -d -a {エイリアス名}

例)sfdx force:auth:web:login -d -a devtest

ここで、「devtest」はエイリアス名

対象組織にログインします

・プロジェクト作成

例)C:\hoge>sfdx force:project:create -n hoge-project

hogeディレクトリ直下に「hoge-project」プロジェクトを作成します。

・対象組織にログインします。

例)C:\hoge>sfdx force:org:open -u test@testtesttestkkkk.com

ここで、ユーザ名「test@testtesttestkkkk.com」の場合

・プロジェクト「hoge-project」にApexクラス取得します。

例)C:\hoge\hoge-project>sfdx force:source:retrieve -m ApexClass -u devtest

ここで、「devtest」はエイリアス名

・パス指定して、取得します。

例)C:\hoge\hoge-project>sfdx force:source:retrieve -p force-app/main/default/classes -u devtest

ここで、「devtest」はエイリアス名

[Salesforce]Only variable references are allowed in dynamic SOQL/SOSL

エラー:Only variable references are allowed in dynamic SOQL/SOSL

・エラーが起きるケース

        List<String> accountIdList = new List<String>();
        for(Account account : accountList){
            accountIdList.add(account.Id);
        }

        String query = '';
        query = '';
        query += ' SELECT Id '; 
        query += ' , Name ';
        query += ' , Account__c ';
        query += ' , Account__r.Id ';
        query += ' From Test__c ';
        query += ' WHERE Account__r.Id IN : \'' + accountIdList + '\'';
        system.debug('query:'+query);

        List<Test__c> testLsit = Database.query(query);

・エラーが起きないケース

        List<String> accountIdList = new List<String>();
        for(Account account : accountList){
            accountIdList.add(account.Id);
        }

        String query = '';
        query = '';
        query += ' SELECT Id '; 
        query += ' , Name ';
        query += ' , Account__c ';
        query += ' , Account__r.Id ';
        query += ' From Test__c ';
        query += ' WHERE Account__r.Id IN : accountIdList ';
        system.debug('query:'+query);

        List<Test__c> testLsit = Database.query(query);

[Salesforce]Apexテストクラスのエラー「TestMethod として定義されたメソッドは、getContent コールをサポートしていません。」対応

Apexテストクラスのエラー「TestMethod として定義されたメソッドは、getContent コールをサポートしていません。」対応

attachmentFile.Body = Test.isRunningTest() ? Blob.valueof('testString') : pr.getContent();

[Salesforce]Apex StandardControllerテストクラス

Apex StandardControllerテストクラス

@isTest
private class Test_testController {

    static testmethod void test1() {
        
        Account acc = new Account(
            Name='テスト'
        );
        insert acc;

        Test.startTest();
        
        ApexPages.StandardController sc = new ApexPages.StandardController(acc);
        testController testSC = new testController(sc);

        PageReference pageRef = Page.testPage;
        pageRef.getParameters().put('id', String.valueOf(acc.Id));
        Test.setCurrentPage(pageRef);

        testSC.testMethod();

        Test.stopTest();
    }
}

[Salesforce]項目一括作成

項目一括作成

シナリオとして、取引先のカスタム項目をカスタムオブジェクトに一括コピーする。

手順

・組織のソースファイルを持ったvscodeのターミナルに下記コードを入力して実行する。実装すると、ソースファイルがメタデータに変換され、メタデータのフォルダとその下にファイルが新たに作成される。

sfdx force:source:convert

・作成したメタデータのコードをコピーして、作成したいカスタム項目のコードを追加する。

・ターミナルに下記コードを入力したら実行してメタデータをソースファイルに再変換する。

sfdx force:mdapi:convert -r メタデータフォルダパス

例えば、

sfdx force:mdapi:convert -r metadataPackage_1234567890123

・対象のファイルをデプロイすると、環境にカスタム項目が一括で作成される。

ただ、別途項目レベルセキュリティの設定が必要である。