You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.9 KiB
142 lines
3.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SqlTypes;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Security.Policy;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Microsoft.CodeAnalysis.CSharp.Scripting;
|
|
using Microsoft.CodeAnalysis.Options;
|
|
using Microsoft.CodeAnalysis.Scripting;
|
|
using Microsoft.CSharp;
|
|
|
|
|
|
namespace OnDocScript
|
|
{
|
|
public class Script
|
|
{
|
|
public string script = "";
|
|
public List<ScriptVars> vars = new List<ScriptVars>();
|
|
public List<Imports> Imports = new List<Imports>();
|
|
public List<Defaults> Defaults = new List<Defaults>();
|
|
public string resultas = "JSON";
|
|
public object result;
|
|
public int ErrorCode = 0;
|
|
public string Error = "";
|
|
|
|
public Script()
|
|
{
|
|
SetImports();
|
|
|
|
}
|
|
public Script(string connectionstring)
|
|
{
|
|
Defaults.Add(new Defaults("Connectionstring", connectionstring));
|
|
SetImports();
|
|
|
|
}
|
|
public Script(string connectionstring, string ondocapikeyapikey)
|
|
{
|
|
Defaults.Add(new Defaults("Connectionstring", connectionstring));
|
|
Defaults.Add(new Defaults("OnDocAPIKey", ondocapikeyapikey));
|
|
SetImports();
|
|
}
|
|
public void SetImports()
|
|
{
|
|
Imports.Add(new Imports("System", ""));
|
|
Imports.Add(new Imports("System.Data", ""));
|
|
Imports.Add(new Imports("System.IO", ""));
|
|
//Imports.Add(new Imports("System.Net.Http", "System.Net.Http.dll"));
|
|
Imports.Add(new Imports("Newtonsoft.JSON", "Newtonsoft.Json.dll"));
|
|
}
|
|
}
|
|
|
|
public class ScriptVars
|
|
{
|
|
public string Variable = "";
|
|
public string ReplaceText = "";
|
|
|
|
public ScriptVars(string variable, string replacetext)
|
|
{
|
|
Variable = variable;
|
|
ReplaceText = replacetext;
|
|
}
|
|
}
|
|
public class Imports
|
|
{
|
|
public string ImportName = "";
|
|
public string DllName = "";
|
|
|
|
public Imports(string importname,string dllname)
|
|
{
|
|
ImportName = importname;
|
|
DllName= dllname;
|
|
}
|
|
}
|
|
|
|
public class Defaults
|
|
{
|
|
public string Name = "";
|
|
public string Value = "";
|
|
|
|
public Defaults(string name, string value)
|
|
{
|
|
Name = name; Value = value;
|
|
}
|
|
}
|
|
|
|
|
|
public class Scripter
|
|
{
|
|
|
|
public void RunScript(ref Script script)
|
|
{
|
|
|
|
try
|
|
{
|
|
string scriptcode = script.script;
|
|
foreach (ScriptVars sv in script.vars)
|
|
{
|
|
scriptcode = scriptcode.Replace("&&"+sv.Variable+"&&", sv.ReplaceText);
|
|
}
|
|
foreach (Defaults df in script.Defaults)
|
|
|
|
{
|
|
scriptcode = scriptcode.Replace("&&"+df.Name+"&&", df.Value);
|
|
}
|
|
|
|
//Imports und ImportOptinen
|
|
var options = ScriptOptions.Default;
|
|
|
|
string[] imports = new string[script.Imports.Count];
|
|
int cntimportdll = 0;
|
|
int i = 0;
|
|
foreach (Imports import in script.Imports)
|
|
{
|
|
imports[i] = import.ImportName;
|
|
if (import.DllName.ToString() != "")
|
|
{
|
|
options = options.AddReferences(Assembly.LoadFrom(import.DllName));
|
|
}
|
|
i = i + 1;
|
|
}
|
|
options.WithImports(imports);
|
|
|
|
// Run Script
|
|
var result = CSharpScript.EvaluateAsync(scriptcode, options);
|
|
script.ErrorCode = 0;
|
|
script.result = result.Result.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
script.ErrorCode = 400;
|
|
script.Error = ex.Message;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|