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.
- 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();
- }
:)
Articles & Research
SharePoint Security
SharePoint Development
SharePoint Architecture
Claims Authentication
Forefront For SharePoint
AIS / Dynamics GP
Team Foundation Server
Pex And Moles
ISA/TMG/IAG/UAG
DPM
Cardspace
Research Methodology
Rural ICT Development
Numerical Analysis
Multi-Level Research
Knowledge Management
Personal/Off-Topic
How much different will this be if it is a Workflow site?