# Data Sync Pro > Data Sync Pro (DSP) is a Salesforce-native, rules-driven engine for business-process automation, data transformation and data quality. This documentation covers recipes, the user manual, transformation formulas, and FAQs. ## Recipes Step-by-step guides for common Salesforce automation and data-processing tasks. - [Mass Recalculation with Batch Blank Updates](https://www.datasyncpro.io/recipes/batch/mass-recalculation-with-batch-blank-updates): A #Batch Executable is configured to perform blank updates on Account records, which triggers a recalculation of rollup summary fields… - [Bulk Merge Records from Duplicate Job Results](https://www.datasyncpro.io/recipes/batch/bulk-merge-records-from-duplicate-job-results): A #Batch is configured to bulk deduplicate Contacts from a Salesforce Duplicate Job run. DSP retrieves Duplicate Record Sets by Duplicate… - [Scheduled Retention Cleanup](https://www.datasyncpro.io/recipes/batch/scheduled-retention-cleanup): A #Batch is scheduled to run every weekend and delete Cases that are closed and more than two years old. - [Cross Org Data Migration](https://www.datasyncpro.io/recipes/batch/cross-org-data-migration): A Pipeline is configured as a sequentially ordered list of #Batch Executables that migrates data from one org to another while preserving… - [Migrate Salesforce Files Between Orgs](https://www.datasyncpro.io/recipes/batch/migrate-salesforce-files-between-orgs): A pipeline of multiple Batch Executables is built to migrate Salesforce Files (for a particular object identified by the… - [Incremental Data Backup to Big Objects](https://www.datasyncpro.io/recipes/batch/incremental-data-backup-to-big-objects): A big object is created as a backup store for Cases. A scheduled #Batch Executable inserts Case records into the big object on a recurring… - [Restore Records from Recycle Bin](https://www.datasyncpro.io/recipes/batch/restore-records-from-recycle-bin): A #Batch is configured to restore deleted Contacts in bulk from the Salesforce Recycle Bin. The Executable retrieves soft-deleted Contact… - [Mask Sensitive Data in Sandboxes](https://www.datasyncpro.io/recipes/batch/mask-sensitive-data-in-sandboxes): A #Batch Executable is configured to update Contacts in a sandbox, using DSP masking functions to obfuscate sensitive fields. - [Schedule Job Management](https://www.datasyncpro.io/recipes/batch/schedule-job-management) - [Self-Adaptive Trigger for Rollup Summary Calculations](https://www.datasyncpro.io/recipes/trigger/self-adaptive-trigger-for-rollup-summary-calculations): A Self-Adaptive #Trigger is configured on Account (before update) to perform in-memory rollup calculations on save using AGG functions.… - [Centralized Validation Rules with Self-Adaptive Trigger](https://www.datasyncpro.io/recipes/trigger/centralized-validation-rules-with-self-adaptive-trigger): A Self-Adaptive #Trigger is configured on Opportunity to enforce Owner and Stage assignment policies on save. It validates: 1. Renewal… - [Auto-Copy Child Records from a Source Reference](https://www.datasyncpro.io/recipes/trigger/auto-copy-child-records-from-a-source-reference): A #Trigger Executable is configured on Opportunity (after insert). When a new Opportunity is created with an Original Opportunity… - [Maintain Child Records from Parent Field Changes](https://www.datasyncpro.io/recipes/trigger/maintain-child-records-from-parent-field-changes): #Triggers are configured to manage territory-based sharing on Account. When the Territory Manager field is set or changes, DSP creates an… - [Auto-Create a Child Record on Parent Change](https://www.datasyncpro.io/recipes/trigger/auto-create-a-child-record-on-parent-change): A #Trigger Executable is configured on Case update so that when a Case is closed, it automatically creates a follow-up Task assigned to… - [Record Snapshot History with a Big Object](https://www.datasyncpro.io/recipes/trigger/record-snapshot-history-with-a-big-object): A Big Object is created to store record-level Quote change history, indexed by RecordID__c and LastModifiedDate__c. A #Trigger on Quote… - [Joiner + Scope Filter (Post Join)](https://www.datasyncpro.io/recipes/trigger/joiner-scope-filter-post-join): A #Trigger Executable is configured to run on Account update so that when the Owner changes, it automatically reassigns related open… - [The Trigger Flipper Pattern](https://www.datasyncpro.io/recipes/trigger/the-trigger-flipper-pattern): A custom checkbox flipper field is created on the Case object and paired with a before-save Self-Adaptive #Trigger Executable that always… - [Bulk Add Records to a Data List](https://www.datasyncpro.io/recipes/data-list/bulk-add-records-to-a-data-list): An Action Button is added to the Quote Line Items list to add or update Line Items. When clicked, it opens the Quote Pricebook’s related… - [Dynamic Filters](https://www.datasyncpro.io/recipes/data-list/dynamic-filters): Configure Dynamic Filters in the Query component to create context-aware WHERE clauses that resolve at runtime. Reference page record… - [List Action with Line Editor](https://www.datasyncpro.io/recipes/data-list/list-action-with-line-editor): An #Action Button is added to the Opportunity data list to close selected Opportunities, with a Pre-Action configured (Template Record… - [List Action with Template Record Editor](https://www.datasyncpro.io/recipes/data-list/list-action-with-template-record-editor): An #Action Button is added to the Case data list to close selected Cases, with Pre-Action (Template Record Editor) enabled. When clicked,… - [Pinned Column Filters](https://www.datasyncpro.io/recipes/data-list/pinned-column-filters) - [Restore a Record From Snapshot History](https://www.datasyncpro.io/recipes/data-list/restore-a-record-from-snapshot-history): A #Data List on the Quote record page queries Quote history stored in a Big Object using a dynamic filter, and provides an action to… - [Add Multiple Actions to a Data List](https://www.datasyncpro.io/recipes/data-list/add-multiple-actions-to-a-data-list): A #Data List is configured to show an Account’s open Opportunities as a related list. A Pipeline with multiple #Action Buttons is attached… - [Row Related Lists](https://www.datasyncpro.io/recipes/data-list/row-related-lists): A Pipeline of #Data List Executables is configured to dynamically surface related data for any Opportunity. A #Data List that shows… - [One-File-Per-Record File Management](https://www.datasyncpro.io/recipes/data-list/one-file-per-record-file-management): The Source Object ContentDocument ID Field is configured on a Data List to let users upload, preview, and update the related file directly… - [Mashup Related Data from a Remote Org](https://www.datasyncpro.io/recipes/data-list/mashup-related-data-from-a-remote-org): A #Data List is configured on the Account Lightning record page to display related Opportunities from a remote Salesforce org using a… - [Record Action with Pre-Action Review](https://www.datasyncpro.io/recipes/action-button/record-action-with-pre-action-review): An #Action Button is configured and placed on the Case record page to close the Case, with the Pre-Action defined. When users click the… - [Merge Duplicate Records](https://www.datasyncpro.io/recipes/action-button/merge-duplicate-records): An #Action Button is configured to let business users trigger automated deduplication with a single click. The Executable uses the Merge… - [Transformable, Record-Based Data Loader](https://www.datasyncpro.io/recipes/data-loader/transformable-record-based-data-loader): A #Data Loader is configured to upsert Leads from a CSV file using the Email field as the match key. Records with an existing Email are… - [Context-Aware Data Loader from Lightning Record Page](https://www.datasyncpro.io/recipes/data-loader/context-aware-data-loader-from-lightning-record-page): A #Data Loader is added to Account’s related Data List and configured to use $CONTEXT_RECORD_ID to reference the current Account record.… - [Build and Run a Query](https://www.datasyncpro.io/recipes/query/build-and-run-a-query): A complex SOQL query is built in the Query component using schema-aware UI prompts, without requiring users to know SOQL syntax. After… - [Column Filter](https://www.datasyncpro.io/recipes/query/column-filter): Use Column Filter to quickly narrow down the query results by applying a condition to the selected column. - [Inline Edit](https://www.datasyncpro.io/recipes/query/inline-edit): After running a query, double-click a cell to edit it inline—including picklist and reference fields. If multiple rows are selected, the… - [Manage Saved Queries](https://www.datasyncpro.io/recipes/query/manage-saved-queries): Click Save Query to store your SOQL for reuse. Later, use Select Query to pick a saved query (most-recent first); DSP parses it into the… - [Mass Edit](https://www.datasyncpro.io/recipes/query/mass-edit): After running a query, select multiple rows and open Mass Edit to update fields in a layout-style form. Enter values once, apply them to… - [Skip No-Op Updates](https://www.datasyncpro.io/recipes/general/skip-no-op-updates): A Skip Update If No Changes setting is enabled on a #Batch job that updates Contacts. During execution, DSP compares computed mapped… - [Variables for Named Expressions](https://www.datasyncpro.io/recipes/general/variables-for-named-expressions): A reusable Variable named TaxConfiguration uses VLOOKUP_RECORD to retrieve a single TaxConfiguration__c record based on the source… - [Export & Import Pipelines as Templates](https://www.datasyncpro.io/recipes/general/export-import-pipelines-as-templates): A Pipeline is created with a collection of #Batch Executables to move DSP configurations between orgs. Use Export to download the Pipeline… ## User Manual Product documentation: data model, setup, Apex extensions and REST API. - [Data Model](https://www.datasyncpro.io/user-manual/data-model): Data Sync Pro employs a sophisticated set of custom objects designed to support its core functionalities and log activities throughout the… - [Objects & Relationships](https://www.datasyncpro.io/user-manual/objects-relationships): The table below provides an overview of the core DSP configuration and log objects, including each object’s API name, parent… - [Direction-Based Executable](https://www.datasyncpro.io/user-manual/direction-based-executable): A Direction-Based Executable, integral to managed Salesforce data management, operates within a predefined Direction, establishing source… - [Connection-Based Executable](https://www.datasyncpro.io/user-manual/connection-based-executable): A Connection-Based Executable is tailored for operations that involve a singular connection rather than spanning directions. This type of… - [Package Installation](https://www.datasyncpro.io/user-manual/install-package): Install Data Sync Pro from the [Salesforce… - [Permissions](https://www.datasyncpro.io/user-manual/permissions): Data Sync Pro primarily utilizes Permission Sets as a fundamental mechanism for security control. This approach is supplemented with… - [Connection](https://www.datasyncpro.io/user-manual/connection): A Connection (pushtopics__Connection__c) defines the authentication configuration used to connect to a Salesforce org. A Connection can… - [Current Org](https://www.datasyncpro.io/user-manual/current-org): A Current Org Connection runs as the currently logged-in user and requires no additional credentials. All queries and DML operations… - [OAuth 2.0 (Refresh Token Flow)](https://www.datasyncpro.io/user-manual/oauth): DSP supports OAuth 2.0 authentication using Salesforce security features, including: Configure OAuth 2.0 Refresh Token Flow Authentication… - [New Direction](https://www.datasyncpro.io/user-manual/new-direction): 1. Navigate to Directions tab and click New. 2. Fill in Direction Details - [New Pipeline](https://www.datasyncpro.io/user-manual/new-pipeline): 1. Navigate to Pipelines tab and click New. 2. Enter a Pipeline Name and click Save. - [Pipeline Settings](https://www.datasyncpro.io/user-manual/pipeline-settings) - [New Executable](https://www.datasyncpro.io/user-manual/new-executable): Executables can be created from a Pipeline, Direction, or Connection. This guide uses a Pipeline with a configured Template Direction as… - [Executable Settings](https://www.datasyncpro.io/user-manual/executable-settings) - [#Batch Settings](https://www.datasyncpro.io/user-manual/batch-settings) - [#Data List Settings](https://www.datasyncpro.io/user-manual/data-list-settings) - [Apex Trigger Hookup](https://www.datasyncpro.io/user-manual/apex-trigger-hookup): Include pushtopics.TriggerServices.execute() in the triggers of both the source object and any objects involved in aggregations when AGG… - [#Trigger Settings](https://www.datasyncpro.io/user-manual/trigger-settings) - [#Action Button Settings](https://www.datasyncpro.io/user-manual/action-button-settings) - [#Data Loader Settings](https://www.datasyncpro.io/user-manual/data-loader-settings) - [Retrieve](https://www.datasyncpro.io/user-manual/process-retrieve): The Retrieve step defines the source query for an Executable. For #Batch , it selects the records to process. For #Data List , it selects… - [Preview](https://www.datasyncpro.io/user-manual/process-preview): The Preview step allow users view source records and inspect transformed values before execution. It does not influence which records are… - [Input](https://www.datasyncpro.io/user-manual/process-input): Input defines the data profile of an uploaded CSV file — how its columns map to fields in DSP. Scoping and Field Mappings use this… - [Scoping](https://www.datasyncpro.io/user-manual/process-scoping): Scoping refines source data in-memory — using filters and joins — to define the exact dataset that flows into downstream processing. It's… - [Match](https://www.datasyncpro.io/user-manual/process-match): Match links source records with their corresponding target records and determines how each action is applied. It underlies the Insert,… - [Mapping](https://www.datasyncpro.io/user-manual/process-mapping): Mapping defines, field-by-field, how each target field's value is calculated before the action runs. For every field on the target, the… - [Action](https://www.datasyncpro.io/user-manual/process-action): Action defines what operation runs against the target object once Scoping, Match, and Mapping have produced the records to be processed.… - [Verify](https://www.datasyncpro.io/user-manual/process-verify): Verify (available only in #Batch ) defines a query on the target object. After each Batch Execution, the batch log includes a Verify tab… - [New Schedule](https://www.datasyncpro.io/user-manual/new-schedule): 1. Navigate to Schedules tab and click New. 2. Fill in Schedule Details and click Save. - [Lightning Web Components](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder): This section shows how to add Data Sync Pro managed Lightning Components to a Lightning Page in Lightning App Builder. - [Pipeline Data Lists](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/data-lists): Drag the Pipeline Data Lists component from the left panel onto the Lightning Page , then enter the Pipeline API Name in the component… - [Pipeline Data List Quick Links](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/quick-links): Drag the Pipeline Data List Quick Links component from the left panel onto the Lightning Page , then enter the Pipeline API Name in the… - [Pipeline Batch Execution Button](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/batch-execution-button): Drag the Pipeline Batch Execution Button component from the left panel onto the Lightning Page , then enter the Pipeline API Name in the… - [Pipeline Action Buttons](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/action-buttons): Drag the Pipeline Action buttons component from the left panel onto the Lightning Page , then enter the Pipeline API Name in the component… - [Executable Data List](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/data-list): Drag the Executable Data List component from the left panel onto the Lightning Page , then enter the Executable API Name in the component… - [Executable Action Button](https://www.datasyncpro.io/user-manual/add-dsp-components-to-lightning-app-builder/action-button): Drag the Executable Action Button component from the left panel onto the Lightning Page , then enter the Executable API Name in the… - [Salesforce Data Transformer](https://www.datasyncpro.io/user-manual/salesforce-data-transformer): An Apex extension point that lets you embed custom transformation logic in a DSP formula when the built-in functions are not enough.… - [Execution Finalizer](https://www.datasyncpro.io/user-manual/execution-finalizer): An Apex extension point that runs custom logic immediately after an Execution completes — for both #Batch and #Data Loader . Implement it… - [Action Result Processor](https://www.datasyncpro.io/user-manual/action-result-processor): An Apex extension point that runs after the Action in each transaction. Implement it to react to action outcomes — custom logging,… - [Bulk Job Status Syncer](https://www.datasyncpro.io/user-manual/bulk-job-status-syncer): A built-in Apex class that polls Salesforce Bulk API and updates the corresponding Execution records as their asynchronous jobs complete.… - [Execute Pipeline and Executable via REST API](https://www.datasyncpro.io/user-manual/rest-api): Data Sync Pro exposes REST API endpoints that allow you to trigger pipeline and executable runs outside of the DSP UI. Any tool or system… ## Transformation Formulas Reference for every transformation formula function, with syntax and examples. - [ABS](https://www.datasyncpro.io/transformation/number/abs): Returns the absolute value of the specified number. - [ADD_DAYS](https://www.datasyncpro.io/transformation/date_time/add_days): Returns a Date or Datetime adjusted by the specified number of days, either forward (positive) or backward (negative), relative to the… - [ADD_MONTHS](https://www.datasyncpro.io/transformation/date_time/add_months): Returns a Date or Datetime adjusted by the specified number of months, either forward (positive) or backward (negative), relative to the… - [AND](https://www.datasyncpro.io/transformation/logical/and): Returns TRUE if all provided conditions are TRUE; otherwise, returns FALSE. - [BASE64_ENCODE](https://www.datasyncpro.io/transformation/type_processing/base64_encode): Returns the Base64-encoded representation of the provided string. - [BASE64_DECODE](https://www.datasyncpro.io/transformation/type_processing/base64_decode): Returns the original string by decoding the provided Base64-encoded input. If the input is not valid Base64, the function returns an error. - [BLANK_VALUE](https://www.datasyncpro.io/transformation/logical/blank_value): Returns a substitute value if the provided value is blank or empty; otherwise, returns the original value. - [BUSINESS_HOURS_ADD](https://www.datasyncpro.io/transformation/date_time/business_hours_add): Adds a time interval to a starting Datetime, counting only business hours. The result is returned in GMT. - [BUSINESS_HOURS_DIFF](https://www.datasyncpro.io/transformation/date_time/business_hours_diff): Calculates the difference in milliseconds between two Datetime values within business hours. Uses the default schedule if none is provided. - [BUSINESS_HOURS_IS_WITHIN](https://www.datasyncpro.io/transformation/date_time/business_hours_is_within): Returns TRUE if the specified Datetime is within defined business hours. - [BUSINESS_HOURS_NEXT_START_DATE](https://www.datasyncpro.io/transformation/date_time/business_hours_next_start_date): Returns the next Datetime business hours open after the specified target date; returns the target date itself if it's within business… - [CASE](https://www.datasyncpro.io/transformation/advanced/case): Returns the corresponding return_value for the first compare_value equal to the provided value. If no values match, returns… - [CEILING](https://www.datasyncpro.io/transformation/number/ceiling): Returns the smallest integer greater than or equal to the specified number. - [CHAR](https://www.datasyncpro.io/transformation/text/char): Returns the character corresponding to the specified ASCII code. - [CONTAINS](https://www.datasyncpro.io/transformation/logical/contains): Returns TRUE if the provided string contains any of the specified compare_strings. The comparison is case-sensitive. Otherwise, returns… - [CONTAINS_IGNORE_CASE](https://www.datasyncpro.io/transformation/logical/contains_ignore_case): Returns TRUE if the provided string contains any of the specified compare_strings, ignoring case differences. Otherwise, returns FALSE. - [COS](https://www.datasyncpro.io/transformation/number/cos): Returns the trigonometric cosine of the specified angle. - [DATE](https://www.datasyncpro.io/transformation/date_time/date): Returns a Date constructed from the specified year, month, and day components. - [DAY](https://www.datasyncpro.io/transformation/date_time/day): Returns the day of the month from a Date or Datetime in the context user's local time zone. - [DAYS_BETWEEN](https://www.datasyncpro.io/transformation/date_time/days_between): Returns the number of days between two provided Dates. The result is positive if end_date occurs after start_date, negative if it occurs… - [DAY_OF_YEAR](https://www.datasyncpro.io/transformation/date_time/day_of_year): Returns the day number within the year for a given date, ranging from 1 to 365 or 366. - [DISTANCE](https://www.datasyncpro.io/transformation/number/distance): Calculates the distance between two locations in kilometers. - [ENDS_WITH](https://www.datasyncpro.io/transformation/logical/ends_with): Returns TRUE if the provided string ends with any of the specified compare_strings. The comparison is case-sensitive. Otherwise, returns… - [ENDS_WITH_IGNORE_CASE](https://www.datasyncpro.io/transformation/logical/ends_with_ignore_case): Returns TRUE if the provided string ends with any of the specified compare_strings. The comparison is case-insensitive. Otherwise, returns… - [EQUALS](https://www.datasyncpro.io/transformation/logical/equals): Returns TRUE if the value matches any of the given compare_values (case-sensitive); otherwise, returns FALSE. - [EQUALS_IGNORE_CASE](https://www.datasyncpro.io/transformation/logical/equals_ignore_case): Returns TRUE if the value matches any of the given compare_values (case-insensitive); otherwise, returns FALSE. - [ERROR](https://www.datasyncpro.io/transformation/logical/error): Throws an exception with a custom message, optionally based on a specified condition. If a condition is provided, an exception is thrown… - [ERROR_VALUE](https://www.datasyncpro.io/transformation/logical/error_value): Returns the substitute value if evaluating the value results in an error; otherwise, returns the original value. - [ESCAPE_HTML4](https://www.datasyncpro.io/transformation/text/escape_html4): Returns a string with characters escaped according to HTML 4 standards. Converts special HTML characters into their corresponding HTML… - [ESCAPE_XML](https://www.datasyncpro.io/transformation/text/escape_xml): Returns a string with special XML characters replaced by their corresponding XML entities. Useful for safely including strings within XML… - [EVALUATE](https://www.datasyncpro.io/transformation/advanced/evaluate): Returns the value of a formula stored in a custom field, evaluated at runtime. Optionally retrieves fields from related records. - [EXP](https://www.datasyncpro.io/transformation/number/exp): Returns the value of e raised to the specified number. - [EVALUATED_FIELD_VALUE](https://www.datasyncpro.io/transformation/advanced/evaluated_field_value): Returns the evaluated value of a mapped target field that has already been processed prior to the current field’s evaluation within the… - [FLOOR](https://www.datasyncpro.io/transformation/number/floor): Returns the largest integer less than or equal to the specified number. - [FORMAT_DATETIME](https://www.datasyncpro.io/transformation/date_time/format_datetime): Formats a Date or Datetime as a string. - [FORMAT_JSON_TEMPLATE](https://www.datasyncpro.io/transformation/text/format_json_template): Parses and formats a JSON template string by resolving embedded expressions and merge fields into JSON-formatted output. - [FORMAT_STRING_TEMPLATE](https://www.datasyncpro.io/transformation/text/format_string_template): Parses and formats a template string by resolving embedded expressions and merge fields into standard string output. - [GET_PICKLIST_FIELD_OPTIONS](https://www.datasyncpro.io/transformation/advanced/get_picklist_field_options): Returns a list of options for the specified picklist field on a given object. - [HAS_DUPLICATES](https://www.datasyncpro.io/transformation/logical/has_duplicates): Returns TRUE if the current source record has duplicate records identified by Matching Rules configured in Salesforce Duplicate Management. - [HAS_PERMISSION](https://www.datasyncpro.io/transformation/logical/has_permission): Returns TRUE if the context user has any of the specified custom permissions. Otherwise, returns FALSE. - [HOUR](https://www.datasyncpro.io/transformation/date_time/hour): Extracts the hour (0–23) from a Datetime value, based on the context user’s local time zone. - [HOUR_GMT](https://www.datasyncpro.io/transformation/date_time/hour_gmt): Extracts the hour (0–23) from a Datetime value, based on GMT. - [HTML_TABLE](https://www.datasyncpro.io/transformation/advanced/html_table): Generates a formatted HTML table string from records of the specified source object, filtered by matching field-value pairs and an… - [LOG](https://www.datasyncpro.io/transformation/number/log): Returns the natural logarithm (base e) of the specified number. - [IF](https://www.datasyncpro.io/transformation/logical/if): Evaluates a logical condition. If TRUE, returns value_if_true. If FALSE, returns value_if_false_optional (if provided); otherwise returns… - [INDEX_OF](https://www.datasyncpro.io/transformation/text/index_of): Returns the zero-based index of the first occurrence of substring within string (case-sensitive). Optionally starts searching from… - [INDEX_OF_IGNORE_CASE](https://www.datasyncpro.io/transformation/text/index_of_ignore_case): Returns the zero-based index of the first occurrence of substring within string(case-insensitive). Optionally starts searching from… - [IS_ALL_LOWER_CASE](https://www.datasyncpro.io/transformation/logical/is_all_lower_case): Returns TRUE if the string contains only lowercase alphabetical characters; otherwise, returns FALSE. - [IS_ALL_UPPER_CASE](https://www.datasyncpro.io/transformation/logical/is_all_upper_case): Returns TRUE if the string contains only uppercase alphabetical characters; otherwise, returns FALSE. - [IS_ALPHA](https://www.datasyncpro.io/transformation/logical/is_alpha): Returns TRUE if the string contains only alphabetic characters; otherwise, returns FALSE. - [IS_ALPHA_SPACE](https://www.datasyncpro.io/transformation/logical/is_alpha_space): Returns TRUE if the string contains only alphabetic characters or spaces; otherwise, returns FALSE. - [IS_ALPHANUMERIC](https://www.datasyncpro.io/transformation/logical/is_alphanumeric): Returns TRUE if the string contains only alphabetic characters or numeric digits; otherwise, returns FALSE. - [IS_ALPHANUMERIC_SPACE](https://www.datasyncpro.io/transformation/logical/is_alphanumeric_space): Returns TRUE if the string contains only alphabetic characters, numeric digits, or spaces; otherwise, returns FALSE. - [IS_BLANK](https://www.datasyncpro.io/transformation/logical/is_blank): Returns TRUE if the value is blank (NULL, empty, or contains only whitespace); otherwise, returns FALSE. - [IS_CURRENT_USER_IN_OWNER_QUEUE](https://www.datasyncpro.io/transformation/logical/is_current_user_in_owner_queue): Returns TRUE if the current context user is a member of the record owner's queue. Otherwise, returns FALSE. - [IS_DECIMAL](https://www.datasyncpro.io/transformation/logical/is_decimal): Returns TRUE if the string represents a valid decimal number; otherwise, returns FALSE. - [IS_EMAIL_ADDRESS](https://www.datasyncpro.io/transformation/logical/is_email_address): Returns TRUE if the string is formatted as a valid email address; otherwise, returns FALSE. - [IS_FIRST_IN_ITERATION](https://www.datasyncpro.io/transformation/logical/is_first_in_iteration): Returns TRUE the first time a given combination of evaluated expression values occurs in the current iteration, and FALSE for any… - [IS_INSERT](https://www.datasyncpro.io/transformation/logical/is_insert): Returns TRUE if the current action is an Insert , otherwise, returns FALSE. In an Upsert process where Use Salesforce Upsert API is… - [IS_NUMERIC](https://www.datasyncpro.io/transformation/logical/is_numeric): Returns TRUE if the provided string contains only Unicode digits; otherwise, returns FALSE. - [IS_PHONE_NUMBER](https://www.datasyncpro.io/transformation/logical/is_phone_number): Returns TRUE if the provided string matches a valid phone number format; otherwise, returns FALSE. - [IS_PRODUCTION](https://www.datasyncpro.io/transformation/logical/is_production): Returns TRUE if the current execution is running in a Production environment, otherwise, returns FALSE. - [IS_TARGET_FIELD_ASSIGNED](https://www.datasyncpro.io/transformation/logical/is_target_field_assigned): Returns TRUE if the mapped target field has been processed and assigned a value. Returns FALSE if the field was skipped ($SKIP_ASSIGNMENT)… - [IS_UPDATE](https://www.datasyncpro.io/transformation/logical/is_update): Returns TRUE if the current action is an Update , otherwise, returns FALSE. In an Upsert process where Use Salesforce Upsert API is… - [JOIN_JSON](https://www.datasyncpro.io/transformation/advanced/join_json): Returns a filtered array containing objects from the provided JSON array that match the specified field name and field value criteria. - [JOIN_OBJECT_CONNECTION](https://www.datasyncpro.io/transformation/advanced/join_object_connection): Returns records from a specified object through a named connection or a related connection, filtered by joining field-value pairs, with an… - [JOIN_OBJECT_SOURCE](https://www.datasyncpro.io/transformation/advanced/join_object_source): Returns records from the specified object via the Source connection that match the provided joining field–value pairs, with an optional… - [JOIN_OBJECT_TARGET](https://www.datasyncpro.io/transformation/advanced/join_object_target): Returns records from a specified object via the Target connection that match the provided joining field–value pairs, with an optional… - [JSON_GET_FIELD_VALUES](https://www.datasyncpro.io/transformation/advanced/json_get_field_values): Returns a list containing the value of the specified field from each map in the provided list. Optionally excludes null values from the… - [JSON_SERIALIZE](https://www.datasyncpro.io/transformation/advanced/json_serialize): Returns the provided value as a JSON string. - [JSON_SERIALIZE_PRETTY](https://www.datasyncpro.io/transformation/advanced/json_serialize_pretty): Serializes the provided object into a JSON string with pretty-printed formatting. - [LAST_INDEX_OF](https://www.datasyncpro.io/transformation/text/last_index_of): Returns the starting position (zero-based index) of the last occurrence of substring within string. The search is case-sensitive. If… - [LAST_INDEX_OF_IGNORE_CASE](https://www.datasyncpro.io/transformation/text/last_index_of_ignore_case): Returns the starting position (zero-based index) of the last occurrence of substring within string, ignoring case differences. If… - [LEFT](https://www.datasyncpro.io/transformation/text/left): Returns a substring containing the specified number of characters from the beginning (left side) of the provided string. If num_chars… - [LEN](https://www.datasyncpro.io/transformation/text/len): Returns the number of characters in the provided string. - [MATCHES](https://www.datasyncpro.io/transformation/advanced/matches): Returns TRUE if the provided string matches any of the specified regular expressions; otherwise, returns FALSE. - [MAP_VALUE_CONTAINS](https://www.datasyncpro.io/transformation/advanced/map_value_contains): Returns the corresponding return_value for the first compare_substring found within the provided string (case-sensitive). If no substrings… - [MAP_VALUE_CONTAINS_IGNORE_CASE](https://www.datasyncpro.io/transformation/advanced/map_value_contains_ignore_case): Returns the corresponding return value for the first compare substring found within the provided string, performing case-insensitive… - [MAP_VALUE_STARTS_WITH](https://www.datasyncpro.io/transformation/advanced/map_value_starts_with): Returns the corresponding return_value for the first compare_substring that matches the beginning of the provided string (case-sensitive).… - [MAP_VALUE_STARTS_WITH_IGNORE_CASE](https://www.datasyncpro.io/transformation/advanced/map_value_starts_with_ignore_case): Returns the corresponding return_value for the first compare_substring that matches the beginning of the provided string, performing… - [MAX](https://www.datasyncpro.io/transformation/number/max): Returns the largest number from the given set of numbers. - [MILLISECOND](https://www.datasyncpro.io/transformation/date_time/millisecond): Extracts the millisecond (0–999) from a Datetime value. - [MIN](https://www.datasyncpro.io/transformation/number/min): Returns the smallest number from the given set of numbers. - [MINUTE](https://www.datasyncpro.io/transformation/date_time/minute): Extracts the minute (0–59) from a Datetime value, based on the context user’s local time zone. - [MINUTE_GMT](https://www.datasyncpro.io/transformation/date_time/minute_gmt): Extracts the minute (0–59) from a Datetime value, based on GMT. - [MONTH](https://www.datasyncpro.io/transformation/date_time/month): Returns the month component (1=January) from a Date or Datetime, evaluated in the context user's local time zone. - [NOT](https://www.datasyncpro.io/transformation/logical/not): Returns TRUE if the provided logical value evaluates to FALSE; otherwise, returns FALSE. - [NOW](https://www.datasyncpro.io/transformation/date_time/now): Returns the current Datetime based on the context user's local time zone. - [OR](https://www.datasyncpro.io/transformation/logical/or): Returns TRUE if any provided logical condition evaluates to TRUE; otherwise, returns FALSE. - [OPERATORS](https://www.datasyncpro.io/transformation/operators/operators) - [RANDOMIZE](https://www.datasyncpro.io/transformation/randomization/randomize): Returns a randomized value of the same data type as the provided input. Supports text, number, date, and boolean values. - [RANDOM_ITEM](https://www.datasyncpro.io/transformation/randomization/random_item): Returns a random item from the given set of items. - [REPLACE](https://www.datasyncpro.io/transformation/text/replace): Returns a new string by replacing all case-sensitive occurrences of a target substring in the original string with a specified replacement. - [REPLACE_ALL](https://www.datasyncpro.io/transformation/text/replace_all): Returns a new string in which all occurrences matching the provided regular expression (regex) within the original string are replaced by… - [REPLACE_FIRST](https://www.datasyncpro.io/transformation/text/replace_first): Returns a new string in which only the first occurrence matching the provided regular expression (regex) within the original string is… - [RIGHT](https://www.datasyncpro.io/transformation/text/right): Returns a substring containing the specified number of characters from the end (right side) of the provided string. - [ROUND](https://www.datasyncpro.io/transformation/number/round): Returns the value rounded to the nearest integer using half-even rounding. - [SCRAMBLE](https://www.datasyncpro.io/transformation/randomization/scramble): Shuffle the items in the current batch and select one at random. - [SECOND](https://www.datasyncpro.io/transformation/date_time/second): Extracts the second (0–59) from a Datetime value. - [SET_SCALE](https://www.datasyncpro.io/transformation/number/set_scale): Rounds a number to the specified number of decimal places using half-even rounding. - [SIN](https://www.datasyncpro.io/transformation/number/sin): Returns the trigonometric sine of the specified angle. - [SKIP_BLANK_VALUE](https://www.datasyncpro.io/transformation/logical/skip_blank_value): Returns the provided value if it is not blank. If the value is blank (null, empty, or whitespace), returns $SKIP_ASSIGNMENT. - [SPLIT](https://www.datasyncpro.io/transformation/text/split): Returns an array of substrings by splitting a string using a regular expression delimiter. - [STARTS_WITH](https://www.datasyncpro.io/transformation/logical/starts_with): Returns TRUE if the provided string starts with any of the specified compare_strings (case-sensitive); otherwise, returns FALSE. - [STARTS_WITH_IGNORE_CASE](https://www.datasyncpro.io/transformation/logical/starts_with_ignore_case): Returns TRUE if the provided string starts with any of the specified compare_strings(case-insensitive); otherwise, returns FALSE. - [STRING_JOIN](https://www.datasyncpro.io/transformation/text/string_join): Returns a single concatenated string formed by joining multiple provided objects using the specified separator string. Each object is… - [SUBSTRING](https://www.datasyncpro.io/transformation/text/substring): Returns a substring extracted from the provided string, beginning at the start_index (inclusive) and ending at the end_index (exclusive).… - [SUBSTRING_AFTER](https://www.datasyncpro.io/transformation/text/substring_after): Returns the substring that occurs after the first occurrence of the specified separator within the provided string. If the separator is… - [SUBSTRING_AFTER_LAST](https://www.datasyncpro.io/transformation/text/substring_after_last): Returns the substring that occurs after the last occurrence of the specified separator within the provided string. If the separator is not… - [SUBSTRING_BEFORE](https://www.datasyncpro.io/transformation/text/substring_before): Returns the substring that occurs before the first occurrence of the specified separator within the provided string. If the separator is… - [SUBSTRING_BEFORE_LAST](https://www.datasyncpro.io/transformation/text/substring_before_last): Returns the substring that occurs before the last occurrence of the specified separator within the provided string. If the separator is… - [SUBSTRING_BETWEEN](https://www.datasyncpro.io/transformation/text/substring_between): Returns the substring found between the first occurrences of the specified open and close substrings within the provided string. If either… - [TAN](https://www.datasyncpro.io/transformation/number/tan): Returns the trigonometric tangent of the specified angle. - [TRIGGER_FLIPPER](https://www.datasyncpro.io/transformation/logical/trigger_flipper): This function is used within a before insert or before update trigger to track whether a specific checkbox field (defaulting to FALSE )… - [TRIGGER_IS_AFTER](https://www.datasyncpro.io/transformation/logical/trigger_is_after): Returns TRUE if the current trigger context is an "after" event (after insert, after update, after delete or after undelete); otherwise,… - [TRIGGER_IS_BEFORE](https://www.datasyncpro.io/transformation/logical/trigger_is_before): Returns TRUE if the current trigger context is a "before" event (before insert, before update, or before delete); otherwise, returns FALSE. - [TRIGGER_IS_FLIPPED](https://www.datasyncpro.io/transformation/logical/trigger_is_flipped): Returns TRUE if the specified field's value has changed in the current transaction (i.e., the field was updated or flipped from its… - [TRIGGER_IS_CHANGED](https://www.datasyncpro.io/transformation/logical/trigger_is_changed): Returns TRUE if any of the specified fields have been modified from their previous values during the update DML operation; otherwise,… - [TRIGGER_IS_CHANGED_FROM](https://www.datasyncpro.io/transformation/logical/trigger_is_changed_from): Returns TRUE if the specified field's value has changed from any of the provided old values in the current trigger context; otherwise,… - [TRIGGER_IS_CHANGED_TO](https://www.datasyncpro.io/transformation/logical/trigger_is_changed_to): Returns TRUE if the specified field's value has changed to any of the provided new values in the current trigger context; otherwise,… - [TRIGGER_IS_DELETE](https://www.datasyncpro.io/transformation/logical/trigger_is_delete): Returns TRUE if the current trigger context involves a delete operation (before delete or after delete); otherwise, returns FALSE. - [TRIGGER_IS_INSERT](https://www.datasyncpro.io/transformation/logical/trigger_is_insert): Returns TRUE if the current trigger context involves an insert operation (before insert or after insert); otherwise, returns FALSE. - [TRIGGER_IS_UNDELETE](https://www.datasyncpro.io/transformation/logical/trigger_is_undelete): Returns TRUE if the current trigger context is an undelete operation (after undelete); otherwise, returns FALSE. - [TRIGGER_IS_UPDATE](https://www.datasyncpro.io/transformation/logical/trigger_is_update): Returns TRUE if the current trigger context involves an update operation (before update or after update); otherwise, returns FALSE. - [TRIGGER_OLD_VALUE](https://www.datasyncpro.io/transformation/trigger/trigger_old_value): Returns the previous value of the specified field in an Update DML operation. - [TODAY](https://www.datasyncpro.io/transformation/date_time/today): Returns the current date in the context user's local time zone. - [TO_BLOB](https://www.datasyncpro.io/transformation/text/to_blob): Converts a string (String) into an Apex Blob type. If the input cannot be converted, the function throws an error. - [TO_BOOLEAN](https://www.datasyncpro.io/transformation/text/to_boolean): Converts a string into a Boolean value. If the input cannot be converted, the function returns an error. - [TO_DATE](https://www.datasyncpro.io/transformation/date_time/to_date): Converts a String or Datetime value into a Date by extracting the calendar date from the input. If the input cannot be parsed, an error is… - [TO_DATETIME](https://www.datasyncpro.io/transformation/date_time/to_datetime): Converts a string in a recognized date/time format into a Datetime value. The result is returned in GMT. If the input string cannot be… - [TO_DECIMAL](https://www.datasyncpro.io/transformation/number/to_decimal): Converts the input value to a Decimal. If the input cannot be converted, the function throws an error. - [TO_INTEGER](https://www.datasyncpro.io/transformation/number/to_integer): Converts a value to an Integer. If the input cannot be converted, the function throws an error. - [TO_LOWER_CASE](https://www.datasyncpro.io/transformation/text/to_lower_case): Converts all letters in the specified text to lowercase. - [TO_PDF](https://www.datasyncpro.io/transformation/advanced/to_pdf): Creates a binary object out of the given string, encoding it as a PDF file. - [TO_STRING](https://www.datasyncpro.io/transformation/text/to_string): Converts the specified value into an unformatted text string. - [TO_START_OF_MONTH](https://www.datasyncpro.io/transformation/date_time/to_start_of_month): Returns the first day of the month for a specified date. - [TO_START_OF_WEEK](https://www.datasyncpro.io/transformation/date_time/to_start_of_week): Returns the date representing the first day of the week for a specified date. - [TO_TIME](https://www.datasyncpro.io/transformation/date_time/to_time): Converts a time string from the context user's local time zone to a Time value in GMT. - [TO_UPPER_CASE](https://www.datasyncpro.io/transformation/text/to_upper_case): Converts all letters in the specified text to uppercase. - [TRIM](https://www.datasyncpro.io/transformation/text/trim): Returns a string with leading and trailing whitespace removed. - [VALUE_IN](https://www.datasyncpro.io/transformation/logical/value_in): Returns TRUE if the provided value matches any of the specified compare values; otherwise, returns FALSE. - [VLOOKUP](https://www.datasyncpro.io/transformation/advanced/vlookup): Performs a dynamic lookup on a Salesforce object and returns the specified field value(including relational fields up to 5 levels), from… - [VLOOKUP_ALL](https://www.datasyncpro.io/transformation/advanced/vlookup_all): Queries the specified object and returns the designated fields (plus the record Id and lookup field) from all records that match one or… - [VLOOKUP_CONNECTION](https://www.datasyncpro.io/transformation/advanced/vlookup_connection): Performs a dynamic lookup on a Salesforce object through a connection and returns the specified field value (including relational fields… - [VLOOKUP_RECORD](https://www.datasyncpro.io/transformation/advanced/vlookup_record): Performs a dynamic lookup on a Salesforce object and returns the full Object record from the first record that matches the provided… - [VLOOKUP_RECORD_CONNECTION](https://www.datasyncpro.io/transformation/advanced/vlookup_record_connection): Performs a dynamic lookup on a Salesforce object through a connection and returns the full Object record from the first record that… - [YEAR](https://www.datasyncpro.io/transformation/date_time/year): Returns the year component from a Date or Date Time, evaluated in the context user's local time zone. - [YESTERDAY](https://www.datasyncpro.io/transformation/date_time/yesterday): Returns the date value representing yesterday, evaluated in the context user's local time zone. - [AGG_AVG](https://www.datasyncpro.io/transformation/advanced/agg_avg): Performs a dynamic aggregation on a specified Salesforce object and returns the average of a selected numeric field from all records that… - [AGG_COUNT](https://www.datasyncpro.io/transformation/advanced/agg_count): Performs a dynamic aggregation on a specified Salesforce object and returns the count of records matching the provided conditions. - [AGG_COUNT_DISTINCT](https://www.datasyncpro.io/transformation/advanced/agg_count_distinct): Performs a dynamic aggregation on a specified Salesforce object and returns the count of unique (distinct) values in a selected field for… - [AGG_MAX](https://www.datasyncpro.io/transformation/advanced/agg_max): Performs a dynamic aggregation on a specified Salesforce object and returns the maximum value of a specified field among all matching… - [AGG_MIN](https://www.datasyncpro.io/transformation/advanced/agg_min): Performs a dynamic aggregation on a specified Salesforce object and returns the minimum value of a specified field among all matching… - [AGG_SUM](https://www.datasyncpro.io/transformation/advanced/agg_sum): Performs a dynamic aggregation on a specified Salesforce object and returns the sum of the selected numeric field from all records that… - [APEX CLASS](https://www.datasyncpro.io/transformation/apex_class/apex_class): pushtopics.SalesforceDataTransformer is a global interface that enables custom Apex logic within DSP formulas, extending the package’s… - [$JOINER](https://www.datasyncpro.io/transformation/joiner): After using JOIN_OBJECT_CONNECTION or JOIN_JSON, the $JOINER function becomes available in the Mapping stage. Returns the value of the… - [AGGREGATION GENERAL](https://www.datasyncpro.io/transformation/aggregate_general): DSP optimizes performance by reducing SOQL queries, combining multiple mergeable aggregate functions into a single query whenever possible. ## FAQs Frequently asked questions about Data Sync Pro. - [What is Data Sync Pro?](https://www.datasyncpro.io/faqs/general/what-is-data-sync-pro): Data Sync Pro (DSP) is a powerful, Salesforce-native, rules-driven engine with enforced modularity that streamlines business processes,… - [What are the five engines?](https://www.datasyncpro.io/faqs/general/what-are-the-five-engines): Data Sync Pro (DSP) unifies five purpose-built engines that span data processing, automation, and user interaction — all sharing the same… - [Why does rules-driven, record-based, enforced modularity define the future of enterprise applications?](https://www.datasyncpro.io/faqs/general/why-does-rules-driven-record-based-enforced-modularity-define-the-future-of-enterprise-applications): Most enterprise applications start clean and degrade over time. Cross-cutting concerns get reimplemented inconsistently, logic grows deep… - [Why Data Sync Pro?](https://www.datasyncpro.io/faqs/general/why-data-sync-pro): Most enterprise applications start clean and degrade over time — logic grows deep and nested, and module boundaries blur with every… - [Does DSP process any data outside the installed org?](https://www.datasyncpro.io/faqs/general/does-dsp-process-any-data-outside-the-installed-org): No. Data Sync Pro processes data entirely within the installed org, using native Salesforce Apex. When configured for org-to-org… - [How does DSP ensure security?](https://www.datasyncpro.io/faqs/general/how-does-dsp-ensure-security): Data Sync Pro runs entirely within your Salesforce org and uses Salesforce's native security model. Data Processing — All processing runs… - [What are the three core user personas in Data Sync Pro?](https://www.datasyncpro.io/faqs/general/what-are-the-three-core-user-personas-in-data-sync-pro): Data Sync Pro defines three core user personas, each managed through a dedicated permission set that controls access and actions: DSP:… - [How do DSP's rules engines compare?](https://www.datasyncpro.io/faqs/general/how-do-dsps-rules-engines-compare): All DSP rules engines follow the same structured process — defined input, transformation logic, and an action on the target. What sets… - [How much training is required to start building in Data Sync Pro?](https://www.datasyncpro.io/faqs/general/how-much-training-is-required-to-start-building-in-data-sync-pro): Very little. DSP is built natively on Salesforce (Apex and LWC) and introduces just seven intuitive configuration objects — Connection,… - [Does DSP development adhere to the Software Development Life Cycle (SDLC)?](https://www.datasyncpro.io/faqs/general/does-dsp-development-adhere-to-the-software-development-life-cycle-sdlc): Yes. Data Sync Pro supports SDLC-aligned deployments through two options: 1. Manual JSON Export & Import (best for SMBs) Executables and… - [Is DSP subject to Salesforce governor limits?](https://www.datasyncpro.io/faqs/general/is-dsp-subject-to-salesforce-governor-limits): Yes, DSP runs entirely within your Salesforce org and is therefore subject to Salesforce governor limits. - [What is a batch job in general?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-is-a-batch-job-in-general) - [Why #Batch?](https://www.datasyncpro.io/faqs/rules-engines/batch/why-batch) - [What technologies are used to build the #Batch engine?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-technologies-are-used-to-build-the-batch-engine) - [What are the common use cases for #Batch?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-are-the-common-use-cases-for-batch) - [How efficiently does #Batch handle large data volumes?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-efficiently-does-batch-handle-large-data-volumes) - [Where do I create a #Batch Executable?](https://www.datasyncpro.io/faqs/rules-engines/batch/where-do-i-create-a-batch-executable) - [Does #Batch only support cross-org data migrations?](https://www.datasyncpro.io/faqs/rules-engines/batch/does-batch-only-support-cross-org-data-migrations) - [What permissions are required to execute a #Batch?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-permissions-are-required-to-execute-a-batch) - [What is the maximum dataset size that a DSP batch job can process?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-is-the-maximum-dataset-size-that-a-dsp-batch-job-can-process) - [What is the maximum batch size that can be set?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-is-the-maximum-batch-size-that-can-be-set) - [How can I chain multiple batch Executables to run in a specific sequence?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-can-i-chain-multiple-batch-executables-to-run-in-a-specific-sequence) - [How can I schedule Batch jobs?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-can-i-schedule-batch-jobs) - [Can a Pipeline execution be stopped if one of its Executables fails?](https://www.datasyncpro.io/faqs/rules-engines/batch/can-a-pipeline-execution-be-stopped-if-one-of-its-executables-fails) - [Can I apply a common SOQL filter to all Executables in a Pipeline?](https://www.datasyncpro.io/faqs/rules-engines/batch/can-i-apply-a-common-soql-filter-to-all-executables-in-a-pipeline) - [How do I easily create Batch Executables for parent–child data syncs?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-do-i-easily-create-batch-executables-for-parentchild-data-syncs) - [How are logs tracked for running a #Batch Executable?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-are-logs-tracked-for-running-a-batch-executable) - [Does DSP allow re-execution of failed batches?](https://www.datasyncpro.io/faqs/rules-engines/batch/does-dsp-allow-re-execution-of-failed-batches) - [Is it possible to revert the changes made a batch execution?](https://www.datasyncpro.io/faqs/rules-engines/batch/is-it-possible-to-revert-the-changes-made-a-batch-execution) - [How do I implement incremental retrieval?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-do-i-implement-incremental-retrieval) - [What should I consider before enabling Bulk API?](https://www.datasyncpro.io/faqs/rules-engines/batch/what-should-i-consider-before-enabling-bulk-api) - [How can I set up notifications for completed batch executions?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-can-i-set-up-notifications-for-completed-batch-executions) - [How can I test a Batch Executable on a small sample before running it on the full dataset?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-can-i-test-a-batch-executable-on-a-small-sample-before-running-it-on-the-full-dataset) - [How should I structure a complex Batch job with multiple actions?](https://www.datasyncpro.io/faqs/rules-engines/batch/how-should-i-structure-a-complex-batch-job-with-multiple-actions) - [What is a #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/what-is-a-data-list) - [Why #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/why-data-list) - [How do I create an Actionable #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/how-do-i-create-an-actionable-data-list) - [What permissions are needed to use a #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/what-permissions-are-needed-to-use-a-data-list) - [How can I configure row's related lists in a #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/how-can-i-configure-rows-related-lists-in-a-data-list) - [Can I run a #Data Loader from a #Data List?](https://www.datasyncpro.io/faqs/rules-engines/data-list/can-i-run-a-data-loader-from-a-data-list) - [How do I use the Pipeline Data Lists component inside a custom LWC?](https://www.datasyncpro.io/faqs/rules-engines/data-list/how-do-i-use-the-pipeline-data-lists-component-inside-a-custom-lwc) - [How do I make a #Data List scroll horizontally?](https://www.datasyncpro.io/faqs/rules-engines/data-list/how-do-i-make-a-data-list-scroll-horizontally) - [What is an #Action Button?](https://www.datasyncpro.io/faqs/rules-engines/action-button/what-is-an-action-button) - [Why #Action Button?](https://www.datasyncpro.io/faqs/rules-engines/action-button/why-action-button) - [How can I execute multiple actions from a single #Action Button?](https://www.datasyncpro.io/faqs/rules-engines/action-button/how-can-i-execute-multiple-actions-from-a-single-action-button) - [What permissions are needed to use a #Action Button?](https://www.datasyncpro.io/faqs/rules-engines/action-button/what-permissions-are-needed-to-use-a-action-button) - [What is a #Data Loader?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/what-is-a-data-loader) - [How do I create a #Data Loader?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/how-do-i-create-a-data-loader) - [What permissions are needed to use a #Data Loader?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/what-permissions-are-needed-to-use-a-data-loader) - [Does #Data Loader only support CSV file uploads?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/does-data-loader-only-support-csv-file-uploads) - [How can I retry only the failed data load batches without reloading the whole dataset?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/how-can-i-retry-only-the-failed-data-load-batches-without-reloading-the-whole-dataset) - [Is it possible to revert the changes made a data load?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/is-it-possible-to-revert-the-changes-made-a-data-load) - [Can I make a load fail if a column is missing from the source file?](https://www.datasyncpro.io/faqs/rules-engines/data-loader/can-i-make-a-load-fail-if-a-column-is-missing-from-the-source-file) - [What is a #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/what-is-a-trigger) - [Why #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/why-trigger) - [What is a Self-Adaptive #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/what-is-a-self-adaptive-trigger) - [How can I calculate rollup summaries using a Self-Adaptive #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/how-can-i-calculate-rollup-summaries-using-a-self-adaptive-trigger) - [What is a #Trigger Action?](https://www.datasyncpro.io/faqs/rules-engines/trigger/what-is-a-trigger-action) - [How can I prevent recursive execution in update triggers?](https://www.datasyncpro.io/faqs/rules-engines/trigger/how-can-i-prevent-recursive-execution-in-update-triggers) - [How can I manage the execution order of #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/how-can-i-manage-the-execution-order-of-trigger) - [How do I manage user access to a #Trigger?](https://www.datasyncpro.io/faqs/rules-engines/trigger/how-do-i-manage-user-access-to-a-trigger) - [Salesforce requires at least one line of test coverage in an Apex Trigger—how can I achieve this?](https://www.datasyncpro.io/faqs/rules-engines/trigger/salesforce-requires-at-least-one-line-of-test-coverage-in-an-apex-triggerhow-can-i-achieve-this) - [What is the TRIGGER_FLIPPER pattern?](https://www.datasyncpro.io/faqs/rules-engines/trigger/what-is-the-triggerflipper-pattern) - [What does Retrieve do?](https://www.datasyncpro.io/faqs/processes/retrieve/what-does-retrieve-do): The Retrieve step defines how source data is queried from a connected Salesforce org. It's the entry point for record selection in both… - [How do I preview a source record with its transformed values before execution?](https://www.datasyncpro.io/faqs/processes/retrieve/how-do-i-preview-a-source-record-with-its-transformed-values-before-execution): Go to the Retrieve or Preview section and click a source record. This opens a detail view where you can see: Source: all field values from… - [What is the purpose of the 'Additional Retrieve Criteria' field on a Pipeline?](https://www.datasyncpro.io/faqs/processes/retrieve/what-is-the-purpose-of-the-additional-retrieve-criteria-field-on-a-pipeline): It defines a shared SOQL filter applied to all Executables in the Pipeline. This ensures consistent data retrieval while letting each… - [What does Preview do?](https://www.datasyncpro.io/faqs/processes/preview/what-does-preview-do): Preview works similarly to Retrieve , since both run a SOQL query to fetch source data. The difference lies in their purpose across rules… - [How do I preview a source record with its transformed values before execution?](https://www.datasyncpro.io/faqs/processes/preview/how-do-i-preview-a-source-record-with-its-transformed-values-before-execution): Go to the Retrieve or Preview section and click a source record. This opens a detail view where you can see: Source: all field values from… - [What is the difference between Preview and Retrieve?](https://www.datasyncpro.io/faqs/processes/preview/what-is-the-difference-between-preview-and-retrieve): Both Preview and Retrieve run a SOQL query to fetch source data, but they serve different roles: Retrieve (used in #Batch and #Data List )… - [What does Input do?](https://www.datasyncpro.io/faqs/processes/input/what-does-input-do): In #Data Loader, Input defines the data profile of an uploaded CSV file — specifying how its columns map to fields in DSP. This structure… - [How do I define an input data profile in Data Loader?](https://www.datasyncpro.io/faqs/processes/input/how-do-i-define-an-input-data-profile-in-data-loader): In #Data Loader , you can define an input data profile in three ways: During creation: Upload a CSV template file when creating a new Data… - [What naming requirements apply to #Data Loader columns?](https://www.datasyncpro.io/faqs/processes/input/what-naming-requirements-apply-to-data-loader-columns): In #Data Loader , column names must follow a specific format so they can be referenced in formulas and expressions within Scoping and… - [What does Scoping do?](https://www.datasyncpro.io/faqs/processes/scoping/what-does-scoping-do): Scoping refines source data in-memory — using filters and joins — to define the exact dataset that flows into downstream processing. It's… - [What is a Scope Filter?](https://www.datasyncpro.io/faqs/processes/scoping/what-is-a-scope-filter): A Scope Filter is a formula-based condition used in the Scoping step to decide which source records continue through execution. A Scope… - [How can I join the source data with an additional data set?](https://www.datasyncpro.io/faqs/processes/scoping/how-can-i-join-the-source-data-with-an-additional-data-set): Joiners are configured in the Scoping section to combine source records with an additional dataset for advanced processing. You can use… - [What does Match do?](https://www.datasyncpro.io/faqs/processes/match/what-does-match-do): Match links source records with their corresponding target records, determining how each action should be applied. It's central to Insert,… - [What happens if a source record matches multiple target records in an action?](https://www.datasyncpro.io/faqs/processes/match/what-happens-if-a-source-record-matches-multiple-target-records-in-an-action): By default, DSP applies the action to all matched target records. When a Principal Matched Record Selection Rule is defined, the action… - [What happens if a source record matches existing target records during an Insert?](https://www.datasyncpro.io/faqs/processes/match/what-happens-if-a-source-record-matches-existing-target-records-during-an-insert): If a Target Matching Field is defined and a match is found, DSP skips the insert to avoid duplicates. - [Does DSP still run the Match step when 'Use Salesforce Upsert API' is enabled in an Upsert process?](https://www.datasyncpro.io/faqs/processes/match/does-dsp-still-run-the-match-step-when-use-salesforce-upsert-api-is-enabled-in-an-upsert-process): No. When this option is enabled, DSP skips its own Match step and relies on Salesforce's Upsert API to decide whether to insert or update.… - [How do I match target records via multiple fields?](https://www.datasyncpro.io/faqs/processes/match/how-do-i-match-target-records-via-multiple-fields): To match target records using multiple fields, specify Target Matching Field as Id and use a VLOOKUP function in the field's mapping.… - [How does DSP handle multiple source records matching a single target record?](https://www.datasyncpro.io/faqs/processes/match/how-does-dsp-handle-multiple-source-records-matching-a-single-target-record): DSP processes the target record iteratively — applying transformations from each matching source record in turn. Later updates overwrite… - [How does Match determine the principal(master) record in a Merge process?](https://www.datasyncpro.io/faqs/processes/match/how-does-match-determine-the-principalmaster-record-in-a-merge-process): In Merge operations, DSP applies the Principal Matched Record Selection Rule to decide which record becomes the principal (master). This… - [Can I match target records based on a relational field?](https://www.datasyncpro.io/faqs/processes/match/can-i-match-target-records-based-on-a-relational-field): Yes, simply set the Target Matching Field to a relational field, such as Parent__r.Key__c . - [What is the purpose of the 'Additional Target Matching Criteria' field?](https://www.datasyncpro.io/faqs/processes/match/what-is-the-purpose-of-the-additional-target-matching-criteria-field): The Additional Target Matching Criteria field lets you append extra SOQL conditions—such as filters or ORDER BY clauses—to the query DSP… - [What is the purpose of the 'Matched Records Sorting Components' field?](https://www.datasyncpro.io/faqs/processes/match/what-is-the-purpose-of-the-matched-records-sorting-components-field): The Matched Records Sorting Components field controls how DSP orders matched target records when multiple matches exist. It accepts… - [What does Mapping do?](https://www.datasyncpro.io/faqs/processes/mapping/what-does-mapping-do): Mapping defines, field-by-field, how each target field's value is calculated before the action runs. For every field on the target, the… - [How can I manage data relationships?](https://www.datasyncpro.io/faqs/transformation/how-can-i-manage-data-relationships): Reference fields can be populated in several ways: Use the record ID directly if known. For Record Types, assign either the Developer Name… - [How do I control the order of field mappings' evaluation?](https://www.datasyncpro.io/faqs/processes/mapping/how-do-i-control-the-order-of-field-mappings-evaluation): You can control evaluation order using the Seq No. column in Field Mappings In the Executable, open the Related tab. Find the Field… - [What does the Add Default button do?](https://www.datasyncpro.io/faqs/processes/mapping/what-does-the-add-default-button-do): Add Default auto-maps any unmapped target fields to source fields that share the same name and a compatible data type. After the suggested… - [What does the Clear Mappings button do?](https://www.datasyncpro.io/faqs/processes/mapping/what-does-the-clear-mappings-button-do): Clear Mappings removes all field mappings except the Target Matching Field . After clearing, click Save to confirm and apply the changes. - [What does the Unmapped Source Fields button do?](https://www.datasyncpro.io/faqs/processes/mapping/what-does-the-unmapped-source-fields-button-do): Unmapped Source Fields highlights source fields that aren't yet mapped to any target field — making it easy to review what's been left out… - [What is the purpose of the 'Refresh' button?](https://www.datasyncpro.io/faqs/processes/mapping/what-is-the-purpose-of-the-refresh-button): Refresh updates the Mapping section with the latest source and target fields, making any newly available fields ready to map. It also… - [What does the Save button do?](https://www.datasyncpro.io/faqs/processes/mapping/what-does-the-save-button-do): Save validates and stores all mappings in the Mapping section. If any mapping is invalid, an error icon appears next to it — hover over… - [What does Action do?](https://www.datasyncpro.io/faqs/processes/action/what-does-action-do): Action is the final step in an Executable — it defines what operation runs against the target object once Scoping , Match , and Mapping… - [Which actions are supported?](https://www.datasyncpro.io/faqs/processes/action/which-actions-are-supported): DSP supports a wide range of standard DML operations and Apex-based actions, providing powerful flexibility for Salesforce data processing… - [How can I avoid creating duplicate records if the target already exists?](https://www.datasyncpro.io/faqs/processes/action/how-can-i-avoid-creating-duplicate-records-if-the-target-already-exists): Set a Target Matching Field along with its mapping. DSP will check for existing target records before inserting and skip the Insert when a… - [How can I implement delta updates?](https://www.datasyncpro.io/faqs/processes/action/how-can-i-implement-delta-updates): In an Update process, enable Skip Record Update If No Changes . DSP will compare transformed values with existing target values and skip… - [Can I skip updating a field if the target already has a value?](https://www.datasyncpro.io/faqs/processes/action/can-i-skip-updating-a-field-if-the-target-already-has-a-value): Yes. Enable Skip Fields If Target Value Exists to prevent overwriting fields that already contain a value during updates. - [Can I skip a field update if the transformed value is blank?](https://www.datasyncpro.io/faqs/processes/action/can-i-skip-a-field-update-if-the-transformed-value-is-blank): Yes. Enable Skip Null Value Fields to prevent updating target fields when the transformed value is blank or NULL . - [What is the purpose of Writeback?](https://www.datasyncpro.io/faqs/processes/action/what-is-the-purpose-of-writeback): Writeback updates the source record after its related target records have been successfully actioned. It's useful for tracking processing… - [What is the purpose of the 'Use Salesforce Upsert API' field?](https://www.datasyncpro.io/faqs/processes/action/what-is-the-purpose-of-the-use-salesforce-upsert-api-field): This field tells DSP to use Salesforce's native Upsert API with an External ID for upsert actions. Benefits: Improves performance by… - [How does Action support Salesforce Big Objects?](https://www.datasyncpro.io/faqs/processes/action/how-does-action-support-salesforce-big-objects): When the target is a Salesforce Big Object, DSP supports two operations: Insert — Adds new records. If a record with the same index fields… - [How does Action support Platform Events?](https://www.datasyncpro.io/faqs/processes/action/how-does-action-support-platform-events): When the target object is a Platform Event, set the Action to Publish. On execution, DSP publishes the event records — making them… - [What does Verify do?](https://www.datasyncpro.io/faqs/processes/verify/what-does-verify-do): Verify (available only in #Batch ) defines a query on the target object. After each Batch Execution, the batch log includes a Verify tab… - [What should I keep in mind when using Verify with Action to Bulk API enabled?](https://www.datasyncpro.io/faqs/processes/verify/what-should-i-keep-in-mind-when-using-verify-with-action-to-bulk-api-enabled): Verify may not work as expected when Bulk API is enabled and target record IDs aren't captured in the Batch Execution log. This typically… - [Why is bulkified transformation critical in enterprise data management?](https://www.datasyncpro.io/faqs/transformation/why-is-bulkified-transformation-critical-in-enterprise-data-management): Bulkified transformation is what allows business rules defined for a single record to scale safely across thousands or millions of records… - [What data types does DSP support in its formulas?](https://www.datasyncpro.io/faqs/transformation/what-data-types-does-dsp-support-in-its-formulas): DSP supports all primitive data types that Salesforce supports, including Blob. - [Can formulas be nested?](https://www.datasyncpro.io/faqs/transformation/can-formulas-be-nested): Yes. DSP fully supports nesting, allowing one formula to be used inside another. Example: IF( AND( CONTAINS_IGNORE_CASE(Status, "open"),… - [How can I handle complex transformations that aren't natively supported?](https://www.datasyncpro.io/faqs/transformation/how-can-i-handle-complex-transformations-that-arent-natively-supported): When DSP's built-in functions don't cover a specific transformation, you can extend the engine by creating a custom Apex class that… - [How can I create a reusable formula?](https://www.datasyncpro.io/faqs/transformation/how-can-i-create-a-reusable-formula): Create a Variable from an Executable's related list by giving it a name and assigning a formula. Variables let you simplify complex… - [How do I mask sensitive data in sandbox environments?](https://www.datasyncpro.io/faqs/transformation/how-do-i-mask-sensitive-data-in-sandbox-environments): Use masking functions in an Executable's Field Mappings to generate masked values during execution. DSP provides functions such as:… - [How do I evaluate DSP expressions from Apex?](https://www.datasyncpro.io/faqs/transformation/how-do-i-evaluate-dsp-expressions-from-apex): You can compile and evaluate DSP expressions directly in Apex: Compile a single expression: pushtopics.Expression expr =… - [What is Query Manager?](https://www.datasyncpro.io/faqs/query-manager/what-is-query-manager) - [How do I build a SOQL query with Query Builder?](https://www.datasyncpro.io/faqs/query-manager/how-do-i-build-a-soql-query-with-query-builder) - [What happens when you execute a query?](https://www.datasyncpro.io/faqs/query-manager/what-happens-when-you-execute-a-query) - [How does a dynamic filter work?](https://www.datasyncpro.io/faqs/query-manager/how-does-a-dynamic-filter-work) - [Is pagination handled server-side or client-side?](https://www.datasyncpro.io/faqs/query-manager/is-pagination-handled-server-side-or-client-side) - [Is the Tooling API supported in Query?](https://www.datasyncpro.io/faqs/query-manager/is-the-tooling-api-supported-in-query) - [How can I manage my frequently used queries?](https://www.datasyncpro.io/faqs/query-manager/how-can-i-manage-my-frequently-used-queries) - [Does splitting an Apex batch class with multiple actions into multiple batch Executables slow performance a lot?](https://www.datasyncpro.io/faqs/rules-engines/batch/does-splitting-an-apex-batch-class-with-multiple-actions-into-multiple-batch-executables-slow-performance-a-lot)