示例#1
0
        public object Save(DataTable dtM, bool 타메뉴호출)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            if (dtM != null)
            {
                si = new SpInfo();

                /*
                 * if (!타메뉴호출)
                 *    si.DataState = DataValueState.Added;
                 * else
                 *    si.DataState = DataValueState.Modified;
                 */
                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_ME_MAP_DEPT_IU";
                si.SpNameUpdate   = "UP_CZ_ME_MAP_DEPT_IU";
                si.SpNameDelete   = "UP_CZ_ME_MAP_DEPT_D";
                si.SpParamsInsert = new string[] { "CD_COMPANY", "CD_DEPT_MTS", "NM_DEPT_MTS", "CD_DEPT", "NM_DEPT", "NO_APPLY", "CD_CC", "DT_START" };
                si.SpParamsUpdate = new string[] { "CD_COMPANY", "CD_DEPT_MTS", "NM_DEPT_MTS", "CD_DEPT", "NM_DEPT", "NO_APPLY", "CD_CC", "DT_START" };
                si.SpParamsDelete = new string[] { "CD_COMPANY", "CD_DEPT" };
                sic.Add(si);
            }

            return(Global.MainFrame.Save(sic));
        }
        public object Save_t2(DataTable dtM, bool 타메뉴호출)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            if (dtM != null)
            {
                si = new SpInfo();

                /*
                 * if (!타메뉴호출)
                 *    si.DataState = DataValueState.Added;
                 * else
                 *    si.DataState = DataValueState.Modified;
                 */
                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_ME_MAP_PARTNER_T2_IU";
                si.SpNameUpdate   = "UP_CZ_ME_MAP_PARTNER_T2_IU";
                si.SpParamsInsert = new string[] { "CD_COMPANY", "me_type", "me_attr", "me_sumcode", "corpflag", "corpid", "ID_INSERT" };
                si.SpParamsUpdate = new string[] { "CD_COMPANY", "me_type", "me_attr", "me_sumcode", "corpflag", "corpid", "ID_UPDATE" };
                sic.Add(si);
            }
            return(Global.MainFrame.Save(sic));
        }
示例#3
0
        public object Save(DataTable dtM, DataTable dtD, bool 타메뉴호출)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            if (dtM != null)
            {
                si = new SpInfo();
                if (!타메뉴호출)
                {
                    si.DataState = DataValueState.Added;
                }
                else
                {
                    si.DataState = DataValueState.Modified;
                }

                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_MEZZO_SALESGR_H_I";
                si.SpNameUpdate   = "UP_CZ_MEZZO_SALESGR_H_U";
                si.SpParamsInsert = new string[] { "NO_IV", "CD_COMPANY", "CD_BIZAREA", "NO_BIZAREA", "FG_TPPURCHASE", "CD_PARTNER", "FG_TRANS", "AM_K", "VAT_TAX", "RT_EXCH", "CD_EXCH", "AM_EX", "DT_PROCESS",
                                                   "FG_TAX", "CD_DEPT", "NO_EMP", "YN_PURSUB", "YN_EXPIV", "ID_INSERT", "DC_RMK", "FG_PAYBILL", "DT_PAY_PREARRANGED",
                                                   "CD_BIZAREA_TAX", "YN_JEONJA", "CD_PC_USER", "NO_DEPOSIT", "TXT_USERDEF1", "TP_SUMTAX", "TP_EVIDENCE" };
                si.SpParamsUpdate = new string[] { "NO_IV", "CD_COMPANY", "CD_BIZAREA", "NO_BIZAREA", "FG_TPPURCHASE", "CD_PARTNER", "FG_TRANS", "AM_K", "VAT_TAX", "RT_EXCH", "CD_EXCH", "AM_EX", "DT_PROCESS",
                                                   "FG_TAX", "CD_DEPT", "NO_EMP", "YN_PURSUB", "YN_EXPIV", "ID_UPDATE", "DC_RMK", "FG_PAYBILL", "DT_PAY_PREARRANGED",
                                                   "CD_BIZAREA_TAX", "YN_JEONJA", "CD_PC_USER", "NO_DEPOSIT", "TXT_USERDEF1", "TP_SUMTAX", "TP_EVIDENCE" };
                sic.Add(si);
            }

            if (dtD != null)
            {
                SpInfo si1 = new SpInfo();
                si1 = new Duzon.Common.Util.SpInfo();

                //if (!타메뉴호출)
                //    si1.DataState = DataValueState.Added;

                si1.DataValue      = dtD;
                si1.CompanyID      = 회사코드;
                si1.UserID         = 사용자ID;
                si1.SpNameInsert   = "UP_CZ_MEZZO_SALESGR_D_I";
                si1.SpParamsInsert = new string[] { "NO_IV", "NO_IVLINE", "CD_COMPANY", "CD_PLANT", "NO_IO", "CD_ITEM",
                                                    "CD_PURGRP", "DT_TAX", "UM", "AM_IV", "VAT_IV", "NO_EMP", "CD_PJT",
                                                    "FG_TPPURCHASE", "NO_PO", "CD_EXCH", "RT_EXCH", "UM_EX", "AM_EX",
                                                    "QT_CLS", "NO_WBS", "NO_CBS", "TP_UM_TAX", "MEMO_CD", "CHECK_PEN", "REMARK",
                                                    "ACCT_NO", "BANK_CODE", "TRADE_DATE", "TRADE_TIME", "SEQ", "YN_CAL",
                                                    "CD_ITEM_PARENTS", "CD_BUDGET", "TP_CAL", "CD_NATION", "FG_TAX", "TRADE_PLACE", "ID_INSERT" };
                sic.Add(si1);
            }

            return(Global.MainFrame.Save(sic));
        }
示例#4
0
        public object Save(DataTable dtM, bool 타메뉴호출)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            if (dtM != null)
            {
                si = new SpInfo();

                /*
                 * if (!타메뉴호출)
                 *    si.DataState = DataValueState.Added;
                 * else
                 *    si.DataState = DataValueState.Modified;
                 */
                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_ME_SALES_FOR_I";
                si.SpNameUpdate   = "UP_CZ_ME_SALES_FOR_U";
                si.SpNameDelete   = "UP_CZ_ME_SALES_FOR_D";
                si.SpParamsInsert = new string[] {
                    "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "NM_CPID", "ME_SEQ"
                    , "AY_AGENCYID", "AY_YEAR_MONTH", "AY_TRADE_TYPE", "ME_CORPID", "ME_YEAR_MONTH"
                    , "ME_TRADE_TYPE", "CD_SYSDEF", "CD_ACCT", "ME_TEAMID", "AM_BUDGET"
                    , "AM_INCOME", "AM_AGY_PRICE", "AM_MEDIA_PRICE", "ID_INSERT", "ID_UPDATE"
                    , "DT_YEAR"
                };
                si.SpParamsUpdate = new string[] {
                    "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "NM_CPID", "ME_SEQ"
                    , "AY_AGENCYID", "AY_YEAR_MONTH", "AY_TRADE_TYPE", "ME_CORPID", "ME_YEAR_MONTH"
                    , "ME_TRADE_TYPE", "CD_SYSDEF", "CD_ACCT", "ME_TEAMID", "AM_BUDGET"
                    , "AM_INCOME", "AM_AGY_PRICE", "AM_MEDIA_PRICE", "ID_INSERT", "ID_UPDATE"
                    , "DT_YEAR"
                };
                si.SpParamsDelete = new string[] { "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "ME_SEQ" };
                sic.Add(si);
            }

            return(Global.MainFrame.Save(sic));
        }
        private bool IsReadScale(SpInfo spInfo, UserSession userSession, InvokeOptionsInternal spi, out bool isWriteMode)
        {
            //Select ReadOnly Or Write Connection
            var dataAccessMode = spInfo.ExtendedProps != null ? spInfo.ExtendedProps.DataAccessMode : SpDataAccessMode.Write;

            //Write procedures cannot be called in ForceReadOnly anyway
            if (spi.IsForceReadOnly && dataAccessMode == SpDataAccessMode.Write)
            {
                throw new SpMaintenanceReadOnlyException(spInfo.ProcedureName);
            }

            //Set write request
            isWriteMode = !spi.IsForceReadOnly && dataAccessMode == SpDataAccessMode.Write;

            // Find connection string
            var isReadScale = spi.IsForceReadOnly || dataAccessMode == SpDataAccessMode.ReadSnapshot ||
                              (dataAccessMode == SpDataAccessMode.Read && userSession.LastWriteTime.AddSeconds(_readonlyConnectionSyncInterval) < DateTime.Now);

            return(isReadScale);
        }
