Marketing automation


List of examples:

Processes

Creating an automation process




// Creates a new marketing automation process object
WorkflowInfo newProcess = new WorkflowInfo()
{
    // Sets the process properties
    WorkflowDisplayName = "New process",
    WorkflowName = "NewProcess",
    WorkflowType = WorkflowTypeEnum.Automation,
    WorkflowRecurrenceType = ProcessRecurrenceTypeEnum.Recurring
};

// Saves the new process to the database
WorkflowInfoProvider.SetWorkflowInfo(newProcess);

// Creates default steps for the process
WorkflowStepInfoProvider.CreateDefaultWorkflowSteps(newProcess);

// Gets the step with codename 'Finished' and allows moving to the previous step
WorkflowStepInfo finishedStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("Finished", newProcess.WorkflowID);
finishedStep.StepAllowReject = true;

// Saves the modified 'Finished' step to the database
WorkflowStepInfoProvider.SetWorkflowStepInfo(finishedStep);


> Back to list of examples

Updating a process




// Gets the marketing automation process
WorkflowInfo modifyProcess = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (modifyProcess != null)
{
    // Updates the process properties
    modifyProcess.WorkflowDisplayName = modifyProcess.WorkflowDisplayName.ToLower();

    // Saves the modified process to the database
    WorkflowInfoProvider.SetWorkflowInfo(modifyProcess);
}


> Back to list of examples

Updating multiple processes




// Gets all marketing automation processes whose code name starts with 'New'
var processes = WorkflowInfoProvider.GetWorkflows()
                                        .WhereEquals("WorkflowType", WorkflowTypeEnum.Automation)
                                        .WhereStartsWith("WorkflowName", "New");

// Loops through individual processes
foreach (WorkflowInfo modifyProcess in processes)
{
    // Updates the process properties
    modifyProcess.WorkflowDisplayName = modifyProcess.WorkflowDisplayName.ToUpper();

    // Saves the modified process to the database
    WorkflowInfoProvider.SetWorkflowInfo(modifyProcess);
}


> Back to list of examples

Deleting processes




// Gets the marketing automation process
WorkflowInfo deleteProcess = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (deleteProcess != null)
{
    // Deletes the process
    WorkflowInfoProvider.DeleteWorkflowInfo(deleteProcess);
}


> Back to list of examples

Process steps

Adding steps to a process




// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (process != null)
{
    // Creates a new process step object
    WorkflowStepInfo newStep = new WorkflowStepInfo()
    {
        // Sets the step properties
        StepWorkflowID = process.WorkflowID,
        StepName = "NewProcessStep",
        StepDisplayName = "New step",
        StepType = WorkflowStepTypeEnum.Standard
    };

    // Saves the process step to the database
    WorkflowStepInfoProvider.SetWorkflowStepInfo(newStep);
}


> Back to list of examples

Updating a step in a process




// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (process != null)
{
    // Gets the process step
    WorkflowStepInfo modifyStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("NewProcessStep", process.WorkflowID);

    if (modifyStep != null)
    {
        // Updates the step properties
        modifyStep.StepDisplayName = modifyStep.StepDisplayName.ToLower();

        // Saves the updated step to the database
        WorkflowStepInfoProvider.SetWorkflowStepInfo(modifyStep);
    }
}


> Back to list of examples

Updating multiple steps in a process




// Gets a marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

// Gets all steps defined for the specified process whose name starts with 'New'
var steps = WorkflowStepInfoProvider.GetWorkflowSteps()
                                            .WhereEquals("StepWorkflowID", process.WorkflowID)
                                            .WhereStartsWith("StepName", "New");

// Loops through individual steps
foreach (WorkflowStepInfo modifyStep in steps)
{
    // Updates the step properties
    modifyStep.StepDisplayName = modifyStep.StepDisplayName.ToUpper();

    // Saves the updated step to the database
    WorkflowStepInfoProvider.SetWorkflowStepInfo(modifyStep);
}


> Back to list of examples

Creating transitions between process steps




// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (process != null)
{
    // Gets the 'NewProcessStep' and 'Finished' steps created process step
    WorkflowStepInfo newStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("NewProcessStep", process.WorkflowID);
    WorkflowStepInfo finishedStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("Finished", process.WorkflowID);

    if ((newStep != null) && (finishedStep != null))
    {
        // Gets the existing transition leading to the 'Published' step for the process
        WorkflowTransitionInfo existingTransition = WorkflowTransitionInfoProvider.GetWorkflowTransitions()
                                                                                    .WhereEquals("TransitionWorkflowID", process.WorkflowID)
                                                                                    .WhereEquals("TransitionEndStepID", finishedStep.StepID)
                                                                                    .TopN(1)
                                                                                    .FirstOrDefault();

        // Modifies the existing transition to lead to the 'NewProcessStep' instead of the 'Finished' step
        existingTransition.TransitionEndStepID = newStep.StepID;

        // Saves the updated transition ot the database
        WorkflowTransitionInfoProvider.SetWorkflowTransitionInfo(existingTransition);

        // Creates a new transition from the 'NewProcessStep' step to the 'Finished' step
        newStep.ConnectTo(newStep.StepDefinition.SourcePoints[0].Guid, finishedStep);
    }
}


> Back to list of examples

Process triggers

Creating a process trigger




// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if (process != null)
{
    // Creates a new process trigger object
    ObjectWorkflowTriggerInfo newTrigger = new ObjectWorkflowTriggerInfo()
    {
        // Sets the trigger properties
        TriggerDisplayName = "New trigger",
        TriggerType = WorkflowTriggerTypeEnum.Change,
        TriggerWorkflowID = process.WorkflowID,
        TriggerObjectType = "om.contact"
    };

    // Saves the process trigger to the database
    ObjectWorkflowTriggerInfoProvider.SetObjectWorkflowTriggerInfo(newTrigger);
}


> Back to list of examples

Updating process triggers




// Gets a marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

// Gets all triggers defined for the given process
var triggers = ObjectWorkflowTriggerInfoProvider.GetObjectWorkflowTriggers()
                                                        .WhereEquals("TriggerWorkflowID", process.WorkflowID);

// Loops through individual triggers
foreach (ObjectWorkflowTriggerInfo modifyTrigger in triggers)
{
    // Updates the trigger properties
    modifyTrigger.TriggerDisplayName = modifyTrigger.TriggerDisplayName.ToUpper();

    // Saves the modified trigger to the database
    ObjectWorkflowTriggerInfoProvider.SetObjectWorkflowTriggerInfo(modifyTrigger);
}


> Back to list of examples

Deleting process triggers




// Gets a marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

// Gets all triggers defined for the given process whose code name starts with 'New"
var triggers = ObjectWorkflowTriggerInfoProvider.GetObjectWorkflowTriggers()
                                                        .WhereEquals("TriggerWorkflowID", process.WorkflowID)
                                                        .WhereStartsWith("TriggerDisplayName", "New");

// Loops through individual triggers
foreach (ObjectWorkflowTriggerInfo deleteTrigger in triggers)
{
    // Deletes the trigger
    ObjectWorkflowTriggerInfoProvider.DeleteObjectWorkflowTriggerInfo(deleteTrigger);
}


> Back to list of examples

Process management

Starting an automation process for a contact




// Gets the first contact in the system whose last name is 'Smith'
ContactInfo contact = ContactInfoProvider.GetContacts()
                                            .WhereEquals("ContactLastName", "Smith")
                                            .TopN(1)
                                            .FirstOrDefault();

// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if ((contact != null) && (process != null))
{
    /* Creates an automation manager instance.
    Note: You need to initialize the instance under a specific user. When running the code in the context of the administration
    application, you can get the current user from 'MembershipContext.AuthenticatedUser'. In other scenarios, 
    such as the code of a separate live site application or various asynchronous actions, you need to specify 
    a user account with sufficient permissions, for example 'UserInfoProvider.AdministratorUser'. */
    AutomationManager manager = AutomationManager.GetInstance(MembershipContext.AuthenticatedUser);

    // Starts the process for the contact
    manager.StartProcess(contact, process.WorkflowID);
}


