惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 残叶

Enum视为位域 ASP.NET 2.0 HttpHandler实现生成图片验证码(转) Asp.net 2.0生命周期 - 残叶 ASP.NET 2.0 的 App_Offline.htm - 残叶 联合使用抽象类和接口 - 残叶 C#中抽象类和接口的区别 C#静态构造函数 Asp.net开发小技巧 跨页面提交数据的方法 页面的重定向 - 残叶 (转)Asp.net 中 Get和Post 的用法 (转)关于ASP.net运行流程 O/R Mapping (Object-Relation Mapping,对象关系映射) - 残叶 网络主机名与IP C#发送Email方法总结 @@IDENTITY与SCOPE_IDENTITY() .NET和SQL Server中“空值”辨析 - 残叶 Transactions - 残叶 回家了 - 残叶
封装K2.net 2003中的K2ROM
残叶 · 2007-07-13 · via 博客园 - 残叶

在用K2.net 2003开发Workflow时,我们常常要封装一个K2ROM以对K2流程进行处理.下面就是一个K2流程要用到的最基本的一些操作.

using System;
using System.Collections;
using SourceCode.K2ROM;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace K2ROM
{
    
/// <summary>
    
/// Summary description for K2Helper.
    
/// </summary>

    public class K2Helper
    
{
        
public K2Helper()
        
{
            
//
            
// TODO: Add constructor logic here
            
//
        }



        
public static string GetConnectionString(string domain, string userName, string password)
        
{
            
return string.Format(@"[;];Authenication=Windows;Domain={0};User={1};Password={2}", domain, userName, "Dell1234");
        }



        
/// <summary>
        
/// Authenication
        
/// </summary>

        public static string ConnectionString = "[;];Authenication=Windows;Domain=mstech;User=administrator;Password=Satyam123241";


        
/// <summary>
        
/// Getting the K2 server name.
        
/// </summary>

        public static string ServerName = ConfigurationManager.AppSettings["K2Server"].ToString();


        
/// <summary>
        
/// Start a process instance in k2 server.
        
/// </summary>
        
/// <param name="processName">Process name</param>
        
/// <param name="param">Process instance data,stored as a hashtable</param>
        
/// <returns>Return process instance</returns>

        public static ProcessInstance StartProcessInstance(string processName, Hashtable param)
        
{
            Connection con 
= new Connection();

            con.Open(ServerName);
            ProcessInstance instance 
= con.CreateProcessInstance(processName);
            IDictionaryEnumerator list 
= param.GetEnumerator();
            
while (list.MoveNext())
                instance.DataFields[list.Key.ToString()].Value 
= list.Value;
            con.StartProcessInstance(instance);
            con.Close();
            
return instance;

        }

        
/// <summary>
        
/// Submit the result to K2 server.
        
/// </summary>
        
/// <param name="item">WorklistItem</param>
        
/// <param name="isSubmit">Stop or Finish</param>
        
/// <returns></returns>

        public static bool UpdateWorkItem(WorklistItem item, bool isSubmit)
        
{
            
if (item == null)
                
throw new NullReferenceException("WorklitItem item is null!");

            
if (isSubmit)
                item.Finish();
            
else
                item.Update();
            
return true;
        }



        
/// <summary>
        
/// Redirect the work item to specified person.
        
/// </summary>
        
/// <param name="item"></param>
        
/// <param name="userName"></param>
        
/// <returns></returns>

        public static bool RedirectWorkItem(WorklistItem item, string userName)
        
{
            
if (item != null)
            
{
                item.Redirect(userName);
                
return true;
            }

            
return false;
        }



        
/// <summary>
        
/// Get WorklistItem by serialnumber.
        
/// </summary>
        
/// <param name="serialNumber"></param>
        
/// <returns></returns>

        public static WorklistItem GetWorkistItem(string serialNumber)
        
{
            Connection con 
= new Connection();
            con.Open(ServerName);

            WorklistItem item 
= con.OpenWorklistItem(serialNumber, "ASP");
            
return item;

        }


        
/// <summary>
        
/// Open a server item
        
/// </summary>
        
/// <param name="serialNumber"></param>
        
/// <returns></returns>

        public static ServerItem GetServerItem(string serialNumber)
        
{
            Connection con 
= new Connection();
            con.Open(ServerName);
            
return con.OpenServerItem(serialNumber);
        }



        
/// <summary>
        
/// convert worklist to dataset
        
/// </summary>
        
/// <param name="list"></param>
        
/// <returns></returns>

        public static DataTable GetWorklistDataTable(Worklist list)
        
{
            
if (list == null || list.Count == 0)
                
return null;
            DataTable dt 
= CreatWorkListTable();
            
foreach (WorklistItem item in list)
            
{
                DataRow dr 
= dt.NewRow();
                dr[
"ProcInstID"= item.ProcessInstance.ID;
                dr[
"StartDate"= item.ProcessInstance.StartDate;
                dr[
"SerialNumber"= item.SerialNumber;
                
//The id implement alternant opration between K2 DB and Location DB.
                dr["WorkItemID"= item.ProcessInstance.DataFields["WorkItemID"].Value.ToString();
                dt.Rows.Add(dr);

            }

            
return dt;
        }


        
/// <summary>
        
/// Creat a datatable to store WorkList.
        
/// </summary>
        
/// <returns></returns>

        public static DataTable CreatWorkListTable()
        
{
            DataTable dt 
= new DataTable();
            dt.Columns.Add(
"ProcInstID");
            dt.Columns.Add(
"StartDate");
            dt.Columns.Add(
"SerialNumber");
            dt.Columns.Add(
"WorkItemID");
            
return dt;
        }


        
/// <summary>
        
/// Get Worklist by criteria.
        
/// </summary>
        
/// <param name="criteria"></param>
        
/// <returns></returns>

        public static Worklist GetWorklist(WorklistCriteria criteria)
        
{
            Connection con 
= new Connection();
            con.Open(ServerName);
            
return con.OpenWorklist(criteria);
        }


        
/// <summary>
        
/// Get Worklist by process name.
        
/// </summary>
        
/// <param name="processName"></param>
        
/// <returns></returns>

        public static Worklist GetWorklist(string processName)
        
{
            WorklistCriteria criteria 
= new WorklistCriteria();
            criteria.AddFilterField(WCField.ProcessName, WCCompare.Equal, processName);
            
return GetWorklist(criteria);
        }


        
/// <summary>
        
/// Get Worklist by process name and activity name.
        
/// </summary>
        
/// <param name="processName"></param>
        
/// <param name="activityName"></param>
        
/// <returns></returns>

        public static Worklist GetWorklist(string processName, string activityName)
        
{

            WorklistCriteria criteria 
= new WorklistCriteria();
            criteria.AddFilterField(WCField.ProcessName, WCCompare.Equal, processName);
            criteria.AddFilterField(WCField.ActivityName, WCCompare.Equal, activityName);
            
return GetWorklist(criteria);
        }


        
/// <summary>
        
/// Stop a process instance by process ID.
        
/// </summary>
        
/// <param name="ProcessID"></param>
        
/// <returns></returns>

        public static bool StopProcessInstance(int ProcessID)
        
{
            SourceCode.K2Mng.K2Manager mgr 
= K2Helper.GetK2Manager();
            
bool flag = mgr.StopProcessInstances(ProcessID);
            mgr.Logout();
            
return flag;
        }


        
/// <summary>
        
/// Access K2 service as admin.
        
/// </summary>
        
/// <returns></returns>

        public static SourceCode.K2Mng.K2Manager GetK2Manager()
        
{
            SourceCode.K2Mng.K2Manager mgr 
= new SourceCode.K2Mng.K2Manager();
            
try
            
{
                mgr.Login(ConfigurationManager.AppSettings[
"K2Server"], int.Parse(ConfigurationManager.AppSettings["K2AdminPort"]), ConfigurationManager.AppSettings["K2AdminConnectionString"]);
            }

            
catch (Exception ex)
            
{
                
throw new Exception("Access to K2 Server denied!", ex);
            }

            
return mgr;
        }

    }

}