Quantcast
Channel: Yet Another Tridion Blog
Viewing all articles
Browse latest Browse all 215

Workflow GetNextActivityDefinition

$
0
0
To continue my series of Workflow utility methods, today I'm presenting a way to retrieve the next Activity Definition, relative to the current Activity in the Workflow Process.

///<summary>
/// Return the next activity definition, if there is one.
///</summary>
///<returns></returns>
protectedActivityDefinitionGetNextActivityDefinition() {
    ActivityInstance activityInstance = CurrentWorkItem.Activity asActivityInstance;
    TridionActivityDefinition activityDefinition = activityInstance.ActivityDefinition asTridionActivityDefinition;
    ProcessDefinition processDefinition = activityDefinition.ProcessDefinition;
    IList<ActivityDefinition> activityDefinitions = newList<ActivityDefinition>(processDefinition.ActivityDefinitions);
    IList<TridionActivityDefinition> nextActivities = null;
    foreach (TridionActivityDefinitiontridionActivityDefinition inactivityDefinitions) {
        if(tridionActivityDefinition.Id.Equals(activityDefinition.Id)) {
            nextActivities = tridionActivityDefinition.NextActivityDefinitions;
            if (nextActivities == null|| nextActivities.Count == 0) {
                Logger.Warn("GetNextActivityDefinition: Current Activity does not have a next Activity. It is the last one.");
            } elseif(nextActivities.Count > 1) {
                Logger.Warn("GetNextActivityDefinition: Current Activity is a decision. It has more than 1 next Activity.");
            } else {
                return nextActivities[0];
            }
        }
    }

    returnnull;
}

Alternatively, you can retrieve a next ActivityDefinition by name, where name is the ActivityDefinition title that we are looking for:

///<summary>
/// Return the next activity definition by name, if there is one.
///</summary>
///<returns></returns>
protectedActivityDefinitionGetNextActivityDefinition(String name) {
    ActivityInstance activityInstance = CurrentWorkItem.Activity asActivityInstance;
    TridionActivityDefinition activityDefinition = activityInstance.ActivityDefinition asTridionActivityDefinition;
    IList<TridionActivityDefinition> nextActivities = activityDefinition.NextActivityDefinitions;

    if (nextActivities == null) {
        Logger.Warn("GetNextActivityDefinition: Current Activity does not have a next Activity. It is the last one.");
    } else {
        foreach (ActivityDefinitionactivity in nextActivities) {
            if (activity.Title.Equals(name)) {
                Logger.Debug("GetNextActivityDefinition: Found activity " + activity + " by name.");
                return activity;
            }
        }
    }

    Logger.Warn("GetNextActivityDefinition: Cannot find next Activity by name.");
    returnnull;
}

For the code-above we need to know the CurrentWorkItem, which is the WorkItem of the current item in the workflow.

The code above is part of YAWF (Yet Another Workflow Framework).


Viewing all articles
Browse latest Browse all 215

Trending Articles