💬

Salesforce アプリ開発の tips

2024/08/16に公開

はじめに

全く知見がなくSalesforce アプリって何?って状態で始めた。

実際開発してみての困ったことや tips を共有してみる
※SFDX を用いての開発です

lwc コンポーネントで typescript 使えない

JSDocのアノテーションによる型定義/型指定を使うしかないが、複雑なロジックが必要な場合は、やっぱり typescript で書きたい

参考: https://developer.salesforce.com/jpblogs/2022/10/how-to-use-typescript-with-salesforce-part-2-jp/

解決策

typescript をトランスパイルして生成した js を lwc で import するようにした

  1. lwc のコンポーネント配下に .ts ファイルを配置して tsc を実行
  2. 生成されたファイルを import

import 方法については、こちら を参照

Lightning アプリケーションビルダー の初期ヘッダーが消せない

解決策

css で消した😇
参考: https://salesforce.stackexchange.com/questions/260858/hide-standard-page-header-in-custom-lightning-app-page

css は force-app/main/default/staticresorces に配置

参考: https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_staticresource.htm

.slds-page-header.header.flexipageHeader {
    display: none;
}
<?xml version="1.0" encoding="UTF-8"?>
<StaticResource xmlns="http://soap.sforce.com/2006/04/metadata">
    <cacheControl>Public</cacheControl>
    <contentType>text/css</contentType>
</StaticResource>

Lightning Web コンポーネントのエラー処理が辛い

Apex のエラーやロジックのエラーなど色々なエラーをハンドリング頑張るのは辛い

解決策

reduceErrors をそのまま使うようにした

参考: https://developer.salesforce.com/jpblogs/2020/09/error-handling-best-practices-for-lwc/

Apex のテストカバレッジを知りたい

テスト実行後に以下を実行

解決策

sfdx force:apex:test:report --testrunid <Test Run Id> --codecoverage --resultformat human
# ex. sfdx force:apex:test:report --testrunid 707Ig00000REz6t --codecoverage --resultformat human

パッケージのアップグレード時のマイグレーション処理はどうやる?

パッケージをアップグレードする際にレコードを更新したい

解決策

インストール後スクリプトを使用した

config/project-scratch-def.json

{
  ...
  "packageDirectories": [
    {
      "path": "force-app",
      "default": true,
      "package": "package_name",
      "postInstallScript": "PostInstallScript"
    }
  ],
}

classes/PostInstallScript.cls

public class PostInstallScript implements InstallHandler {
  private Version previousVersion;
  public void onInstall(InstallContext context) {
    if (context.previousVersion() == null) {
      // 初回インストール時の処理
    } else {
      // アップグレード時の処理
    }
  }

  private Boolean isInstalledVersionBefore(Version version) {
    return previousVersion.compareTo(version) < 0;
  }
}

サンプル: https://developer.salesforce.com/docs/atlas.ja-jp.252.0.pkg1_dev.meta/pkg1_dev/apex_post_install_script_create.htm

参考: https://developer.salesforce.com/docs/atlas.ja-jp.pkg1_dev.meta/pkg1_dev/apex_post_install_script.htm

最後に

他にも困ったことは多々ありましたが、web アプリの開発のノリで開発するとすごく大変でした...

immedioテックブログ

Discussion