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
WorkflowInfo.Provider.Set(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
WorkflowStepInfo.Provider.Set(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
    WorkflowInfo.Provider.Set(modifyProcess);
}

> Back to list of examples

Updating multiple processes



// Gets all marketing automation processes whose code name starts with 'New'
var processes = WorkflowInfo.Provider.Get()
                                        .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
    WorkflowInfo.Provider.Set(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
    WorkflowInfo.Provider.Delete(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
    WorkflowStepInfo.Provider.Set(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
        WorkflowStepInfo.Provider.Set(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 = WorkflowStepInfo.Provider.Get()
                                            .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
    WorkflowStepInfo.Provider.Set(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 = WorkflowTransitionInfo.Provider.Get()
                                                                                    .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
        WorkflowTransitionInfo.Provider.Set(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
    ObjectWorkflowTriggerInfo.Provider.Set(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 = ObjectWorkflowTriggerInfo.Provider.Get()
                                                        .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
    ObjectWorkflowTriggerInfo.Provider.Set(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 = ObjectWorkflowTriggerInfo.Provider.Get()
                                                        .WhereEquals("TriggerWorkflowID", process.WorkflowID)
                                                        .WhereStartsWith("TriggerDisplayName", "New");

// Loops through individual triggers
foreach (ObjectWorkflowTriggerInfo deleteTrigger in triggers)
{
    // Deletes the trigger
    ObjectWorkflowTriggerInfo.Provider.Delete(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 = ContactInfo.Provider.Get()
                                            .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 the 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 = ContactInfo.Provider.Get()
                                            .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 the 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 = AutomationStateInfo.Provider.Get()
                                                                        .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 = ContactInfo.Provider.Get()
                                            .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 the 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 = AutomationStateInfo.Provider.Get()
                                            .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