Server-Side JavaScript gives us more flexibility. We can use Ampscript in Script Activities. I have used it. I am not claiming that this is the best solution, but we can do the same using some tricky way like this:
<script runat="server">
Platform.Load("core","1.1.1");
var sfUpdateString;
var subId = "abc123"; // Assuming subkey is available to process
sfUpdateString = '';
sfUpdateString = '%'+'%[SET @status = UpdateSingleSalesforceObject("Subscription__c","'+subId+'"';
sfUpdateString += ',"Opt_in_Email__c","0","Opt_out_Date_Email__c",Format(Now(),"yyyy-MM-ddTHH:mm:ss"))]%'+'%';
Platform.Function.TreatAsContent(sfUpdateString);
Write(Platform.Variable.GetValue("@status")); // For display Status (testing purpose)
</script>
There are two main important steps :
Step-1. Create a string variable that contains Ampscript block like this
sfUpdateString = '';
sfUpdateString = '%'+'%[SET @status = UpdateSingleSalesforceObject("Subscription__c","'+subId+'"';
sfUpdateString += ',"Opt_in_Email__c","0","Opt_out_Date_Email__c",Format(Now(),"yyyy-MM-ddTHH:mm:ss"))]%'+'%';
Step-2. Call SSJS function TreatAsContent to renders all included dynamic content.
Here is reference for TreatAsContent with SSJS
Platform.Function.TreatAsContent(sfUpdateString);
Write(Platform.Variable.GetValue("@status")); // For display Status (testing purpose)
Best Answer
I've done a REST API call from a Script Activity. Here's an example: