コード例 #1
0
        public void OnGet()
        {
            //var instances = HookManager.GetHookedInstances<ITestWebHook>("eql");
            //foreach (ITestWebHook inst in instances)
            //	inst.OnGet(this);

            var users = new SecurityManager().GetUsers(new Guid("bdc56420-caf0-4030-8a0e-d264938e0cda"), new Guid("f16ec6db-626d-4c27-8de0-3e7ce542c55f"));


            const string sourceCode = @"
using System;
using System.Collections.Generic;
using WebVella.Erp.Web.Models;

public class SampleCodeVariable : ICodeVariable
{
	public object Evaluate(BaseErpPageModel pageModel)
	{
		return DateTime.Now;
	}
}";
            var          value      = CodeEvalService.Evaluate(sourceCode, this);


            Input =
                @"SELECT *, first_name, 
		$user_role.*, 
		$user_role.$user_role_created_by.*,
		$user_role.$user_role_created_by.$user_role.*
FROM user
WHERE ( username = '******' OR username = '******' ) AND  email <> @email AND $user_role.name @@ @role_name
ORDER BY @order_field @order_direction
PAGE @page
PAGESIZE @pagesize";

            try
            {
                // create, execute, update, delete data source
                const string paramText = @"
				@email,text,null
				@role_name,text,administrator
				@order_field,text,first_name
				@order_direction,text,desc
				@page,int,1
				@pagesize,int,10"                ;

                Guid id = new Guid("564b886b-bbdd-4505-b9df-1de439b56fd9");
                DataSourceManager dataSourceManager = new DataSourceManager();
                var ds = dataSourceManager.Get(id);
                if (ds != null)
                {
                    dataSourceManager.Delete(ds.Id);
                }

                ds = dataSourceManager.Create("test", "testing", 1, Input, paramText);

                Stopwatch sw = new Stopwatch();
                sw.Start();
                var dsResult = dataSourceManager.Execute(ds.Id, parameters);
                Debug.WriteLine($"Elapsed:{sw.ElapsedMilliseconds}");

                if (ds != null)
                {
                    dataSourceManager.Delete(ds.Id);
                }


                //1 variant - creates DbConnection internally using DbContext.Current
                {
                    EqlCommand          cmd    = new EqlCommand(Input, parameters);
                    List <EntityRecord> result = cmd.Execute();
                    List <EqlFieldMeta> meta   = cmd.GetMeta();
                    Sql    = cmd.GetSql();
                    Result = JsonConvert.SerializeObject(result, Formatting.Indented);
                    Meta   = JsonConvert.SerializeObject(meta, Formatting.Indented);
                }

                //2 variant using DbConnection
                using (var conn = DbContext.Current.CreateConnection())
                {
                    EqlCommand          cmd    = new EqlCommand(Input, conn, parameters);
                    List <EntityRecord> result = cmd.Execute();
                    List <EqlFieldMeta> meta   = cmd.GetMeta();
                    Sql    = cmd.GetSql();
                    Result = JsonConvert.SerializeObject(result, Formatting.Indented);
                    Meta   = JsonConvert.SerializeObject(meta, Formatting.Indented);
                }

                //3 variant using NpgsqlCommand and eventually NpgsqlTransaction
                using (var conn = new NpgsqlConnection(ErpSettings.ConnectionString))
                {
                    NpgsqlTransaction trans = null;
                    try
                    {
                        conn.Open();
                        trans = conn.BeginTransaction();

                        EqlCommand          cmd    = new EqlCommand(Input, conn, trans, parameters);
                        List <EntityRecord> result = cmd.Execute();
                        List <EqlFieldMeta> meta   = cmd.GetMeta();
                        Sql    = cmd.GetSql();
                        Result = JsonConvert.SerializeObject(result, Formatting.Indented);
                        Meta   = JsonConvert.SerializeObject(meta, Formatting.Indented);

                        trans.Commit();
                    }
                    catch
                    {
                        if (trans != null)
                        {
                            trans.Rollback();
                        }
                        throw;
                    }
                    finally{
                        conn.Close();
                    }
                }
            }
            catch (EqlException eqlEx)
            {
                if (eqlEx.Errors.Count > 0)
                {
                    Result = eqlEx.Errors[0].Message;
                }
                else
                {
                    Result = "Unknown eql error occurred.";
                }
            }
            catch (Exception ex)
            {
                Result = ex.Message;
            }
        }