示例#6
0
        public object Save(DataTable dtM, bool 타메뉴호출)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            string DEPT_CODE = Global.MainFrame.LoginInfo.DeptCode;

            if (dtM != null)
            {
                si = new SpInfo();

                /*
                 * if (!타메뉴호출)
                 *    si.DataState = DataValueState.Added;
                 * else
                 *    si.DataState = DataValueState.Modified;
                 */
                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_ME_SALES_PUB_I";
                si.SpNameUpdate   = "UP_CZ_ME_SALES_PUB_I";
                si.SpNameDelete   = "UP_CZ_ME_SALES_PUB_D";
                si.SpParamsInsert = new string[] {
                    "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "ME_SEQ"
                    , "ME_CORPNO", "ME_YEAR_MONTH", "ME_TRADE_TYPE", "AM_BUDGET", "AM_AGY_PRICE"
                    , "AM_MEDIA_PRICE", "NO_DOCU_M", "NO_DOCU_C", "ID_INSERT", "ID_UPDATE"
                };
                si.SpParamsUpdate = new string[] {
                    "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "ME_SEQ"
                    , "ME_CORPNO", "ME_YEAR_MONTH", "ME_TRADE_TYPE", "AM_BUDGET", "AM_AGY_PRICE"
                    , "AM_MEDIA_PRICE", "NO_DOCU_M", "NO_DOCU_C", "ID_INSERT", "ID_UPDATE"
                };
                si.SpParamsDelete = new string[] { "CD_COMPANY", "TP_SALES", "MER_REQ_NO", "ME_CPID", "ME_SEQ" };
                sic.Add(si);
            }

            return(Global.MainFrame.Save(sic));
        }
示例#7
0
        public object Save(DataTable dtM)
        {
            SpInfoCollection sic = new SpInfoCollection();
            SpInfo           si;

            if (dtM != null)
            {
                si = new SpInfo();

                si.DataValue = dtM;
                si.CompanyID = 회사코드;
                si.UserID    = 사용자ID;

                si.SpNameInsert   = "UP_CZ_ME_SALES_I";
                si.SpNameUpdate   = "UP_CZ_ME_SALES_U";
                si.SpParamsInsert = new string[] {
                    "CD_COMPANY", "actyear", "CD_ACCT", "cpid", "cpname", "yearmonth"
                    , "trade_type_d", "biz_no_d", "agencyid", "corpname_d", "yearmonth2"
                    , "trade_type_m", "biz_no_m", "corpid", "corpname_m", "NM_MEDIAGR"
                    , "teamid", "teamname", "budget", "agy_price", "income"
                    , "corp_amt", "agentid", "agentname", "closed", "status"
                    , "ID_INSERT", "ID_UPDATE"
                };
                si.SpParamsUpdate = new string[] {
                    "CD_COMPANY", "actyear", "CD_ACCT", "cpid", "cpname", "yearmonth"
                    , "trade_type_d", "biz_no_d", "agencyid", "corpname_d", "yearmonth2"
                    , "trade_type_m", "biz_no_m", "corpid", "corpname_m", "NM_MEDIAGR"
                    , "teamid", "teamname", "budget", "agy_price", "income"
                    , "corp_amt", "agentid", "agentname", "closed", "status"
                    , "ID_INSERT", "ID_UPDATE"
                };

                sic.Add(si);
            }

            return(Global.MainFrame.Save(sic));
        }
        private SpInfo ProcInfo_FromMethodInfo(MethodInfo methodInfo)
        {
            var paramsEx = new Dictionary <string, SpParamInfoEx>();

            //add paramInfo
            var spParamInfos = new List <SpParamInfo>();

            foreach (var paramInfo in methodInfo.GetParameters())
            {
                spParamInfos.Add(ProcInfo_GetParamInfo(paramInfo, paramsEx));
            }

            //add return value as an out parameter
            if (methodInfo.ReturnParameter.ParameterType != typeof(void))
            {
                spParamInfos.Add(ProcInfo_GetParamInfo(methodInfo.ReturnParameter, paramsEx));
            }

            // add method attributes
            var directSpAttribute = methodInfo.GetCustomAttribute <DirectSpProcAttribute>() ?? new DirectSpProcAttribute();

            //create procedure infos
            var spInfo = new SpInfo
            {
                ProcedureName = methodInfo.Name,
                Params        = spParamInfos.ToArray(),
                ExtendedProps = new SpInfoEx()
                {
                    IsBatchAllowed = directSpAttribute.IsBatchAllowed,
                    CaptchaMode    = directSpAttribute.CaptchaMode,
                    Params         = paramsEx
                }
            };

            return(spInfo);
        }
示例#9
0
        internal bool Save2(DataTable dt)
        {
            SpInfoCollection sc = new SpInfoCollection();
            SpInfo           si = null;

            if (dt != null && dt.Rows.Count != 0)
            {
                si                = new SpInfo();
                si.DataValue      = dt;
                si.CompanyID      = Global.MainFrame.LoginInfo.CompanyCode;
                si.UserID         = Global.MainFrame.LoginInfo.EmployeeNo;
                si.SpNameInsert   = "UP_CZ_ME_CALENDAR_I";
                si.SpNameUpdate   = "UP_CZ_ME_CALENDAR_U";
                si.SpNameDelete   = "UP_CZ_ME_CALENDAR_D";
                si.SpParamsInsert = new string[] { "CD_COMPANY", "DT_CALENDAR", "TP_CALENDAR", "DT_ROW", "NO_EMP", "NM_TITLE", "NM_NOTE", "DT_INSERT", "DT_UPDATE", "HOLIDAY", "TM_START" };
                si.SpParamsUpdate = new string[] { "CD_COMPANY", "DT_CALENDAR", "TP_CALENDAR", "DT_ROW", "NO_EMP", "NM_TITLE", "NM_NOTE", "DT_INSERT", "DT_UPDATE", "TM_START" };
                si.SpParamsDelete = new string[] { "CD_COMPANY", "DT_ROW" };

                sc.Add(si);
            }


            return(DBHelper.Save(sc));
        }
示例#10
0
        internal void Save(DataTable dt)
        {
            if (dt == null || dt.Rows.Count == 0)
            {
                return;
            }

            SpInfo si = new SpInfo();

            si.DataValue = dt;
            si.CompanyID = _CompanyCode;
            si.UserID    = Global.MainFrame.LoginInfo.UserID;

            si.SpNameInsert   = "SP_MA_CALENDAR_INSERT";
            si.SpParamsInsert = new string[] { "TP_CAL", "CD_COMPANY", "DT_CAL", "TP_WEEK", "SEQ_CAL", "TP_JOB", "FG1_HOLIDAY", "FDATESEQ", "FDATENO", "NO_PERIOD", "DC_TEXT", "ID_INSERT" };

            si.SpNameUpdate   = "SP_MA_CALENDAR_UPDATE";
            si.SpParamsUpdate = new string[] { "TP_CAL", "CD_COMPANY", "DT_CAL", "TP_WEEK", "SEQ_CAL", "TP_JOB", "FG1_HOLIDAY", "FDATESEQ", "FDATENO", "NO_PERIOD", "DC_TEXT", "ID_UPDATE" };

            si.SpNameDelete   = "SP_MA_CALENDAR_DELETE";
            si.SpParamsDelete = new string[] { "TP_CAL", "CD_COMPANY", "DT_CAL" };

            DBHelper.Save(si);
        }
