using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using SourceCode.Workflow.Client;
using SourceCode.Workflow.Common;
using SourceCode.Workflow.Runtime;
namespace MyCommon
{
/// <summary>
/// K2Helper Class
/// </summary>
public class K2Helper: IDisposable
{
private string serverName = string.Empty;
private SourceCode.Workflow.Client.Connection conn = null;
private string errorMessage = string.Empty;
private SourceCode.Workflow.Client.User user = null;
/// <summary>
/// Initializes a new instance of the <see cref="K2HelperClient"/> class.
/// </summary>
/// <param name="ServerName">Name of the server.</param>
public K2Helper(string ServerName)
{
serverName = ServerName;
try
{
Open();
}catch (Exception ex)
{
errorMessage = ex.Message + "," + ex.Source;
}
}
/// <summary>
/// Gets the name of the server.
/// </summary>
/// <value>The name of the server.</value>
public string ServerName
{
get { return serverName; }
}
/// <summary>
/// Gets the user.
/// </summary>
/// <value>The user.</value>
public User User
{
get { return conn.User; }
}
/// <summary>
/// Gets the error message.
/// </summary>
/// <value>The error message.</value>
public string ErrorMessage
{
get { return errorMessage; }
}
/// <summary>
/// Gets the conn.
/// </summary>
/// <value>The conn.</value>
public SourceCode.Workflow.Client.Connection K2Conn
{
get
{
Open();
return conn;
}
set { conn = value; }
}
/// <summary>
/// Opens this instance.
/// </summary>
private void Open()
{
if (string.IsNullOrEmpty(serverName)) serverName = "localhost";
if (conn == null)
{
conn = new Connection();
conn.Open(serverName);
}
}
/// <summary>
/// Impersonates the user.
/// </summary>
/// <param name="userName">Name of the user.</param>
public void ImpersonateUser(string userName)
{
Open();
conn.ImpersonateUser(userName);
}
/// <summary>
/// K2s the server event finish.
/// </summary>
/// <param name="k2SN">The k2 SN.</param>
/// <returns></returns>
public bool K2ServerEventFinish(string k2SN)
{
SourceCode.Workflow.Client.ServerItem k2ServerItem=null;
bool sts=false;
try
{
Open();
k2ServerItem = conn.OpenServerItem(k2SN);
k2ServerItem.Finish();
sts = true;
}
catch (Exception ex)
{
errorMessage = ex.Message + "," + ex.Source;
}
finally
{
k2ServerItem = null;
}
return sts;
}
/// <summary>
/// Starts the process instance.
/// </summary>
/// <param name="processName">Name of the process.</param>
/// <param name="param">The param.</param>
/// <returns></returns>
public ProcessInstance StartProcessInstance(string processName, Hashtable param)
{
ProcessInstance instance = null;
try
{
Open();
instance = conn.CreateProcessInstance(processName);
IDictionaryEnumerator list = param.GetEnumerator();
while (list.MoveNext())
{
instance.DataFields[list.Key.ToString()].Value = list.Value;
}
conn.StartProcessInstance(instance);
}
catch (Exception ex)
{
errorMessage = ex.Message + "," + ex.Source;
}
return instance;
}
/// <summary>
/// Redirects the work list item.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="userName">Name of the user. ex MyDomain\Agusto</param>
/// <returns></returns>
public bool RedirectWorkListItem(WorklistItem item,string userName)
{
bool sts = false;
try
{
if (item == null)
{
errorMessage = "WorklistItem is null";
return false;
}
item.Redirect(userName);
}
catch (Exception ex)
{
errorMessage = ex.Message + "," + ex.Source;
}
return sts;
}
/// <summary>
/// Gets the work list item client by K2 Serial Number
/// </summary>
/// <param name="k2SN">K2SN</param>
/// <returns></returns>
public WorklistItem GetWorkListItem(string k2SN)
{
Open();
WorklistItem item = conn.OpenWorklistItem(k2SN, "ASP", true, true);
return item;
}
/// <summary>
/// Gets the server item by K2 Serial Number
/// </summary>
/// <param name="k2SN">k2SN</param>
/// <returns></returns>
public ServerItem GetServerItem(string k2SN)
{
Open();
ServerItem item = conn.OpenServerItem(k2SN);
return item;
}
/// <summary>
/// Creates the work list data table.
/// </summary>
/// <returns></returns>
private DataTable CreateWorkListDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Folio");
dt.Columns.Add("ProcInstID");
dt.Columns.Add("StartDate");
dt.Columns.Add("SerialNumber");
return dt;
}
/// <summary>
/// Gets the work list data table.
/// </summary>
/// <param name="list">The list.</param>
/// <returns></returns>
public DataTable GetWorkListDataTable(Worklist list)
{
DataTable dt = null;
if (list != null && list.Count > 0)
{
dt = CreateWorkListDataTable();
foreach (WorklistItem item in list)
{
DataRow dr = dt.NewRow();
dr["Folio"] = item.ProcessInstance.Folio;
dr["ProcInstID"] = item.ProcessInstance.ID;
dr["StartDate"] = item.ProcessInstance.StartDate;
dr["SerialNumber"] = item.SerialNumber;
dr["ID"] = item.ID.ToString();
}
}
return dt;
}
/// <summary>
/// Gets the work list.
/// </summary>
/// <returns></returns>
public Worklist GetWorkList()
{
Open();
Worklist list = conn.OpenWorklist();
return list;
}
/// <summary>
/// Gets the work list.
/// </summary>
/// <param name="criteria">The criteria.</param>
/// <returns></returns>
public Worklist GetWorkList(WorklistCriteria criteria)
{
Open();
Worklist list = conn.OpenWorklist(criteria);
return list;
}
/// <summary>
/// Gets the work list.
/// </summary>
/// <param name="processName">Name of the process.</param>
/// <returns></returns>
public Worklist GetWorkListByProcessName(string processName)
{
WorklistCriteria criteria = new WorklistCriteria();
criteria.AddFilterField(WCField.ProcessName, WCCompare.Equal, processName);
return GetWorkList(criteria);
}
/// <summary>
/// Gets the work list by folio.
/// </summary>
/// <param name="folio">The folio.</param>
/// <returns></returns>
public Worklist GetWorkListByFolio(string folio)
{
WorklistCriteria criteria = new WorklistCriteria();
criteria.AddFilterField(WCField.ProcessFolio, WCCompare.Equal, folio);
return GetWorkList(criteria);
}
/// <summary>
/// Stop a process instance by process ID.
/// </summary>
/// <param name="ProcessID"></param>
/// <returns></returns>
public bool StopProcessInstance(int ProcessID)
{
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
bool flag = mgr.StopProcessInstances(ProcessID);
mgr.Logout();
return flag;
}
/// <summary>
/// Releases the worklist item.
/// </summary>
/// <param name="worklistItemID">The worklistItemID.</param>
/// <returns>boolean</returns>
public bool ReleaseWorklistItem(int worklistItemID)
{
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
bool flag = mgr.ReleaseWorklistItem(worklistItemID);
mgr.Logout();
return flag;
}
/// <summary>
/// Gets the k2 manager.
/// </summary>
/// <returns></returns>
public SourceCode.K2Mng.K2Manager GetK2Manager()
{
SourceCode.K2Mng.K2Manager mgr = new SourceCode.K2Mng.K2Manager();
try
{
mgr.Login(serverName, 5252, "");
}
catch (Exception ex)
{
throw new Exception("Access to K2 Server denied!", ex);
}
return mgr;
}
/// <summary>
/// Gets the string table list.
/// </summary>
/// <returns></returns>
public SourceCode.K2Mng.StringTables GetStringTableList()
{
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
return mgr.GetStringTableList();
}
public SourceCode.K2Mng.StringTable GetStringTableDevelomentFolder()
{
string primaryFolder = "Development";
return GetStringTableByPrimaryFolder(primaryFolder);
}
public SourceCode.K2Mng.StringTable GetStringTableByPrimaryFolder(string primaryFolder)
{
SourceCode.K2Mng.StringTable sT = this.GetK2Manager().GetStringTable(primaryFolder);
return sT;
}
/// <summary>
/// Gets all work list items.
/// </summary>
/// <param name="dtStart">The dt start.</param>
/// <param name="dtEnd">The dt end.</param>
/// <param name="destination">The destination.</param>
/// <param name="processName">Name of the process.</param>
/// <param name="activityName">Name of the activity.</param>
/// <param name="eventName">Name of the event.</param>
/// <param name="folio">The folio.</param>
/// <returns></returns>
public SourceCode.K2Mng.WorkListItems GetK2MngAllWorkListItems(DateTime dtStart, DateTime dtEnd, string destination, string processName, string activityName, string eventName, string folio)
{
SourceCode.K2Mng.WorkListItems list;
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
list = mgr.GetWorkListItems(dtStart, dtEnd, destination, processName, activityName, eventName, folio);
mgr.Logout();
return list;
}
/// <summary>
/// Gets the k2 MNG all work list items.
/// </summary>
/// <param name="dtStart">The dtStart.</param>
/// <param name="dtEnd">The dtEnd.</param>
/// <returns></returns>
public SourceCode.K2Mng.WorkListItems GetK2MngAllWorkListItems(DateTime dtStart, DateTime dtEnd)
{
SourceCode.K2Mng.WorkListItems list;
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
list = mgr.GetWorkListItems(dtStart, dtEnd, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);
mgr.Logout();
return list;
}
/// <summary>
/// Gets all process instances.
/// </summary>
/// <returns></returns>
public SourceCode.K2Mng.ProcessInstances GetK2MngAllProcessInstances()
{
SourceCode.K2Mng.ProcessInstances list;
SourceCode.K2Mng.K2Manager mgr = this.GetK2Manager();
list = mgr.GetProcessInstances();
mgr.Logout();
return list;
}
/// <summary>
/// Closes this instance.
/// </summary>
public void Close()
{
if (conn != null)
{
conn.Close();
}
conn = null;
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
serverName = string.Empty;
errorMessage = string.Empty;
Close();
GC.Collect();
}
}
}