Quantcast
Channel: Active questions tagged ampscript - Salesforce Stack Exchange
Viewing all articles
Browse latest Browse all 359

Ampscript UpdateSingleSalesforceObject Function in Loop

$
0
0

Im getting a 500 - error on my code and can't figure out whats causing it. Im trying to build a custom preference center (cloud page) that updates corresponding contact point consent records in salesforce. The first record is updating, but then the error throws. Ive looked at the payload and am trying to log to a DE with errors but it looks like the loop is terminating before the second iteration. Full code below:

       %%[ /* Retrieve subscriberKey and consent information */        SET @subscriberKey = RequestParameter("subscriberKey")        IF NOT EMPTY(@subscriberKey) THEN            OUTPUT(CONCAT("<p>Subscriber Key: ", @subscriberKey, "</p>"))            /* Retrieve the Contact details */            SET @row = RetrieveSalesforceObjects("Contact", "Email, FirstName, IndividualId", "Id", "=", @subscriberKey)            IF ROWCOUNT(@row) > 0 THEN                SET @firstName = FIELD(ROW(@row, 1), "FirstName")                SET @IndividualId = FIELD(ROW(@row, 1), "IndividualId")                OUTPUT(CONCAT("<p>Individual ID: ", @IndividualId, "</p>"))            ELSE                OUTPUT("<p>No Contact records found.</p>")            ENDIF            /* Retrieve Contact Point Email records */            SET @row2 = RetrieveSalesforceObjects("ContactPointEmail", "ID", "ParentId", "=", @IndividualId, "IsPrimary", "=", "true")            IF ROWCOUNT(@row2) > 0 THEN                SET @contactPointEmailId = FIELD(ROW(@row2, 1), "ID")                OUTPUT(CONCAT("<p>Contact Point Email ID: ", @contactPointEmailId, "</p>"))                /* Retrieve Consent Records */                SET @row3 = RetrieveSalesforceObjects("ContactPointConsent", "ID, PrivacyConsentStatus, DataUsePurposeID", "ContactPointId", "=", @contactPointEmailId)                OUTPUT(CONCAT("<p>Number of Consent Records Retrieved: ", ROWCOUNT(@row3), "</p>"))            ELSE                OUTPUT("<p>No Contact Point Email records found.</p>")            ENDIF        ELSE            OUTPUT("<p>Subscriber Key is empty.</p>")        ENDIF    ]%%<!-- Dynamic Greeting --><h2> %%=v(@firstName)=%%, view and update your preferences below: </h2><!-- Start the form --><form id="myform" action="%%=RequestParameter('PAGEURL')=%%" method="post"><input type="hidden" name="submitted" value="true" /><input type="hidden" name="subscriberKey" value="%%=v(@subscriberKey)=%%" /><input type="hidden" name="contactPointEmailId" value="%%=v(@contactPointEmailId)=%%" /><!-- Consent Management Records -->        %%[             IF ROWCOUNT(@row3) > 0 THEN                FOR @i = 1 TO ROWCOUNT(@row3) DO                    SET @privacyConsentStatus = FIELD(ROW(@row3, @i), "PrivacyConsentStatus")                    SET @dataUsePurposeID = FIELD(ROW(@row3, @i), "DataUsePurposeID")                    SET @consentID = FIELD(ROW(@row3, @i), "ID")                    /* Retrieve Data Use Purpose details */                    SET @row4 = RetrieveSalesforceObjects("DataUsePurpose", "Name, Description", "Id", "=", @dataUsePurposeID)                    IF ROWCOUNT(@row4) > 0 THEN                        SET @consentName = FIELD(ROW(@row4, 1), "Name")                        SET @description = FIELD(ROW(@row4, 1), "Description")                        OUTPUT(CONCAT("<p>Iteration ", @i, " - Consent ID: ", @consentID, " - PrivacyConsentStatus: ", @privacyConsentStatus, "</p>"))        ]%%<div class="form-group checkbox-label"><label class="custom-checkbox"><input type="checkbox" name="status_%%=v(@i)=%%" value="OptIn" %%[IF @privacyConsentStatus == "OptIn" THEN]%% checked %%[ENDIF]%% /><span class="checkmark"></span></label><div class="checkbox-content"><span style="font-size: 18px; font-weight: bold;">%%=v(@consentName)=%%</span><p style="font-size: 14px; color: #555;">%%=v(@description)=%%</p></div></div>        %%[                     ENDIF                NEXT @i             ELSE                OUTPUT("<p>No consent records found.</p>")            ENDIF         ]%%<!-- Submit Button --><div class="form-group" style="text-align: center;"><input type="submit" value="Update Preferences" /></div></form>    %%[         IF RequestParameter("submitted") == "true" THEN            SET @rowCount = ROWCOUNT(@row3)            SET @logDE = "ConsentUpdateLogs"            FOR @i = 1 TO @rowCount DO                SET @consentID = FIELD(ROW(@row3, @i), "ID")                SET @iterationNumber = @i                SET @errorMessage = "No error"                SET @updateStatus = "Not executed"                /* Additional logging for debugging */                SET @privacyConsentStatus = FIELD(ROW(@row3, @i), "PrivacyConsentStatus")                SET @dataUsePurposeID = FIELD(ROW(@row3, @i), "DataUsePurposeID")                OUTPUT(CONCAT("<p>Iteration ", @iterationNumber, " - Retrieved PrivacyConsentStatus: ", @privacyConsentStatus, ", DataUsePurposeID: ", @dataUsePurposeID, "</p>"))                IF NOT EMPTY(@consentID) THEN                    SET @checkboxValue = RequestParameter(CONCAT("status_", @i))                    /* Log before update */                    SET @logStatusBefore = UpsertDE(@logDE, 1, "IterationNumber", @iterationNumber,"ConsentID", @consentID,"CheckboxValue", @checkboxValue,"UpdateStatus", "Before Update"                    )                    IF NOT EMPTY(@checkboxValue) THEN                        TRY                            IF @checkboxValue == "OptIn" THEN                                SET @updateStatus = UpdateSingleSalesforceObject("ContactPointConsent", @consentID, "PrivacyConsentStatus", "OptIn")                            ELSE                                SET @updateStatus = UpdateSingleSalesforceObject("ContactPointConsent", @consentID, "PrivacyConsentStatus", "OptOut")                            ENDIF                            IF EMPTY(@updateStatus) OR @updateStatus == "false" THEN                                SET @errorMessage = "Update failed or returned an empty response."                                SET @updateStatus = "false"                            ELSE                                SET @updateStatus = "Success"                            ENDIF                        CATCH @caughtError                            SET @updateStatus = "false"                            SET @errorMessage = CONCAT("Caught Error during update of Consent ID: ", @consentID, ". Error: ", @caughtError)                        ENDTRY                    ELSE                        SET @updateStatus = "false"                        SET @errorMessage = CONCAT("Checkbox value is empty for iteration: ", @iterationNumber)                    ENDIF                    /* Log the result of the update */                    SET @logStatusAfter = UpsertDE(@logDE, 1, "IterationNumber", @iterationNumber,"ConsentID", @consentID,"UpdateStatus", @updateStatus,"CheckboxValue", @checkboxValue,"ErrorMessage", @errorMessage                    )                    /* Output to page for debugging */                    OUTPUT(CONCAT("<p>Iteration ", @iterationNumber, " - Consent ID: ", @consentID, " - Status: ", @updateStatus, " - Error: ", @errorMessage, "</p>"))                ELSE                    /* Log if ConsentID is empty */                    SET @errorMessage = CONCAT("Consent ID is empty for iteration: ", @i)                    SET @logStatusEmpty = UpsertDE(@logDE, 1, "IterationNumber", @i,"ConsentID", "N/A","UpdateStatus", "false","CheckboxValue", "N/A","ErrorMessage", @errorMessage                    )                    OUTPUT(CONCAT("<p>", @errorMessage, "</p>"))                ENDIF                /* Log each iteration completion */                OUTPUT(CONCAT("<p>Completed iteration ", @i, "</p>"))            NEXT @i        ENDIF    ]%%

Viewing all articles
Browse latest Browse all 359

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>