⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlclientworkflowstore.cs

📁 基于DotNet的工作流引擎实现
💻 CS
字号:
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using DotNetTools.Util;

namespace DotNetTools.Workflow.Spi.Ado
{
	/// <summary>
	/// 
	/// </summary>
	/// <author>jjx</author>
	public class SqlClientWorkflowStore : AdoWorkflowStore
	{
		public SqlClientWorkflowStore(IDictionary props):base(props)
		{
			
		}
		protected  override IDbConnection Connection
		{
			get 
			{
				closeConnWhenDone = true;
				SqlConnection conn=new  SqlConnection(this.connectionString);
				conn.Open();
				return conn;
			}

		}

		protected override String getParameterName(String parameterName)
		{
			return "@" + parameterName;
		}

		protected override IDbCommand createDbCommand(IDbConnection connection, String sql)
		{
			IDbCommand cmd = new SqlCommand();
			cmd.Connection = connection;
			cmd.CommandText = sql;
			cmd.CommandType = CommandType.Text;
			return cmd;
		}

		protected override IDataParameter createDataParameter(String name, Object value)
		{
			return new SqlParameter(getParameterName(name), value==null?DBNull.Value:value);
		}

		public override IWorkflowEntry CreateEntry(String workflowName)
		{
			IDbConnection conn = null;
			IDbCommand stmt = null;

			try
			{
				conn = Connection;

				String sql = "INSERT INTO " + entryTable + " (" + entryName + ", " + entryState + ") VALUES (" +
					getParameterName(entryName) + "," +
					getParameterName(entryState) + ");select  "+getParameterName(entryId)+"=scope_identity();";

				if (log.IsDebugEnabled)
				{
					log.Debug("Executing SQL statement: " + sql);
				}

				stmt = createDbCommand(conn, sql);
				
				IDataParameter entryIdParameter=createDataParameter(entryId, 0);
				entryIdParameter.Direction=ParameterDirection.InputOutput;
				stmt.Parameters.Add(entryIdParameter);
				

				stmt.Parameters.Add(createDataParameter(entryName, workflowName));
				stmt.Parameters.Add(createDataParameter(entryState, SimpleWorkflowEntry.CREATED));
				stmt.ExecuteNonQuery();
				long id=TextUtils.ParseLong(entryIdParameter.Value.ToString());

				return new SimpleWorkflowEntry(id, workflowName, SimpleWorkflowEntry.CREATED);
			}
			catch (Exception e)
			{
				throw new StoreException("Error creating new workflow instance", e);
			}
			finally
			{
				cleanup(conn, stmt, null);
			}
		}

		protected internal override long createCurrentStep(IDbConnection conn, long entryId, int wfStepId, String owner, DateTime startDate, DateTime dueDate, String status)
		{
			
			String sql = "INSERT INTO " + currentTable + " (" + stepEntryId + ", " +
				stepStepId + ", " + stepActionId + ", " + stepOwner + ", " + stepStartDate + ", " + stepDueDate + ", " +
				stepFinishDate + ", " + stepStatus + ", " + stepCaller + " ) VALUES (" +
				getParameterName(stepEntryId) + "," +
				getParameterName(stepStepId) + "," +
				getParameterName(stepActionId)+"," +
				getParameterName(stepOwner) + "," +
				getParameterName(stepStartDate) +","+
				getParameterName(stepDueDate) +","+
				getParameterName(stepFinishDate)+","+
				getParameterName(stepStatus) +","+
				"null);select "+getParameterName(stepId)+"=scope_identity()";
			if (log.IsDebugEnabled)
			{
				log.Debug("Executing SQL statement: " + sql);
			}
			IDbCommand stmt = createDbCommand(conn, sql);


			
			IDataParameter stepIdParameter=createDataParameter(stepId,0);

			stepIdParameter.Direction=ParameterDirection.InputOutput;
			stmt.Parameters.Add(stepIdParameter);
			stmt.Parameters.Add(createDataParameter(stepEntryId, entryId));
			stmt.Parameters.Add(createDataParameter(stepStepId, wfStepId));
			stmt.Parameters.Add(createDataParameter(stepActionId,0));
			stmt.Parameters.Add(createDataParameter(stepOwner, owner));
			stmt.Parameters.Add(createDataParameter(stepStartDate, startDate));

			stmt.Parameters.Add(createDataParameter(stepDueDate, dueDate));
			stmt.Parameters.Add(createDataParameter(stepFinishDate,DateTime.MaxValue));
			stmt.Parameters.Add(createDataParameter(stepStatus, status));

			stmt.ExecuteNonQuery();
			long id=TextUtils.ParseLong(stepIdParameter.Value.ToString());
			cleanup(null, stmt, null);

			return id;
		}

		public SqlClientWorkflowStore()
		{
	
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -