Example #1
0
        /// <summary>
        /// 初期化時指定した計算式を計算する
        /// </summary>
        /// <returns></returns>
        public string Compute()
        {
            //項目データをクリアする
            groupItems.Clear();
            // 値取得メソッドの登録
            getValuePrivateHander = this.getValue;

            switch (this.expressType)
            {
            case ExpressType.CheckDate:
            case ExpressType.CheckTime:
                return(this.analysisStringContact(this.expression));

            case ExpressType.CheckNumeric:
                return(this.analysisNumericCalcExpression(this.expression));

            case ExpressType.CalcDate:
                return(this.analysisDateCalcExpression(this.expression).ToString());

            case ExpressType.CalcTime:
                return(this.analysisTimeCalcExpression(this.expression).ToString());

            default:
                return(this.analysisNumericCalcExpression(this.expression));
            }
        }
        /// <summary>
        /// (設定画面用)マスタ参照を試して取得する
        /// </summary>
        /// <param name="chkInfo">対象チェックリストグループ項目</param>
        /// <param name="conditions">マスタ参照条件項目リスト</param>
        /// <param name="getTryValueHandler">試しみ実行時、グループ項目の型を取得するデリゲート</param>
        /// <returns></returns>
        public bool TryGetReference(ChecklistGroup chkInfo, List <MasterReference> conditions, GetTryValueHandler getTryValueHandler)
        {
            try
            {
                this.getTryValueHandler = getTryValueHandler;
                this.cmdParamters       = new List <OdbcParameter>();
                string sql = string.Empty;

                // 選択入力の場合
                if (string.IsNullOrEmpty(chkInfo.Query))
                {
                    // 値取得メソッドを登録する
                    getValuePrivateHander = getValueForTrySelect;
                    sql = this.createQuery(chkInfo.TableName, chkInfo.ReferenceColumn, conditions);
                }

                // 直接入力の場合
                else
                {
                    // 値取得メソッドを登録する
                    getValuePrivateHander = getValueForTryDirect;
                    sql = this.createQuery(chkInfo.ClId, chkInfo.Query);
                }

                // グループIDが存在しない、もしくはOCR項目,ユーザ置換項目でない項があった場合は例外をスローする
                this.checkGroupList();

                // クエリーの実行
                string connString = Utility.CreateConnectionString(chkInfo.DataSourceName);
                using (OdbcConnection conn = new OdbcConnection(connString))
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (OdbcException ex)
                    {
                        //接続失敗時、EP092例外をThrowする
                        throw new DenshowBusinessException(Message.EP092, ex);
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = System.Data.CommandType.Text;
                        foreach (OdbcParameter param in this.cmdParamters)
                        {
                            cmd.Parameters.Add(param);
                        }
                        cmd.ExecuteNonQuery();
                        return(true);
                    }
                }
            }
            catch (DenshowBusinessException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new DenshowBusinessException(Message.EP008, e);
            }
        }
        /// <summary>
        /// マスタ参照値を取得する
        /// </summary>
        /// <param name="chkInfo">対象チェックリストグループ項目</param>
        /// <param name="conditions">マスタ参照条件項目リスト</param>
        /// <param name="getValueHandler">グループ項目の値を取得するデリゲート</param>
        /// <exception cref="DenshowBusinessException">EP092:接続失敗</exception>
        /// <exception cref="DenshowBusinessException">EP090:SQL文不正</exception>
        /// <returns></returns>
        public string GetReference(ChecklistInfo chkInfo, List <MasterReference> conditions, GetValueHandler getValueHandler)
        {
            // 値取得メソッドを登録する
            getValuePrivateHander = getValue;

            try
            {
                this.getValueHandler = getValueHandler;
                this.cmdParamters    = new List <OdbcParameter>();
                string sql = string.Empty;

                // 選択入力の場合
                if (string.IsNullOrEmpty(chkInfo.Query))
                {
                    sql = this.createQuery(chkInfo.TableName, chkInfo.ReferenceColumn, conditions);
                }

                // 直接入力の場合
                else
                {
                    sql = this.createQuery(chkInfo.ClId, chkInfo.Query);
                }

                // クエリーの実行
                string connString = Utility.CreateConnectionString(chkInfo.DataSourceName);
                using (OdbcConnection conn = new OdbcConnection(connString))
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (OdbcException ex)
                    {
                        //接続失敗時、EP092例外をThrowする
                        throw new DenshowBusinessException(Message.EP092, ex);
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = System.Data.CommandType.Text;
                        foreach (OdbcParameter param in this.cmdParamters)
                        {
                            cmd.Parameters.Add(param);
                        }
                        using (OdbcDataReader reader = cmd.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                //参照データが存在する場合、一件目を取得する
                                return(convertResultValue(reader.GetValue(0)));
                            }
                            else
                            {
                                //参照データが存在しない場合
                                throw new DenshowBusinessException(Message.EP090);
                            }
                        }
                    }
                }
            }
            catch (DenshowBusinessException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new DenshowBusinessException(Message.EP090, ex);
            }
        }
Example #4
0
        /// <summary>
        /// 初期化時指定した計算式を計算する(チェック版)
        /// </summary>
        /// <returns></returns>
        public bool TryCompute()
        {
            // 値取得メソッドの登録
            getValuePrivateHander = this.getValueForTry;

            string ret = null;

            try
            {
                // グループ存在チェック
                Regex  calcRegxt = new Regex(groupIdOrNumberRegex);
                string result    = calcRegxt.Replace(this.expression, new MatchEvaluator(match =>
                {
                    return(getValuePrivateHander(match.Value));
                }));

                // グループIDが存在しない項があった場合は例外をスローする
                this.checkGroupList();

                // 禁則文字チェック
                this.checkForbidChar();

                // 演算子必須チェック
                this.checkOperationNum();

                switch (this.expressType)
                {
                case ExpressType.CheckDate:
                    // 定義式のみの場合:日付形式検査
                    ret = tryAnalysisDateCheckExpression(this.expression);
                    break;

                case ExpressType.CheckTime:
                    // 定義式のみの場合:時間形式検査
                    ret = tryAnalysisTimeCheckExpression(this.expression);
                    break;

                case ExpressType.CheckNumeric:
                    // 定義式:数値形式検査
                    ret = tryAnalysisNumericCheckExpression(this.expression);
                    break;

                case ExpressType.CalcDate:
                    // 定義式:日付形式検査
                    ret = tryAnalysisDateCalcExpression(this.expression).ToString();
                    break;

                case ExpressType.CalcTime:
                    // 定義式:時間形式検査
                    ret = tryAnalysisTimeCalcExpression(this.expression).ToString();
                    break;

                default:
                    // 結果式:妥当性チェック
                    ret = tryAnalysisNumericCalcExpression(this.expression);
                    break;
                }
            }
            catch (DenshowBusinessException)
            {
                throw;
            }

            return(true);
        }