Loading

Manufacturing Cloud: Bulk insert of Sales Agreement Products via Data Loader fails with ProductId field error

Publish Date: May 27, 2026
Description

When you attempt to bulk-insert Sales Agreement Product [SalesAgreementProduct] records using Data Loader, the Bulk API, or a third-party ETL tool such as DataSpider, the API returns: "Cannot create update field for ProductId. Verify field-level security and confirm read/write is permitted in the profile or permission set."

Why the error is misleading: Granting Read/Edit field-level security on the ProductId [ProductId] field via profile or permission set does not resolve the error. ProductId on SalesAgreementProduct is not exposed as a createable field through the standard bulk data API. The same record can be created interactively from the Sales Agreement record by clicking Add Products, selecting a product, entering the Initial Planned Quantity, and saving.

Root cause: The supported bulk-load path for SalesAgreementProduct in Manufacturing Cloud is the CSV File Import feature (in-app) or the Import Records from CSV File invocable action (for programmatic/API-based loads). Direct insert via Data Loader or Bulk API is not supported for this object.

Affected configuration:

  • Editions: Enterprise, Unlimited, and Developer Editions of Manufacturing Cloud
  • Profiles: All profiles including System Administrator
  • Tools: Data Loader, Bulk API, DataSpider, MuleSoft, or any ETL performing direct SalesAgreementProduct inserts
  • Note: SalesAgreement [SalesAgreement] and Product2 [Product2] records can be inserted via Data Loader without error — only SalesAgreementProduct is affected
Prerequisite(s)
  • Manufacturing Cloud license (Enterprise, Unlimited, or Developer Edition)
  • Manufacturing Sales Agreements permission set license (ManufacturingSalesAgreementsPsl) assigned to the loading user
  • CSV Basic Data Import permission set assigned to the loading user (for CSV File Import path)
  • CSV File Import tab enabled on the loading user's profile (Setup > Profiles > Tab Settings)
  • For the API path: Manufacturing Advanced Account Forecast PSL or Manufacturing Program Based Business permission set assigned
  • Parent SalesAgreement [SalesAgreement] and Product2 [Product2] records already exist in the org before running the import
  • CSV file in UTF-8 encoding with field API names in the header row
Resolution

Stop inserting SalesAgreementProduct records directly via Data Loader or ETL. Use one of the supported paths below based on your use case.

Cause 1: Interactive or one-time bulk load via CSV File Import

  1. Navigate to Setup > Users > Permission Sets and assign the Manufacturing Sales Agreements [ManufacturingSalesAgreementsPsl] permission set license and the Manufacturing Sales Agreements permission set to the loading user.
  2. Also assign the CSV Basic Data Import permission set to the loading user to enable the Basic CSV Data Import [CSVBasicDataImport] user permission.
  3. Navigate to Setup > Profiles > [Profile of loading user] > Edit. In Tab Settings, find CSV File Import, set it to Default On, and click Save.
  4. Prepare a UTF-8 CSV file with columns: SalesAgreementId, ProductId, SalesPrice, and InitialPlannedQuantity. The first row must contain field API names. Date fields must follow yyyy-MM-dd format. Keep the file under 100 MB.
  5. From the App Launcher, open CSV File Import, upload the CSV, select SalesAgreementProduct as the target object, map each column to its field, choose Insert as the operation, and run the import.
  6. Monitor completion through the in-app notification and download the import log when finished.

Cause 2: Programmatic bulk load via API (MuleSoft, DataSpider, scheduled job)

  1. Replace the direct SalesAgreementProduct insert call with the standard invocable action: /services/data/vXX.0/actions/standard/importRecordsFromCsvFile (replace XX with your org's current API version).
  2. Upload the CSV as a ContentVersion and capture the resulting ContentVersion Id (receivedDocumentId).
  3. POST to the action with the following body:
    {"inputs":[{"receivedDocumentId":"<ContentVersion Id>","targetObjectApiName":"SalesAgreementProduct","operationType":"insert"}]}
    For upsert operations, also include externalIdFieldName.
  4. Ensure the running user has the Import CSV for Advanced Account Forecasting system permission, assigned through the Manufacturing Advanced Account Forecast [ManufacturingAdvAccountForecastPsl] permission set or the Manufacturing Program Based Business permission set.
  5. Confirm the action returns {"isSuccess": true} and that the SalesAgreementProduct rows are visible on the parent Sales Agreement record.

Confirm the fix: Re-run the original failing payload through CSV File Import (or the Import Records from CSV File action) and verify that the SalesAgreementProduct rows are created without the "Cannot create update field for ProductId" error and appear under Products on the Sales Agreement [SalesAgreement] record.

Knowledge Article Number

005385156

 
Loading
Salesforce Help | Article