> Back to list of examples

Moving a contact between steps in a process




// Gets the first contact in the system whose last name is 'Smith'
ContactInfo contact = ContactInfoProvider.GetContacts()
                                            .WhereEquals("ContactLastName", "Smith")
                                            .TopN(1)
                                            .FirstOrDefault();

// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if ((contact != null) && (process != null))
{
    /* Creates an automation manager instance.
    Note: You need to initialize the instance under a specific user. When running the code in the context of the administration
    application, you can get the current user from 'MembershipContext.AuthenticatedUser'. In other scenarios, 
    such as the code of a separate live site application or various asynchronous actions, you need to specify 
    a user account with sufficient permissions, for example 'UserInfoProvider.AdministratorUser'. */
    AutomationManager manager = AutomationManager.GetInstance(MembershipContext.AuthenticatedUser);

    // Gets the contact's current state in the given process
    // Note: This example only gets the first state object
    // You may need to handle multiple states if the process is allowed to run multiple process instances concurrently for the same contact
    AutomationStateInfo processState = AutomationStateInfoProvider.GetAutomationStates()
                                                                        .WhereEquals("StateObjectType", ContactInfo.OBJECT_TYPE)
                                                                        .WhereEquals("StateObjectID", contact.ContactID)
                                                                        .WhereEquals("StateWorkflowID", process.WorkflowID)
                                                                        .TopN(1)
                                                                        .FirstOrDefault();

    if (processState != null)
    {
        // Decides where to move the contact within the process
        string moveOperation = "next"; // "previous", "finished"

        switch (moveOperation)
        {
            case "next":
                // Moves the contact to the next step in the process
                manager.MoveToNextStep(contact, processState, "Moved to the next step");
                break;

            case "previous":
                // Moves the contact to the previous step in the process
                manager.MoveToPreviousStep(contact, processState, "Moved to the previous step");
                break;

            case "finished":
                // Gets the finished step based on the process state
                WorkflowStepInfo finishedStep = manager.GetFinishedStep(contact, processState);

                // Moves the contact to the finished state
                manager.MoveToSpecificStep(contact, processState, finishedStep, "Moved to the finished step");
                break;
        }
    }
}


> Back to list of examples

Removing a contact from an automation process




// Gets the first contact in the system whose last name is 'Smith'
ContactInfo contact = ContactInfoProvider.GetContacts()
                                            .WhereEquals("ContactLastName", "Smith")
                                            .TopN(1)
                                            .FirstOrDefault();

// Gets the marketing automation process
WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("NewProcess", WorkflowTypeEnum.Automation);

if ((contact != null) && (process != null))
{
    /* Creates an automation manager instance.
    Note: You need to initialize the instance under a specific user. When running the code in the context of the administration
    application, you can get the current user from 'MembershipContext.AuthenticatedUser'. In other scenarios, 
    such as the code of a separate live site application or various asynchronous actions, you need to specify 
    a user account with sufficient permissions, for example 'UserInfoProvider.AdministratorUser'. */
    AutomationManager manager = AutomationManager.GetInstance(MembershipContext.AuthenticatedUser);

    // Gets the states of all instances of the process that are running for the contact
    var states = AutomationStateInfoProvider.GetAutomationStates()
                                            .WhereEquals("StateObjectType", ContactInfo.OBJECT_TYPE)
                                            .WhereEquals("StateWorkflowID", process.WorkflowID)
                                            .WhereEquals("StateObjectID", contact.ContactID);

    if (states.Count > 0)
    {
        // Loops through the contact's states in the given process
        // There will typically be only one state unless several instances of the process are running concurrently for the same contact
        foreach (AutomationStateInfo state in states)
        {
            // Removes the contact from the process
            manager.RemoveProcess(contact, state);
        }
    }
}


> Back to list of examples