public frmCodeFunction(int codeFunctionID, Enum_CodeFunctionParamType codeFunctionParamType, bool?showInFormula = null)
        {
            InitializeComponent();
            ShowInFormula = showInFormula;
            //    EntityID = entityID;
            CodeFunctionParamType = codeFunctionParamType;
            SetCombos();
            //ExpectedReturnType = expectedReturnType;
            if (CodeFunctionParamType == Enum_CodeFunctionParamType.ManyDataItems)
            {
                lblExpectedParameter.Text   = typeof(ProxyLibrary.CodeFunctionParamManyDataItems).ToString();
                lblExpectedReturnValue.Text = typeof(FunctionResult).ToString();
            }
            else if (CodeFunctionParamType == Enum_CodeFunctionParamType.OneDataItem)
            {
                lblExpectedParameter.Text   = typeof(ProxyLibrary.CodeFunctionParamOneDataItem).ToString();
                lblExpectedReturnValue.Text = typeof(FunctionResult).ToString();
            }
            else if (CodeFunctionParamType == Enum_CodeFunctionParamType.KeyColumns)
            {
                lblExpectedParameter.Text   = "Primitive params";
                lblExpectedReturnValue.Text = typeof(FunctionResult).ToString();
            }
            ////else if (CodeFunctionParamType == Enum_CodeFunctionParamType.CommandFunction)
            ////{
            ////    lblExpectedParameter.Text = typeof(CommandFunctionParam).ToString();
            ////    lblExpectedReturnValue.Text = typeof(CommandFunctionResult).ToString();
            ////}
            else if (CodeFunctionParamType == Enum_CodeFunctionParamType.LetterFunction)
            {
                lblExpectedParameter.Text   = typeof(ProxyLibrary.LetterFunctionParam).ToString();
                lblExpectedReturnValue.Text = typeof(FunctionResult).ToString();
            }
            else if (CodeFunctionParamType == Enum_CodeFunctionParamType.LetterConvert)
            {
                lblExpectedParameter.Text   = typeof(ProxyLibrary.LetterFunctionParam).ToString();
                lblExpectedReturnValue.Text = typeof(ProxyLibrary.LetterConvertToExternalResult).ToString();
            }
            //Catalog = catalog;
            //if (CodeFunctionParamType != Enum_CodeFunctionParamType.KeyColumns)
            //    HideColumn();
            //else
            //    SetColumnSource();

            if (codeFunctionID == 0)
            {
                Message = new CodeFunctionDTO();
            }
            else
            {
                GetCodeFuntion(codeFunctionID);
            }
        }
 private LetterConvertToExternalResult GetLetterSendingCodeFunctionResult(CodeFunctionDTO codeFunction, List <object> parameters)
 {
     try
     {
         var result = ReflectionHelper.CallMethod(codeFunction.Path, codeFunction.ClassName, codeFunction.FunctionName, parameters.ToArray());
         return((LetterConvertToExternalResult)result);
     }
     catch (Exception ex)
     {
         LetterConvertToExternalResult result = new LetterConvertToExternalResult();
         result.Exception = ex;
         return(result);
     }
 }
 private FunctionResult GetCodeFunctionResult(CodeFunctionDTO codeFunction, List <object> parameters)
 {
     //FunctionResult result = new FunctionResult();
     try
     {
         return((FunctionResult)ReflectionHelper.CallMethod(codeFunction.Path, codeFunction.ClassName, codeFunction.FunctionName, parameters.ToArray()));
     }
     catch (Exception ex)
     {
         FunctionResult result = new FunctionResult();
         result.Exception = ex;
         return(result);
     }
     // return result;
 }
        public CodeFunctionDTO ToCodeFunctionDTO(CodeFunction item, bool withColumns)
        {
            BizColumn       bizColumn = new BizColumn();
            CodeFunctionDTO result    = new CodeFunctionDTO();

            result.ID        = item.ID;
            result.ClassName = item.ClassName;
            //result.Catalog = item.Catalog;
            //if (item.TableDrivedEntityID != null)
            //    result.EntityID = item.TableDrivedEntityID.Value;
            result.FunctionName     = item.FunctionName;
            result.Name             = item.Name;
            result.ParamType        = (Enum_CodeFunctionParamType)item.Type;
            result.RetrunType       = item.ReturnType;
            result.RetrunDotNetType = Type.GetType(item.ReturnType);
            //if (item.ValueCustomType != null)
            //    result.ValueCustomType = (ValueCustomType)item.ValueCustomType;
            result.Path = item.Path;
            if (withColumns)
            {
                result.Parameters = ToCodeFunctionParameterDTO(item);
            }
            return(result);
        }
        public int UpdateCodeFunctions(CodeFunctionDTO CodeFunction)
        {
            using (var projectContext = new DataAccess.MyProjectEntities())
            {
                var dbCodeFunction = projectContext.CodeFunction.FirstOrDefault(x => x.ID == CodeFunction.ID);
                if (dbCodeFunction == null)
                {
                    dbCodeFunction = new DataAccess.CodeFunction();
                }
                dbCodeFunction.ID = CodeFunction.ID;
                //if (CodeFunction.EntityID != 0)
                //{
                //    if (!dbCodeFunction.CodeFunction_TableDrivedEntity.Any(x => x.TableDrivedEntityID == CodeFunction.EntityID))
                //    {
                //        dbCodeFunction.CodeFunction_TableDrivedEntity.Add(new CodeFunction_TableDrivedEntity() { TableDrivedEntityID = CodeFunction.EntityID, ShowInFormula = CodeFunction.ShowInFormula });
                //    }
                //}
                //    dbCodeFunction.TableDrivedEntityID = CodeFunction.EntityID;
                //else
                //    dbCodeFunction.TableDrivedEntityID = null;
                //dbCodeFunction.ValueCustomType = (short)CodeFunction.ValueCustomType;

                dbCodeFunction.Name      = CodeFunction.Name;
                dbCodeFunction.ClassName = CodeFunction.ClassName;
                dbCodeFunction.Path      = CodeFunction.Path;
                dbCodeFunction.Type      = (short)CodeFunction.ParamType;
                //dbCodeFunction.Catalog = CodeFunction.Catalog;
                dbCodeFunction.FunctionName = CodeFunction.FunctionName;
                dbCodeFunction.ReturnType   = CodeFunction.RetrunType;
                //var entityRelation = dbCodeFunction.CodeFunction_TableDrivedEntity.FirstOrDefault(x => x.TableDrivedEntityID == CodeFunction.EntityID);
                //if(entityRelation==null)
                //{
                //    entityRelation = new CodeFunction_TableDrivedEntity();
                //    entityRelation.TableDrivedEntityID = CodeFunction.EntityID;
                //    dbCodeFunction.CodeFunction_TableDrivedEntity.Add(entityRelation);
                //}

                if (dbCodeFunction.ID == 0)
                {
                    projectContext.CodeFunction.Add(dbCodeFunction);
                }

                var listParams = CodeFunction.Parameters.Select(x => x.ParameterName).ToList();
                var removelist = dbCodeFunction.CodeFunctionParameter.Where(x => !listParams.Contains(x.ParamName)).ToList();
                foreach (var removeItem in removelist)
                {
                    var removeItemUsedList = removeItem.CodeFunction_TableDrivedEntity_Parameters.ToList();
                    foreach (var removeUsedItem in removeItemUsedList)
                    {
                        removeItem.CodeFunction_TableDrivedEntity_Parameters.Remove(removeUsedItem);
                    }
                    projectContext.CodeFunctionParameter.Remove(removeItem);
                }
                foreach (var column in CodeFunction.Parameters)
                {
                    CodeFunctionParameter dbColumn = dbCodeFunction.CodeFunctionParameter.FirstOrDefault(x => x.ParamName == column.ParameterName);
                    if (dbColumn == null)
                    {
                        dbColumn = new DataAccess.CodeFunctionParameter();
                        dbCodeFunction.CodeFunctionParameter.Add(dbColumn);
                    }
                    dbColumn.ParamName = column.ParameterName;
                    dbColumn.DataType  = column.DataType;


                    //if (column.ColumnID != 0)
                    //{
                    //    var parameterUsed = dbColumn.CodeFunction_TableDrivedEntity_Parameters.FirstOrDefault(x => x.CodeFunction_TableDrivedEntity == entityRelation && x.ColumnID == column.ColumnID);
                    //    if(parameterUsed==null)
                    //    {
                    //        parameterUsed = new CodeFunction_TableDrivedEntity_Parameters();
                    //        parameterUsed.ColumnID = column.ColumnID;
                    //        parameterUsed.CodeFunctionParameter = dbColumn;
                    //        parameterUsed.CodeFunction_TableDrivedEntity = entityRelation;
                    //        dbColumn.CodeFunction_TableDrivedEntity_Parameters.Add(parameterUsed);
                    //    }
                    //}
                }

                //var codeFunctionEntity = dbCodeFunction.CodeFunction_TableDrivedEntity.FirstOrDefault(x => x.TableDrivedEntityID == CodeFunction.EntityID);
                //if (codeFunctionEntity == null)
                //{
                //    codeFunctionEntity = new CodeFunction_TableDrivedEntity();
                //    dbCodeFunction.CodeFunction_TableDrivedEntity.Add(codeFunctionEntity);
                //}


                projectContext.SaveChanges();

                return(dbCodeFunction.ID);
            }
        }