示例#11
0
        internal bool Save(DataTable dtInvoice, DataTable dtFreight, List <string> list)
        {
            SpInfoCollection sc = new SpInfoCollection();

            if (dtInvoice != null)
            {
                SpInfo si = new SpInfo();
                si.DataValue      = dtInvoice;
                si.FirmCode       = Global.FirmCode;
                si.UserID         = Global.UserID;
                si.SpNameInsert   = "AP_INT_INVOICE_I";
                si.SpNameUpdate   = "AP_INT_INVOICE_I";
                si.SpParamsInsert = new string[] { "CD_FIRM", "CD_BIZ", "NO_SLIP_INVOICE", "FG_INVOICE", "NO_INVOICE",
                                                   "NM_MENU", "FG_REG_TYPE", "NO_INVOICE_REL", "NO_SLIP_INVOICE_AP", "CD_INVOICE_STATUS",
                                                   "CD_PARTNER_BILL_TO", "NM_PARTNER_BILL_TO", "DC_PARTNER_BILL_TO_ADDR", "CD_PARTNER_SHIP_TO", "NM_PARTNER_SHIP_TO",
                                                   "DC_PARTNER_SHIP_TO_ADDR", "DC_RMK", "DC_ATTN_TO", "CD_CURRENCY", "TM_INVOICE",
                                                   "TM_INVOICE_DUE", "TM_INVOICE_POST", "TM_PAY_LAST", "TM_INVOICE_RECEIVED",
                                                   "CD_CURRENCY_STANDARD", "RT_XCRT_STANDARD", "AM_INVOICE_STANDARD", "YN_INVOICE_RECEIVED",
                                                   "CD_USER_REG" };
                si.SpParamsUpdate = new string[] { "CD_FIRM", "CD_BIZ", "NO_SLIP_INVOICE", "FG_INVOICE", "NO_INVOICE",
                                                   "NM_MENU", "FG_REG_TYPE", "NO_INVOICE_REL", "NO_SLIP_INVOICE_AP", "CD_INVOICE_STATUS",
                                                   "CD_PARTNER_BILL_TO", "NM_PARTNER_BILL_TO", "DC_PARTNER_BILL_TO_ADDR", "CD_PARTNER_SHIP_TO", "NM_PARTNER_SHIP_TO",
                                                   "DC_PARTNER_SHIP_TO_ADDR", "DC_RMK", "DC_ATTN_TO", "CD_CURRENCY", "TM_INVOICE",
                                                   "TM_INVOICE_DUE", "TM_INVOICE_POST", "TM_PAY_LAST", "TM_INVOICE_RECEIVED",
                                                   "CD_CURRENCY_STANDARD", "RT_XCRT_STANDARD", "AM_INVOICE_STANDARD", "YN_INVOICE_RECEIVED",
                                                   "CD_USER_REG" };
                sc.Add(si);
            }

            if (dtFreight != null)
            {
                SpInfo si = new SpInfo();
                si.DataValue      = dtFreight;
                si.FirmCode       = Global.FirmCode;
                si.UserID         = Global.UserID;
                si.SpNameInsert   = "AP_INT_FREIGHT_I";
                si.SpNameUpdate   = "AP_INT_FREIGHT_U";
                si.SpNameDelete   = "AP_INT_FREIGHT_D";
                si.SpParamsInsert = new string[] { "CD_FIRM", "CD_BIZ1", "NO_SLIP_INVOICE1", "SEQ_FREIGHT", "CD_FREIGHT", "NM_FREIGHT", "FG_REV_COST", "FG_FREIGHT_TERM", "CD_CURRENCY_INVOICE1", "CD_CURRENCY",
                                                   "RT_XCRT", "FG_CALC", "QT_UNIT", "RT_UNIT", "RT_FREIGHT_VAT", "AM_FREIGHT", "AM_FREIGHT_VAT", "AM_FREIGHT_SUM", "AM_FREIGHT_COST", "AM_FREIGHT_VAT_COST",
                                                   "AM_FREIGHT_SUM_COST", "NO_SLIP_BL1", "TM_INVOICE_POST", "CD_USER_REG", "NO_SLIP_PROGRESS_REL", "FG_FREIGHT_REL", "SEQ_PROGRESS_ACCT_INFO_REL" };
                si.SpParamsUpdate = new string[] { "CD_FIRM", "CD_BIZ1", "NO_SLIP_INVOICE1", "SEQ_FREIGHT", "CD_FREIGHT", "NM_FREIGHT", "FG_REV_COST", "FG_FREIGHT_TERM", "CD_CURRENCY_INVOICE1", "CD_CURRENCY",
                                                   "RT_XCRT", "FG_CALC", "QT_UNIT", "RT_UNIT", "RT_FREIGHT_VAT", "AM_FREIGHT", "AM_FREIGHT_VAT", "AM_FREIGHT_SUM", "AM_FREIGHT_COST", "AM_FREIGHT_VAT_COST",
                                                   "AM_FREIGHT_SUM_COST", "NO_SLIP_BL1", "TM_INVOICE_POST", "CD_USER_AMD", "NO_SLIP_PROGRESS_REL", "FG_FREIGHT_REL", "SEQ_PROGRESS_ACCT_INFO_REL" };
                si.SpParamsDelete = new string[] { "CD_FIRM", "CD_BIZ1", "NO_SLIP_INVOICE1", "SEQ_FREIGHT", "CD_USER_AMD" };
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Insert, "CD_BIZ1", list[0]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Insert, "NO_SLIP_INVOICE1", list[1]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Insert, "NO_SLIP_BL1", list[2]);
                //si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Insert, "TM_INVOICE_POST1", list[3]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Insert, "CD_CURRENCY_INVOICE1", list[3]);

                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Update, "CD_BIZ1", list[0]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Update, "NO_SLIP_INVOICE1", list[1]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Update, "NO_SLIP_BL1", list[2]);
                //si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Update, "TM_INVOICE_POST1", list[3]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Update, "CD_CURRENCY_INVOICE1", list[3]);

                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Delete, "CD_BIZ1", list[0]);
                si.SpParamsValues.Add(NF.A2P.CommonFunction.SpState.Delete, "NO_SLIP_INVOICE1", list[1]);
                sc.Add(si);
            }

            return(DBHelper.Save(sc));
        }
        private void ReadRecordset(SpCallResult spCallResult, CommandResultTable commandResultTable, SpInfo spInfo, ApiInvokeOptions invokeOptions)
        {
            // Build return recordsetFields
            var fieldInfos = new List <FieldInfo>(commandResultTable.Fields.Length);

            for (int i = 0; i < commandResultTable.Fields.Length; i++)
            {
                fieldInfos.Add(new FieldInfo()
                {
                    Name          = commandResultTable.Fields[i].Name,
                    TypeName      = commandResultTable.Fields[i].TypeName,
                    ExtendedProps = spInfo.ExtendedProps.Fields.TryGetValue(commandResultTable.Fields[i].Name, out SpFieldInfo spRecodsetFiled) ? spRecodsetFiled : null
                });
示例#13
0
        public async Task <CommandResult> Execute(SpInfo procInfo, DirectSpContext context, IDictionary <string, object> callParams, bool isReadScale)
        {
            var res = new CommandResult();

            //set context param if exists
            var contextSpParam = procInfo.Params.FirstOrDefault(x => x.ParamName.Equals("context", StringComparison.InvariantCultureIgnoreCase));

            if (contextSpParam != null)
            {
                callParams.Add(contextSpParam.ParamName, JsonConvert.SerializeObject(context));
            }

            using (var sqlConnection = new SqlConnection(isReadScale ? ConnectionStringReadOnly : ConnectionStringReadWrite))
                using (var sqlCommand = new SqlCommand($"{procInfo.SchemaName}.{procInfo.ProcedureName}", sqlConnection))
                {
                    // create SqlParameters
                    foreach (var callParam in callParams)
                    {
                        var spParam  = procInfo.Params.First(x => x.ParamName.Equals(callParam.Key, StringComparison.OrdinalIgnoreCase));
                        var sqlParam = new SqlParameter($"@{spParam.ParamName}", Enum.Parse <SqlDbType>(spParam.SystemTypeName, true), spParam.Length)
                        {
                            Direction = spParam.IsOutput ? ParameterDirection.InputOutput : ParameterDirection.Input
                        };
                        if (callParam.Value != Undefined.Value)
                        {
                            sqlParam.Value = callParam.Value;
                        }
                        if (callParam.Value == Undefined.Value)
                        {
                            sqlParam.Direction = ParameterDirection.Output;
                        }
                        if (callParam.Key == "returnValue")
                        {
                            sqlParam.Direction = ParameterDirection.ReturnValue;
                        }
                        sqlCommand.Parameters.Add(sqlParam);
                    }

                    sqlCommand.CommandType = CommandType.StoredProcedure;
                    if (procInfo.ExtendedProps.CommandTimeout != -1)
                    {
                        sqlCommand.CommandTimeout = procInfo.ExtendedProps.CommandTimeout;
                    }

                    //execute reader
                    sqlConnection.Open();
                    try
                    {
                        using var dataReader = await sqlCommand.ExecuteReaderAsync();

                        res.Table = GetResultTable(dataReader);
                        dataReader.Close();
                    }
                    catch (Exception ex)
                    {
                        HandleException(ex);
                        throw;
                    }

                    //return out parameter
                    res.AgentContext = context.AgentContext;
                    for (var i = 0; i < sqlCommand.Parameters.Count; i++)
                    {
                        var sqlParameter = sqlCommand.Parameters[i];
                        if (sqlParameter.Direction == ParameterDirection.InputOutput || sqlParameter.Direction == ParameterDirection.Output || sqlParameter.Direction == ParameterDirection.ReturnValue)
                        {
                            //process context param
                            if (sqlParameter.ParameterName.Equals("@context", StringComparison.OrdinalIgnoreCase))
                            {
                                if (sqlParameter.Value != DBNull.Value)
                                {
                                    var newContext = JsonConvert.DeserializeObject <DirectSpContext>((string)sqlParameter.Value);
                                    res.AgentContext = newContext.AgentContext;
                                }
                            }
                            //process non context param
                            else
                            {
                                res.OutParams.Add(sqlParameter.ParameterName.Substring(1), sqlParameter.Value != DBNull.Value ? sqlParameter.Value : null);
                            }
                        }
                    }
                }

            return(res);
        }
        public async Task <CommandResult> Execute(SpInfo procInfo, DirectSpContext context, IDictionary <string, object> callParams, bool isReadScale)
        {
            var schema   = procInfo.SchemaName;
            var procName = procInfo.ProcedureName;

            if (schema != _targetType.Name)
            {
                throw new Exception($"Invalid schema {schema}!");
            }

            var methodInfo = _targetType.GetMethod(procName);

            if (methodInfo == null)
            {
                throw new Exception($"{procName} was not found!");
            }

            //call method by name parameters
            var parameterInfos  = methodInfo.GetParameters();
            var parameterValues = new object[parameterInfos.Length];

            for (var i = 0; i < parameterInfos.Length; i++)
            {
                var parameterInfo = parameterInfos[i];
                if (callParams.TryGetValue(parameterInfo.Name, out object value) && value != Undefined.Value)
                {
                    var parameterType = parameterInfo.ParameterType.IsByRef ? parameterInfo.ParameterType.GetElementType() : parameterInfo.ParameterType;
                    parameterType = Nullable.GetUnderlyingType(parameterType) ?? parameterType;

                    parameterValues[i] = value == null ?  null : Convert.ChangeType(value, parameterType);
                }
                else if (parameterInfo.HasDefaultValue)
                {
                    parameterValues[i] = parameterInfo.DefaultValue;
                }
            }

            //throw error if there is additional params in given parameters
            foreach (var callParam in callParams)
            {
                if (callParam.Key != "returnValue" && parameterInfos.FirstOrDefault(x => x.Name == callParam.Key) == null)
                {
                    throw new Exception($"Unknown parameter! ParameterName: {callParam.Key}");
                }
            }

            var ret = new CommandResult();

            try
            {
                //Set Thread Context
                Thread.SetData(Thread.GetNamedDataSlot("DirectSpContext"), context);

                //invoke command and set return value
                if (methodInfo.ReturnType == typeof(void))
                {
                    methodInfo.Invoke(_targetObject, parameterValues);
                }
                else
                {
                    var invokeRes = methodInfo.Invoke(_targetObject, parameterValues);

                    //manage result for Task (void)
                    if (invokeRes is Task && !invokeRes.GetType().IsGenericType)
                    {
                        await(Task) invokeRes;
                    }
                    //manage result for Task (generic)
                    else if (invokeRes is Task)
                    {
                        await((Task)invokeRes).ConfigureAwait(false);
                        ret.OutParams["returnValue"] = ((Task)invokeRes).GetType().GetProperty("Result").GetValue(invokeRes);
                    }
                    else
                    {
                        ret.OutParams["returnValue"] = invokeRes;
                    }
                }

                //set agent context
                ret.AgentContext = context.AgentContext;

                //set output paramters
                for (var i = 0; i < parameterInfos.Length; i++)
                {
                    var parameterInfo = parameterInfos[i];
                    if (parameterInfo.IsOut || parameterInfo.ParameterType.IsByRef)
                    {
                        if (callParams.ContainsKey(parameterInfo.Name))
                        {
                            ret.OutParams[parameterInfo.Name] = parameterValues[i];
                        }
                    }
                }

                return(ret);
            }
            catch (TargetInvocationException ex)
            {
                throw ex.InnerException;
            }
            finally
            {
                Thread.SetData(Thread.GetNamedDataSlot("DirectSpContext"), null);
            }
        }