Существует довольно большое количество вариантов запуска K2 workflow, это и традиционный старт процессов из клиентских форм (интерфейсов) - ASP.NET формы (Web и Windows), формы Microsoft InfoPath, SharePoint web-части, интерфейсы K2 smartforms и т.д. Кроме того, процессы могут запускаться по расписанию, по событию в других системах (например, публикация документа в библиотеку документов SharePoint или удаление элемента списка), по событию выполнения любого метода любого K2 смартобъекта, через триггеры, event-listener'ы и так далее.
Приводимый ниже пример позволяет запустить K2 workflow посредством вызова REST-сервиса:
Приводимый ниже пример позволяет запустить K2 workflow посредством вызова REST-сервиса:
public HttpClientHandler GetCredentials()
{
HttpClientHandler handler = new HttpClientHandler();
if (AuthType == Data.AuthType.NTLM)
{
handler.Credentials = new NetworkCredential(K2User, K2Password, K2Domain);
}
if (AuthType == Data.AuthType.Basic)
{
handler.Credentials = new NetworkCredential(String.Format("{0}\\{1}", K2Domain, K2User), K2Password);
}
return
handler;
}
public async Task StartProcessInstance(string processName, string expectedDuration, string priority, string folio, List<DataFieldSendPacket>
fields, bool sync)
{
//Build up xml packet to send to rest
service
string
processXML = GenerateProcessXML(processName, expectedDuration, priority, folio,
fields);
// post to task service
HttpResponseMessage response;
using (HttpClientHandler handler
= this.GetCredentials())
{
using (HttpClient client = new HttpClient(handler))
{
string
resourceAddress = "Process/Instances/StartInstance";
client.BaseAddress = new Uri(BaseK2Uri + "REST.svc/");
if (sync)
{
resourceAddress = "Process/Instances/StartInstance?synchronous=true";
}
response = await
client.PostAsync(resourceAddress, new StringContent(processXML, Encoding.UTF8, "text/xml"));
if
(!response.IsSuccessStatusCode)
{
//call failed, manage it
throw new Exception(response.StatusCode.ToString());
}
}
}
}
private string GenerateProcessXML(string processName, string expectedDuration, string priority, string folio, List<DataFieldSendPacket> fields)
{
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(" ExpectedDuration='" + expectedDuration + "'");
sb.Append(" FullName='" + processName + "'");
sb.Append(" Folio='" + folio + "'");
sb.Append(" Priority='" + priority + "'>");
foreach (var field in fields)
{
sb.Append("<p:DataField Name='");
sb.Append(field.Name);
sb.Append("'>");
sb.Append(field.Value);
sb.Append("</p:DataField>");
}
sb.Append("</w:ProcessInstance>");
return
sb.ToString();
}
Комментариев нет:
Отправить комментарий