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

📄 vsabase.cs

📁 基于DotNet的工作流引擎实现
💻 CS
字号:
using System;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Text;
using DotNetTools.PropertySet;
using DotNetTools.Util;
using log4net;

namespace DotNetTools.Workflow.Util.Vsa
{
	/// <summary>
	/// Summary description for VsaBase.
	/// </summary>
	/// <author>jjx</author>
	public abstract class VsaBase
	{
		protected ScriptControl control;
		protected static ILog log;

		protected static String vbTemplate=@"
			Option Strict off
			Imports System
			Imports DotNetTools.Workflow
			Imports DotNetTools.Workflow.Spi
			Imports System.Collections
			Imports DotNetTools.PropertySet
			Imports DotNetTools.Util
			{imports}
			public Module module1
				function execute() as Object
				{0}
				end function
			end Module
			
			";

		protected static String jsTemplate=@"
	import System;
			import DotNetTools.Workflow;
			import DotNetTools.Workflow.Spi;
			import System.Collections;
			import DotNetTools.PropertySet;
			import DotNetTools.Util;
			{imports}
			public class module1{
			static function execute()
			{
				{0}
			}
			}
			
		";

		static VsaBase()
		{
			log=LogManager.GetLogger(typeof(VsaBase));
		}
		public VsaBase()
		{
		
		}
		

		private String GetJSImports(VsaConfig config)
		{

			if (config==null) return String.Empty;
			System.Text.StringBuilder sb=new StringBuilder();

			foreach(String s in config.Imports)
			{
				sb.Append("import ");
				sb.Append(s);
				sb.Append(";");
				sb.Append("\r\n");
				
			}
			return sb.ToString();
			
		}
		private String GetVBImports(VsaConfig config)
		{
			if (config==null) return String.Empty;
			System.Text.StringBuilder sb=new StringBuilder();
			foreach(String s in config.Imports)
			{
				sb.Append("Imports ");
				sb.Append(s);
				sb.Append("\r\n");
				
			}
			return sb.ToString();
		}
		protected void Prepared(IDictionary args, IDictionary objects)
		{
			
			VsaConfig config=(VsaConfig)System.Configuration.ConfigurationSettings.GetConfig(VsaHandler.SECTION_NAME);

			String language = (String) args[AbstractWorkflow.VSA_LANGUAGE];
			if (language==null)
				language="Microsoft.VisualBasic.Vsa";

			//String source = (String) args[AbstractWorkflow.VSA_SOURCE];
			String script = (String) args[AbstractWorkflow.VSA_SCRIPT];
			if (script==null || script.Length==0)
				log.Info("script argument  empty or null ");
			control=new ScriptControl("DotNetTools.Workflow.Util.Vsa","myapp://myproject/"+Guid.NewGuid().ToString(),language);

			if (config!=null)
			{
				foreach(String assembly in config.References)
					control.AddReference(Assembly.LoadFile(Path.GetFullPath(assembly)));
			}
			//增加 System
			control.AddReference(typeof(Console));
			//增加 PropertySet
			control.AddReference(typeof(IPropertySet));
			// 增加workflow
			control.AddReference(typeof(IFunctionProvider));
			//增加dotnettools.core
			control.AddReference(typeof(Collections));

		
			
			foreach(String key in objects.Keys)
			{
				if (objects[key]!=null)
					control.AddObject(key,objects[key]);

			}
			

		
		
			StringBuilder sb=new StringBuilder();
			if (language.ToLower()=="microsoft.visualbasic.vsa")
			{
				sb.AppendFormat(vbTemplate.Replace("{imports}",GetVBImports(config)),script);
			}
			else
			{
				sb.Append(jsTemplate.Replace("{0}",script).Replace("{imports}",GetJSImports(config)));
			}



			
			
			if (log.IsDebugEnabled)
				log.Debug(sb.ToString());
			
			control.AddCode("module1",sb.ToString());
			
			try 
			{
				control.Run();
				
				
			} 
			catch (ScriptCompileException e) 
			{
				String message = "Could not load scripting engine for VSA language: " + language;
				throw new WorkflowException(message, e);
			}

		}
	}
}

⌨️ 快捷键说明

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