/// <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); } }
/// <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); }