cli icon indicating copy to clipboard operation
cli copied to clipboard

Retrieving and deploying Nested Lightning Email Templates and Folders fails

Open amtrack opened this issue 8 months ago • 6 comments

Summary

There are multiple issues with retrieving and deploying Nested Email Templates and Folders using the sf CLI:

  1. retrieving metadata using source tracking (sf project retrieve start) does not retrieve nested EmailTemplateFolder components:

    • sf project retrieve start
    • level1 is retrieved
    • level2 and level3 is not retrieved
  2. deploying a nested EmailTemplate by Metadata API name fails:

    • sf project retrieve start --metadata EmailTemplate:level3/template_level3_1715081809012
    • sf project deploy start --metadata EmailTemplate:level3/template_level3_1715081809012

      Error (1): No source-backed components present in the package.

[!NOTE] This requires Email > Lightning Email Templates > Folders and Enhanced Sharing to be switched on.

Screenshot 2024-06-04 at 14 27 16

Given the following directory structure with 3 nested folders (level1/level2/level3) and one template in each level.

$ tree fixtures
fixtures
└── email
    ├── level1
    │   ├── level2
    │   │   ├── level3
    │   │   │   ├── template_level3_1715081809012.email
    │   │   │   └── template_level3_1715081809012.email-meta.xml
    │   │   ├── level3.emailFolder-meta.xml
    │   │   ├── template_level2_1714984832364.email
    │   │   └── template_level2_1714984832364.email-meta.xml
    │   ├── level2.emailFolder-meta.xml
    │   ├── template_level1_1714984698883.email
    │   └── template_level1_1714984698883.email-meta.xml
    └── level1.emailFolder-meta.xml

5 directories, 9 files

Apparently different names are being used in the Metadata API / SourceMember Tooling API / FileResponse:

Metadata API [1] SourceMember [2] FileResponse [3]
EmailTemplateFolder:level1 EmailTemplateFolder:level1 EmailTemplate:level1
EmailTemplateFolder:level2 EmailTemplateFolder:level1/level2 EmailTemplate:level1/level2
EmailTemplateFolder:level3 EmailTemplateFolder:level1/level2/level3 EmailTemplate:level1/level2/level3
EmailTemplate:level1/template_level1_1714984698883 EmailTemplate:level1/template_level1_1714984698883 EmailTemplate:level1/template_level1_1714984698883
EmailTemplate:level2/template_level2_1714984832364 EmailTemplate:level2/template_level2_1714984832364 EmailTemplate:level1/level2/template_level2_1714984832364
EmailTemplate:level3/template_level3_1715081809012 EmailTemplate:level3/template_level3_1715081809012 EmailTemplate:level1/level2/level3/template_level3_1715081809012

[1]: listing folders using sf org list metadata -m EmailTemplateFolder and listing templates in a folder e.g. sf org list metadata -m EmailTemplate --folder level3 [2]: query SourceMember records using sf data query --use-tooling-api --query "SELECT MemberType, MemberName FROM SourceMember" [3]: retrieve metadata with --json flag sf project retrieve start --json --metadata xxx # see .result.fileProperties

Steps To Reproduce

[!TIP] Or checkout the repositories for reproduction linked at the bottom

  • Create a Scratch Org
  • Switch on Email > Lightning Email Templates > Folders and Enhanced Sharing
  • Create 3 levels of Email Folders with one Email Template per level
  • Try retrieving using sf project retrieve start -> does not retrieve folders in level 2 and 3
  • ✅ Retrieve a nested EmailTemplate in level3 by Metadata API name (e.g. --metadata EmailTemplate:level3/template_level3_1715081809012)
  • ❌ Try deploying the retrieved component with the same Metadata API name

Screenshot 2024-06-04 at 14 26 32

Expected result

  • retrieving and deploying should work
  • The same API names should be used throughout the Metadata API, SourceMember and FileResponse

Actual result

  • fails to retrieve nested Email Template Folders
  • uses different names in the Metadata API, SourceMember and FileResponse

System Information

{
  "architecture": "darwin-arm64",
  "cliVersion": "@salesforce/cli/2.42.6",
  "nodeVersion": "node-v20.10.0",
  "osVersion": "Darwin 23.5.0",
  "rootPath": "/Users/john.doe/.local/lib/node_modules/@salesforce/cli",
  "shell": "zsh",
  "pluginVersions": [
    "@oclif/plugin-autocomplete 3.0.18 (core)",
    "@oclif/plugin-commands 3.3.4 (core)",
    "@oclif/plugin-help 6.0.22 (core)",
    "@oclif/plugin-not-found 3.1.9 (core)",
    "@oclif/plugin-plugins 5.0.21 (core)",
    "@oclif/plugin-search 1.0.24 (core)",
    "@oclif/plugin-update 4.2.12 (core)",
    "@oclif/plugin-version 2.1.2 (core)",
    "@oclif/plugin-warn-if-update-available 3.0.19 (core)",
    "@oclif/plugin-which 3.1.10 (core)",
    "@salesforce/cli 2.42.6 (core)",
    "apex 3.1.11 (core)",
    "auth 3.6.11 (core)",
    "data 3.3.5 (core)",
    "deploy-retrieve 3.6.14 (core)",
    "info 3.2.8 (core)",
    "limits 3.3.7 (core)",
    "marketplace 1.2.5 (core)",
    "org 4.1.10 (core)",
    "packaging 2.4.4 (core)",
    "schema 3.3.6 (core)",
    "settings 2.2.6 (core)",
    "sobject 1.4.2 (core)",
    "source 3.3.12 (core)",
    "telemetry 3.3.7 (core)",
    "templates 56.2.7 (core)",
    "trust 3.6.11 (core)",
    "user 3.5.8 (core)"
  ]
}

Additional information

Repositories for reproduction:

  • https://github.com/mdapi-issues/mre-nested-lightning-email-templates
  • https://github.com/mdapi-issues/mre-nested-lightning-email-templates-componentset

amtrack avatar Jun 04 '24 14:06 amtrack