K2 REST Services: C# Samples
You can write C# code to interact with the K2 Workflow REST service, as demonstrated by the following code snippets.
Starting a new workflow
string BaseK2Uri = @ "https://k2.denallix.com/k2services/REST.svc";
string ProcessStartRestUrl = @ "Process/Instances/StartInstance";
StringBuilder sb = new StringBuilder();
sb.Append(@ "<?xml version='1.0' encoding='utf-8'?><w:ProcessInstance xmlns:w='http://schemas.k2.com/worklist/d1' xmlns:p='http://schemas.k2.com/process/d1'");
sb.Append(@ " FullName='[folder\workflowname]'");
sb.Append(" Folio='[foliovalue]'");
sb.Append(" Priority='1'>");
sb.Append("<p:DataField Name='[StringDataFieldName]'>[StringDataFieldValue]</p:DataField>");
sb.Append("<p:DataField Name='[IntegerDataFieldName]'>[IntegerDataFieldValue]</p:DataField>");
sb.Append("</w:ProcessInstance>");
System.Threading.Tasks.Task < HttpResponseMessage > response;
System.Net.Http.HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; {
using(HttpClient client = new HttpClient(handler)) {
string resourceAddress = ProcessStartRestUrl;
client.BaseAddress = new Uri(BaseK2Uri + "/");
response = client.PostAsync(resourceAddress, new StringContent(sb.ToString(), Encoding.UTF8, "text/xml"));
response.Wait();
if (!response.Result.IsSuccessStatusCode) {
throw new Exception(response.Result.StatusCode.ToString());
}
}
}
Retrieving the worklist
string BaseK2Uri = @ "https://k2.denallix.com/k2services/REST.svc";
string WorklistRestUrl = @ "/Worklist/Items?piDataField=true&actXmlField=true";
System.Xml.Linq.XNamespace WorklistNamespace = @ "http://schemas.k2.com/worklist/d1";
System.Xml.Linq.XNamespace ActivityNamespace = @ "http://schemas.k2.com/activity/d1";
System.Xml.Linq.XNamespace ProcessNamespace = @ "http://schemas.k2.com/process/d1";
System.Xml.Linq.XNamespace EventNamespace = @ "http://schemas.k2.com/event/d1";
System.Net.HttpWebRequest request = WebRequest.Create(BaseK2Uri + WorklistRestUrl) as HttpWebRequest;
request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
System.Xml.Linq.XDocument responseDocument;
using(System.Net.HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using(System.IO.Stream responseStream = response.GetResponseStream())
using(System.Xml.XmlReader responseReader = XmlReader.Create(responseStream)) {
responseDocument = XDocument.Load(responseReader);
}
var worklistItemsQuery =
from worklistItemCollection in responseDocument.Elements(WorklistNamespace + "WorklistItemCollection")
from worklistItem in worklistItemCollection.Elements(WorklistNamespace + "WorklistItem")
from processInstance in worklistItem.Elements(ProcessNamespace + "ProcessInstance")
select new {
serialNumber = (string) worklistItem.Attribute("SerialNumber"),
folio = (string) processInstance.Attribute("Folio"),
};
foreach(var worklistItem in worklistItemsQuery) {
Console.WriteLine("Folio:" + worklistItem.folio + " | SerialNo:" + worklistItem.serialNumber);
}