[SalesForce] Is it possible to trigger a file drop automation with a file transfer activity

I have a file drop automation in place that enables me to remove a contact record and all other records that are related to that contact from my data model in Contact Builder. The import file for this comes from an external database.

I have now created another automation to filter out certain contacts, extract this to the safehouse and then move it to the import directory of my FTP via a file transfer activity. It has the same naming convention as the import file for the removal automation described in the first paragraph.

I would have expected that the file transfer activity would have triggered my file drop automation as it drops the file into the import directory, but nothing happened.

So my questions are:

  1. Is it correct that a file transfer activity can not trigger a file drop automation?

  2. If so, does anybody have a suggestion how I could trigger the file drop automation once the file from my second automation is on the FTP?

Best Answer

Yes you are correct, File Transfer activity does not trigger a file drop automation. This is because the file is not being dropped (defined as being added to the FTP from an outside source) but is instead being transferred (moved around internally on the FTP).

What I would do in your situation is either combine the two automations into a single one, or add a step to the end of your first automation that triggers your second automation.

  1. Combine the two automations - Basically after you run the File Transfer activity I would then add the import from your second Automation and any other activities.
  2. Insert a script to trigger your second automation - Using a Script Activity I would use SSJS to make a SOAP API call to start your second automation (I believe you will need to change it from File Drop to Scheduled, but don't actually need to set a schedule).

Example SOAP call to start an automation:

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <PerformRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
        <Action>start</Action>
        <Definitions>
            <Definition xsi:type="Automation">
                <ObjectID>29fa9fff-774a-458d-a1f4-c50f99587664</ObjectID>
            </Definition>
        </Definitions>
    </PerformRequestMsg>
</s:Body>

and here is a great sample of the full SSJS script from @AdamSpriggs blog:

<script runat="server">

Platform.Load("Core","1.1.1");

var automationCustomerKey = "CUSTOMERKEY-OF-AUTOMATION"

var rr = Platform.Function.CreateObject("RetrieveRequest");
Platform.Function.SetObjectProperty(rr, "ObjectType", "Automation");
Platform.Function.AddObjectArrayItem(rr, "Properties", "ProgramID");
Platform.Function.AddObjectArrayItem(rr, "Properties", "CustomerKey");
Platform.Function.AddObjectArrayItem(rr, "Properties", "Status");

var sfp = Platform.Function.CreateObject("SimpleFilterPart");
Platform.Function.SetObjectProperty(sfp, "Property", "CustomerKey");
Platform.Function.SetObjectProperty(sfp, "SimpleOperator", "equals");
Platform.Function.AddObjectArrayItem(sfp, "Value", automationCustomerKey);

Platform.Function.SetObjectProperty(rr, "Filter", sfp);

var retrieveStatus = [0,0,0];

var automationResultSet = Platform.Function.InvokeRetrieve(rr, retrieveStatus);

var ObjectID = automationResultSet[0]["ObjectID"];
var Status = automationResultSet[0]["Status"];

if (ObjectID != "null") {

    /*
    Code Status
    -1   Error
     0   BuildingError
     1   Building
     2   Ready
     3   Running
     4   Paused
     5   Stopped
     6   Scheduled
     7   Awaiting Trigger
     8   InactiveTrigger
    */

    if (Status == 2) {

        var obj = Platform.Function.CreateObject("Automation");
        Platform.Function.SetObjectProperty(obj, "ObjectID", ObjectID);
        var po = Platform.Function.CreateObject("PerformOptions");

        var performResult = [0,0,0];
        var performStatus = Platform.Function.InvokePerform(obj, "start", performResult, po);

    } else {
      // already running

    }
} else {
   // automation not found
}

</script>
Related Topic