Returning The SharePoint Start Workflow Link

Building the “Start Workflow” link is pretty straight forward. I am pretty sure there are better ways to do it, but here is an approach when you have to build the link using a string return. How it works is pretty straightforward. Consuming a SPListItem and SPWorkflowAssociation parameter, the SPListItem exposes the ParentList and ID properties and the SPWorkflowAssociation provides the InstantiationUrl and Id properties. The only field level stuff is I was passing a finish url in the query string (_finalurl in the below). When the link is built, it is cleaned up using the inherent SPHttpUtility.UrlKeyValueEncode method.

[csharp]
private string _finalurl;

public static string QueryStringAppend(string url, string args)
{
if (string.IsNullOrEmpty(url))
{
return url;
}
var num = url.LastIndexOf(“?”);
switch (num)
{
case -1:
return (string.Format(“{0}?{1}”, url, args));
}
return num == (url.Length – 1) ? url + args : string.Format(“{0}&{1}”, url, args);
}

protected string BuildWorkflowStartLink(SPListItem listItem, SPWorkflowAssociation workflowAssociation)
{
var builder = new StringBuilder();
builder.Append(SPHttpUtility.UrlPathEncode(string.Format(“{0}/{1}”, Web.Url, workflowAssociation.InstantiationUrl), true));
builder.Append(“?List=”);
builder.Append(listItem.ParentList.ID.ToString());
builder.Append(“&ID=”);
builder.Append(listItem.ID.ToString());
builder.Append(“&TemplateID=”);
builder.Append(workflowAssociation.Id.ToString(“B”));
string url = _finalurl ?? Request.QueryString[“Source”];
url = QueryStringAppend(url, string.Format(“{0}={1}”, FinishIdName ?? “ID”, listItem.ID));
if (!string.IsNullOrEmpty(url))
{
builder.Append(“&Source=”);
builder.Append(SPHttpUtility.UrlKeyValueEncode(url));
}
return builder.ToString();
}
[/csharp]

:)

Share

SPWorkflowDataSource

Description The Microsoft.SharePoint.WebControls.SPWorkflowDataSource class inherits from the System.Web.UI.IDataSource for abstract data source representation. As well, it inherits from System.Web.UI.DataSourceControl which is the base class for data source controls. The specialized attributes of the control can be found in the extended properties that are offered in order to support SharePoint and Workflow specific functions, such as granular parameter passing as demonstrated through the expo

This Post Details Content That I Have Written Regarding The SharePoint API On MSDN. The Full Article Will Have These Contents As Annotations Of The Full Article.

I Encourage You To Read The Full MSDN Class Documentation, Since Things Like Type Hierarchy Are Illustrated.

Adam Buenz’s MSDN Located At Annotations edited by Adam Buenz – MVP:

Description The Microsoft.SharePoint.WebControls.SPWorkflowDataSource class inherits from the System.Web.UI.IDataSource for abstract data source representation. As well, it inherits from System.Web.UI.DataSourceControl which is the base class for data source controls. The specialized attributes of the control can be found in the extended properties that are offered in order to support SharePoint and Workflow specific functions, such as granular parameter passing as demonstrated through the expo

Read My Complete MSDN Article: SPWorkflowDataSource

Share