{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Error Handling"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"error-handling","__idx":0},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Onboarded™ application logs every processing failure to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Error_Log__c"]}," and, for a specific class of live outbound failures, offers a built-in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess"]}," capability that lets an admin retry the operation directly from the Error Log record — without manually re-triggering a sync."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scope."]}," This section covers the Error Log and its reprocess capability. For the separate retry mechanism on outbound requests queued in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Sync_Queue__c"]}," — automatic backoff retry, the Do Not Retry status, and monitoring the queue itself — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#sync-queue"},"children":["Sync Queue"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-gets-logged","__idx":1},"children":["What Gets Logged"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Error_Log__c"]}," entries are written from several places in the application — inbound sync/webhook failures, batch failures, component errors, and Sync Queue rows that reach ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Do Not Retry"]}," (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#unrecoverable-errors"},"children":["Unrecoverable Errors"]},") all produce an entry. Every entry captures ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Name__c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Method__c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Error_Message__c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Error_Stack_Trace__c"]},", and — where applicable — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Impacted_Object__c"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Impacted_Record__c"]}," identifying the affected record."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Only one category of these logs is eligible for reprocessing: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["live, single-record outbound Salesforce™→Onboarded™ push failures"]},", tagged ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Name__c = 'SalesforceToOnboardedQueueable'"]},". Logs from other sources — including the Sync Queue's own Do Not Retry logging (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Name__c = 'OnboardedSyncQueueProcessorQueueable'"]},") — are not reprocess candidates. That ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Name__c"]}," value is what identifies a log as originating from the queue's own repeated-failure handling rather than a single live push attempt, and the Reprocess component will not offer an action for it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reprocessing-failed-operations","__idx":2},"children":["Reprocessing Failed Operations"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"what-it-does","__idx":3},"children":["What It Does"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a Salesforce→Onboarded™ outbound push fails and creates an Error Log record (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Class_Name__c = 'SalesforceToOnboardedQueueable'"]},"), the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ Error Reprocess"]}," component lets an authorized admin retry that operation after the underlying cause has been resolved. The component targets the specific impacted record, so no broader re-sync is needed."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," Reprocessing applies ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["only"]}," to this specific failure category — outbound Salesforce→Onboarded™ sync errors where the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Impacted Record"]}," belongs to an object configured in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Settings → Object Mappings"]},". If the error type or object is not eligible — an inbound sync error, a Sync Queue Do Not Retry log, or a record type not yet mapped — the Reprocess button does not appear and the component displays a generic ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["\"This error type can't be reprocessed.\""]}," message."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"who-can-use-it","__idx":4},"children":["Who Can Use It"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Permission Set"},"children":["Permission Set"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Capability"},"children":["Capability"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ Admin"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sees the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess"]}," component and can click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess"]}," to retry the failed operation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ HR Representative"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sees the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess History"]}," panel (read-only); cannot initiate a reprocess"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Neither"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The component does not appear on the page"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Access is enforced server-side, not just hidden in the UI — an unauthorized user cannot trigger a reprocess by any other means."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"how-to-use-it","__idx":5},"children":["How to Use It"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Error_Log__c"]}," record for the failed operation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Locate the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ Error Reprocess"]}," component on the record page."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the error is reprocessable, the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess"]}," button is enabled. If not eligible, a ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["\"This error type can't be reprocessed.\""]}," message is shown instead."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fix the underlying issue first (e.g., correct invalid field data, resolve an authentication problem)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess"]},". The button is disabled while the attempt is in flight to prevent duplicate submissions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Refresh"]}," to see the resolved outcome once the operation completes."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"automatic-retry-on-transient-failures","__idx":6},"children":["Automatic Retry on Transient Failures"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A triggered reprocess doesn't necessarily resolve in one attempt. The application first classifies the failure as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["transient"]}," or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["terminal"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transient"]}," (retried automatically): HTTP 429, any HTTP 5xx response, or a raw callout timeout/connection failure."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Terminal"]}," (fails immediately, no automatic retry): any other 4xx response, or a non-callout error such as invalid data, a missing mapping, or a decryption failure."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a reprocess attempt fails with a transient error, the application automatically ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["self-chains a delayed retry"]}," — it enqueues a fresh attempt roughly 1 minute later, up to a maximum of 3 total attempts, with no further action from the admin required. If every attempt is exhausted, the final outcome is recorded as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Failed"]}," in Reprocess History (below); a terminal failure is instead recorded as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Failed"]}," immediately on the first attempt, with no automatic retry."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"reprocess-history","__idx":7},"children":["Reprocess History"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every attempt — successful or not — is recorded in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reprocess History"]}," panel with the following fields:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Timestamp"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Date and time the attempt was made"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["User"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The admin who initiated the reprocess"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Pending"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Success"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Failed"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Details about the outcome or failure reason"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["No Duplicate Error Logs:"]}," Whether a reprocess attempt succeeds, fails terminally, or exhausts its automatic transient-failure retries, the outcome is recorded in the same Error Log's Reprocess History — a new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Error_Log__c"]}," record is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," created. This keeps error tracking consolidated and avoids log proliferation, even across the self-chained retry attempts described above."]}]}]},"headings":[{"value":"Error Handling","id":"error-handling","depth":1},{"value":"What Gets Logged","id":"what-gets-logged","depth":2},{"value":"Reprocessing Failed Operations","id":"reprocessing-failed-operations","depth":2},{"value":"What It Does","id":"what-it-does","depth":3},{"value":"Who Can Use It","id":"who-can-use-it","depth":3},{"value":"How to Use It","id":"how-to-use-it","depth":3},{"value":"Automatic Retry on Transient Failures","id":"automatic-retry-on-transient-failures","depth":3},{"value":"Reprocess History","id":"reprocess-history","depth":3}],"frontmatter":{"seo":{"title":"Error Handling"}},"lastModified":"2026-08-11T18:20:53.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/onboarded_for_salesforce/error_handling","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}