一步一步学习Ultimus - 十、EIK接口实例
十、 EIK接口实例
下面我就附上一些简单的调用EIK接口的例子。
Code
using System;
using System.Data;
using Ultimus.WFServer;
using Ultimus.OC;
/// <summary>
/// UltimusEik 的摘要说明。
/// </summary>
public class UltimusEik
{
public UltimusEik()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 定义一个空的表
/// </summary>
public DataTable Blank()
{
DataTable pGetData = new DataTable();
DataColumn pCol1 = new DataColumn("PROCESSNAME");//流程名称
pGetData.Columns.Add(pCol1);
DataColumn pCol2 = new DataColumn("SUMMARY");//摘要
pGetData.Columns.Add(pCol2);
DataColumn pCol3 = new DataColumn("INCIDENT");//实例号
pGetData.Columns.Add(pCol3);
DataColumn pCol4 = new DataColumn("VERSION");//流程版本
pGetData.Columns.Add(pCol4);
DataColumn pCol5 = new DataColumn("STEPNAME");//步骤名称
pGetData.Columns.Add(pCol5);
DataColumn pCol6 = new DataColumn("PRIORITY");//优先级
pGetData.Columns.Add(pCol6);
DataColumn pCol7 = new DataColumn("URGENTDUETIME");//完成时限
pGetData.Columns.Add(pCol7);
DataColumn pCol8 = new DataColumn("CLIENT");//当前用户
pGetData.Columns.Add(pCol8);
DataColumn pCol9 = new DataColumn("OWNER");//拥有者
pGetData.Columns.Add(pCol9);
DataColumn pCol10 = new DataColumn("STATUS");//状态
pGetData.Columns.Add(pCol10);
DataColumn pCol11 = new DataColumn("SUBSTATUS");//子状态
pGetData.Columns.Add(pCol11);
DataColumn pCol12 = new DataColumn("TASKID");//步骤ID
pGetData.Columns.Add(pCol12);
return pGetData;
}
/// <summary>
/// 将任务列表转化为DataTale
/// </summary>
/// <param name="pTaskList"></param>
/// <returns></returns>
public DataTable GetTaskListToDT(Ultimus.WFServer.Tasklist pTaskList)
{
DataTable pGetTaskData = this.Blank();
if (pTaskList != null)
{
for (int i = 0; i < pTaskList.GetTasksCount(); i++)
{
Ultimus.WFServer.Task pTask = pTaskList.GetAt(i);
DataRow pRow = pGetTaskData.NewRow();
pRow["PROCESSNAME"] = pTask.strProcessName;
pRow["SUMMARY"] = pTask.strSummary;
pRow["INCIDENT"] = pTask.nIncidentNo.ToString();
pRow["VERSION"] = pTask.nProcessVersion.ToString();
pRow["STEPNAME"] = pTask.strStepName;
pRow["PRIORITY"] = pTask.nPriority.ToString();
pRow["URGENTDUETIME"] = DateTime.FromOADate(pTask.dOverDueTime);
pRow["CLIENT"] = pTask.strAssignedToUser;
pRow["OWNER"] = pTask.strUser;
pRow["STATUS"] = pTask.nTaskStatus;
pRow["SUBSTATUS"] = pTask.nTaskSubStatus;
pRow["TASKID"] = pTask.strTaskId;
pGetTaskData.Rows.Add(pRow);
}
}
return pGetTaskData;
}
/// <summary>
/// 获取用户对象
/// </summary>
/// <param name="pUserName"></param>
/// <returns></returns>
public static Ultimus.OC.User GetUser(string pUserName)
{
Ultimus.OC.User pUser = null;
Ultimus.OC.OrgChart pOC = new Ultimus.OC.OrgChart();
pOC.FindUser(pUserName, "", 0, out pUser);
return pUser;
}
/// <summary>
/// 获取用户FullName
/// </summary>
/// <param name="pUserName"></param>
/// <returns></returns>
public static string GetFullName(string pUserName)
{
Ultimus.OC.User pUser = null;
Ultimus.OC.OrgChart pOC = new Ultimus.OC.OrgChart();
pOC.FindUser(pUserName, "", 0, out pUser);
return pUser.strUserFullName;
}
/// <summary>
/// 发起流程(第一个步骤新发起流程时调用)
/// </summary>
/// <param name="strProcessName">流程名称</param>
/// <param name="strUserName">处理人登录名</param>
/// <param name="strSummary">摘要</param>
/// <param name="varList">变量列表</param>
/// <param name="nIncidentNo">返回实例号</param>
/// <param name="strError">返回错误信息</param>
/// <returns></returns>
public static bool LaunchIncident(string strProcessName, string strUserName, string strSummary, Variable[] varList, ref int nIncidentNo, ref string strError)
{
Tasklist tasklist1;
TasklistFilter filter1;
Task task1;
bool flag1;
tasklist1 = new Tasklist();
filter1 = new TasklistFilter();
task1 = new Task();
try
{
filter1.strProcessNameFilter = strProcessName;
filter1.nIncidentNo = 0;
filter1.strArrUserName = new string[1];
filter1.strArrUserName[0] = strUserName;
tasklist1.LoadFilteredTasks(filter1);
task1 = tasklist1.GetFirstTask();
if (task1 == null)
{
nIncidentNo = -1;
strError = "No task for these parameters";
flag1 = false;
goto L_008A;
}
if (task1.SendFrom(strUserName, varList, null, strSummary, ref nIncidentNo, out strError))
{
flag1 = true;
goto L_008A;
}
flag1 = false;
}
catch (Exception exception1)
{
nIncidentNo = -1;
strError = exception1.Message;
flag1 = false;
}
L_008A:
return flag1;
}
/// <summary>
/// 获取变量值
/// </summary>
/// <param name="pTask"></param>
/// <param name="varName"></param>
/// <returns></returns>
public static string GetVarValue(Ultimus.WFServer.Task pTask, string varName)
{
string strError = "";
object pretValue = "";
pTask.GetVariableValue(varName, out pretValue, out strError);
return pretValue.ToString();
}
/// <summary>
/// 提交
/// </summary>
/// <param name="pTaskID"></param>
/// <param name="pVarList"></param>
/// <returns></returns>
public static bool Send(string pTaskID, Ultimus.WFServer.Variable[] pVarList)
{
bool pReturn = false;
Ultimus.WFServer.Task ptask = new Ultimus.WFServer.Task();
bool pBool = ptask.InitializeFromTaskId(pTaskID);
if (pBool)
{
int nincident = 0;
string strError = "";
pReturn = ptask.Send(pVarList, "", "", ref nincident, out strError);
}
return pReturn;
}
/// <summary>
/// 退回
/// </summary>
/// <param name="pTaskID"></param>
/// <param name="pVarList"></param>
/// <returns></returns>
public static bool Return(string pTaskID, Ultimus.WFServer.Variable[] pVarList)
{
bool pReturn = false;
Ultimus.WFServer.Task ptask = new Ultimus.WFServer.Task();
bool pBool = ptask.InitializeFromTaskId(pTaskID);
if (pBool)
{
int nincident = 0;
string strError = "";
pReturn = ptask.Return(pVarList, "", "", out strError);
}
return pReturn;
}
/// <summary>
/// 获取可发起、代办任务、已完成任务列表
/// </summary>
/// <param name="strUserName">用户账号(域名\账号)</param>
/// <param name="nType">1-可发起流程2-代办3-已完成</param>
/// <param name="pGetTaskData">返回流程的数据集</param>
/// <param name="strError">返回错误</param>
/// <returns></returns>
public bool GetUserTasksList(string strUserName, int nType, out DataTable pGetTaskData, out string strError)
{
bool flag1;
Tasklist tasklist1 = new Tasklist();
TasklistFilter filter1 = new TasklistFilter();
Task task1 = new Task();
pGetTaskData = null;
try
{
filter1.strArrUserName = new string[1] { strUserName };
switch (nType)
{
case 1:
filter1.nFiltersMask = Filters.nFilter_Initiate;
break;
case 2:
filter1.nFiltersMask = (Filters.nFilter_Urgent | Filters.nFilter_Overdue) | Filters.nFilter_Current;
break;
case 3:
filter1.nFiltersMask = Filters.nFilter_Complete;
break;
}
tasklist1.LoadFilteredTasks(filter1);
pGetTaskData = this.GetTaskListToDT(tasklist1);
strError = null;
flag1 = true;
}
catch (Exception exception1)
{
tasklist1 = null;
strError = exception1.Message;
flag1 = false;
}
return flag1;
}
}
using System;
using System.Data;
using Ultimus.WFServer;
using Ultimus.OC;
/// <summary>
/// UltimusEik 的摘要说明。
/// </summary>
public class UltimusEik
{
public UltimusEik()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 定义一个空的表
/// </summary>
public DataTable Blank()
{
DataTable pGetData = new DataTable();
DataColumn pCol1 = new DataColumn("PROCESSNAME");//流程名称
pGetData.Columns.Add(pCol1);
DataColumn pCol2 = new DataColumn("SUMMARY");//摘要
pGetData.Columns.Add(pCol2);
DataColumn pCol3 = new DataColumn("INCIDENT");//实例号
pGetData.Columns.Add(pCol3);
DataColumn pCol4 = new DataColumn("VERSION");//流程版本
pGetData.Columns.Add(pCol4);
DataColumn pCol5 = new DataColumn("STEPNAME");//步骤名称
pGetData.Columns.Add(pCol5);
DataColumn pCol6 = new DataColumn("PRIORITY");//优先级
pGetData.Columns.Add(pCol6);
DataColumn pCol7 = new DataColumn("URGENTDUETIME");//完成时限
pGetData.Columns.Add(pCol7);
DataColumn pCol8 = new DataColumn("CLIENT");//当前用户
pGetData.Columns.Add(pCol8);
DataColumn pCol9 = new DataColumn("OWNER");//拥有者
pGetData.Columns.Add(pCol9);
DataColumn pCol10 = new DataColumn("STATUS");//状态
pGetData.Columns.Add(pCol10);
DataColumn pCol11 = new DataColumn("SUBSTATUS");//子状态
pGetData.Columns.Add(pCol11);
DataColumn pCol12 = new DataColumn("TASKID");//步骤ID
pGetData.Columns.Add(pCol12);
return pGetData;
}
/// <summary>
/// 将任务列表转化为DataTale
/// </summary>
/// <param name="pTaskList"></param>
/// <returns></returns>
public DataTable GetTaskListToDT(Ultimus.WFServer.Tasklist pTaskList)
{
DataTable pGetTaskData = this.Blank();
if (pTaskList != null)
{
for (int i = 0; i < pTaskList.GetTasksCount(); i++)
{
Ultimus.WFServer.Task pTask = pTaskList.GetAt(i);
DataRow pRow = pGetTaskData.NewRow();
pRow["PROCESSNAME"] = pTask.strProcessName;
pRow["SUMMARY"] = pTask.strSummary;
pRow["INCIDENT"] = pTask.nIncidentNo.ToString();
pRow["VERSION"] = pTask.nProcessVersion.ToString();
pRow["STEPNAME"] = pTask.strStepName;
pRow["PRIORITY"] = pTask.nPriority.ToString();
pRow["URGENTDUETIME"] = DateTime.FromOADate(pTask.dOverDueTime);
pRow["CLIENT"] = pTask.strAssignedToUser;
pRow["OWNER"] = pTask.strUser;
pRow["STATUS"] = pTask.nTaskStatus;
pRow["SUBSTATUS"] = pTask.nTaskSubStatus;
pRow["TASKID"] = pTask.strTaskId;
pGetTaskData.Rows.Add(pRow);
}
}
return pGetTaskData;
}
/// <summary>
/// 获取用户对象
/// </summary>
/// <param name="pUserName"></param>
/// <returns></returns>
public static Ultimus.OC.User GetUser(string pUserName)
{
Ultimus.OC.User pUser = null;
Ultimus.OC.OrgChart pOC = new Ultimus.OC.OrgChart();
pOC.FindUser(pUserName, "", 0, out pUser);
return pUser;
}
/// <summary>
/// 获取用户FullName
/// </summary>
/// <param name="pUserName"></param>
/// <returns></returns>
public static string GetFullName(string pUserName)
{
Ultimus.OC.User pUser = null;
Ultimus.OC.OrgChart pOC = new Ultimus.OC.OrgChart();
pOC.FindUser(pUserName, "", 0, out pUser);
return pUser.strUserFullName;
}
/// <summary>
/// 发起流程(第一个步骤新发起流程时调用)
/// </summary>
/// <param name="strProcessName">流程名称</param>
/// <param name="strUserName">处理人登录名</param>
/// <param name="strSummary">摘要</param>
/// <param name="varList">变量列表</param>
/// <param name="nIncidentNo">返回实例号</param>
/// <param name="strError">返回错误信息</param>
/// <returns></returns>
public static bool LaunchIncident(string strProcessName, string strUserName, string strSummary, Variable[] varList, ref int nIncidentNo, ref string strError)
{
Tasklist tasklist1;
TasklistFilter filter1;
Task task1;
bool flag1;
tasklist1 = new Tasklist();
filter1 = new TasklistFilter();
task1 = new Task();
try
{
filter1.strProcessNameFilter = strProcessName;
filter1.nIncidentNo = 0;
filter1.strArrUserName = new string[1];
filter1.strArrUserName[0] = strUserName;
tasklist1.LoadFilteredTasks(filter1);
task1 = tasklist1.GetFirstTask();
if (task1 == null)
{
nIncidentNo = -1;
strError = "No task for these parameters";
flag1 = false;
goto L_008A;
}
if (task1.SendFrom(strUserName, varList, null, strSummary, ref nIncidentNo, out strError))
{
flag1 = true;
goto L_008A;
}
flag1 = false;
}
catch (Exception exception1)
{
nIncidentNo = -1;
strError = exception1.Message;
flag1 = false;
}
L_008A:
return flag1;
}
/// <summary>
/// 获取变量值
/// </summary>
/// <param name="pTask"></param>
/// <param name="varName"></param>
/// <returns></returns>
public static string GetVarValue(Ultimus.WFServer.Task pTask, string varName)
{
string strError = "";
object pretValue = "";
pTask.GetVariableValue(varName, out pretValue, out strError);
return pretValue.ToString();
}
/// <summary>
/// 提交
/// </summary>
/// <param name="pTaskID"></param>
/// <param name="pVarList"></param>
/// <returns></returns>
public static bool Send(string pTaskID, Ultimus.WFServer.Variable[] pVarList)
{
bool pReturn = false;
Ultimus.WFServer.Task ptask = new Ultimus.WFServer.Task();
bool pBool = ptask.InitializeFromTaskId(pTaskID);
if (pBool)
{
int nincident = 0;
string strError = "";
pReturn = ptask.Send(pVarList, "", "", ref nincident, out strError);
}
return pReturn;
}
/// <summary>
/// 退回
/// </summary>
/// <param name="pTaskID"></param>
/// <param name="pVarList"></param>
/// <returns></returns>
public static bool Return(string pTaskID, Ultimus.WFServer.Variable[] pVarList)
{
bool pReturn = false;
Ultimus.WFServer.Task ptask = new Ultimus.WFServer.Task();
bool pBool = ptask.InitializeFromTaskId(pTaskID);
if (pBool)
{
int nincident = 0;
string strError = "";
pReturn = ptask.Return(pVarList, "", "", out strError);
}
return pReturn;
}
/// <summary>
/// 获取可发起、代办任务、已完成任务列表
/// </summary>
/// <param name="strUserName">用户账号(域名\账号)</param>
/// <param name="nType">1-可发起流程2-代办3-已完成</param>
/// <param name="pGetTaskData">返回流程的数据集</param>
/// <param name="strError">返回错误</param>
/// <returns></returns>
public bool GetUserTasksList(string strUserName, int nType, out DataTable pGetTaskData, out string strError)
{
bool flag1;
Tasklist tasklist1 = new Tasklist();
TasklistFilter filter1 = new TasklistFilter();
Task task1 = new Task();
pGetTaskData = null;
try
{
filter1.strArrUserName = new string[1] { strUserName };
switch (nType)
{
case 1:
filter1.nFiltersMask = Filters.nFilter_Initiate;
break;
case 2:
filter1.nFiltersMask = (Filters.nFilter_Urgent | Filters.nFilter_Overdue) | Filters.nFilter_Current;
break;
case 3:
filter1.nFiltersMask = Filters.nFilter_Complete;
break;
}
tasklist1.LoadFilteredTasks(filter1);
pGetTaskData = this.GetTaskListToDT(tasklist1);
strError = null;
flag1 = true;
}
catch (Exception exception1)
{
tasklist1 = null;
strError = exception1.Message;
flag1 = false;
}
return flag1;
}
}
如果我们
要发起流程可以使用:Send()
要保存流程可以使用:Save()
要退回流程可以使用:Return()
要终止流程可以使用:Abort()
我们通常从Ultimus中获取了一些任务列表以后,需要调用GetTaskListToDT()这个方法,把对应的TaskList转换为DataTable。
方便我们在页面上显示和调用。