Use this node to install the binary files (images, etc.) for templates as ContentAssets during app creation. A ContentAsset (entity keyPrefix 03S) is a developer-named, package-friendly handle on top of a ContentDocument/ContentVersion pair. Other templated assets, most notably dashboards, can reference the
ContentAsset by its template-level name and have the framework resolve it to the real, app-scoped record at runtime.
(Required) The path to the binary file in the template bundle
label
(Optional) The display text for the ContentAsset and used as the ContentVersionTitle value. Defaults to name when not provided.
language
(Optional) The language for the content. Defaults to en_US.
isVisibleByExternalUsers
(Optional) Indicates whether this content is visible to external users (true) or not (false). Defaults to false.
condition
(Optional) An EL expression, evaluated at runtime, that determines whether to upload this CSV or not.
Set runAs to AutoProc so that the ContentAsset can upload to the Salesforce Platform. Unlike most node types, this node runs as a system user.
Note
App Context Values
Content assets created from a template get an entry in the App Context if they are successful. These entries are keyed off of the template specific asset name and contain information about the instance that was created.
App Context Value
Definition
App.ContentAssets.<templateAssetName>.Id
The ID of the content asset.
App.ContentAssets.<templateAssetName>.Name
The developer name of the content asset.
App.ContentAssets.<templateAssetName>.Label
The label of the content asset.
On Failure
If this task fails, it returns a FAIL_TERMINAL status. The chain stops and no downstream nodes run.
Additional Information
App-Scoped DeveloperName
ContentAsset.DeveloperName is unique per org. To allow multiple apps installed from the same template to coexist, the task prefixes the requested template name with the owning app’s developer name:
1task specifies: name = "bird"2app named: MyApp3stored DeveloperName: MyApp_bird
The unscoped name, bird, is used as the app context key so that other tasks in the same chain can reference the asset without knowing about the per-app prefix. The state entry’s Name attribute holds the fully-scoped DeveloperName, which is what the variable substitution resolves to at install time.
Example dashboard referencing a ContentAsset
Dashboards include images via an image widget whose source.name is the ContentAssetDeveloperName value. Because the DeveloperName is app-scoped at runtime, the dashboard JSON can’t hard-code the literal name. Instead, it must use the app context for variable substitution:
Deleting an app removes the installed app from the framework registration but leaves the underlying
ContentAsset, ContentDocument, and ContentVersion in the org.
If the app is installed again, the ContentAssetUpsert node detects the orphan ContentAsset and re-links it to the new app.