//────────────────────────────────────────
        /// <summary>
        /// 例えば、次の2つの物を与えると、
        /// ●ID=10、EXPL=赤、と入っている行。
        /// ●「%1%:%2%|ID|EXPL」という文字列。
        /// 
        /// すると、次の文字列が返ってくる。
        /// ●「10:EXPL」
        /// 
        /// %1%はID、%2%はEXPLに当たる。
        /// </summary>
        /// <param name="sFormat"></param>
        /// <param name="dataRowView"></param>
        /// <param name="xenonTable"></param>
        /// <param name="sErrorMsg"></param>
        /// <returns></returns>
        public string Perform(
            string sFormat,
            DataRowView dataRowView,
            Table_Humaninput xenonTable,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();
            log_Method.BeginMethod(Info_Table.Name_Library, this, "Perform",log_Reports);

            string result;

            if ( null==xenonTable)
            {
                // エラー
                // テーブルが未指定の場合

                goto gt_Error_NullTable;
            }

            CsvTo_DataTableImpl reader = new CsvTo_DataTableImpl();
            reader.CharSeparator = '|';
            DataTable scriptParameters = reader.Read(
                sFormat
                );

            if (scriptParameters.Rows.Count<1)
            {
                // 警告
                // 項目の表示書式が指定されていない場合
                //
                result = "(【Er:301;】表示書式未指定、レイアウト設定で)";

                // エラーにはしない。
                if (log_Method.CanWarning())
                {
                    log_Method.WriteWarning_ToConsole("(【Er:301;】表示書式未指定、レイアウト設定で)");
                }

                goto gt_EndMethod;
            }

            DataRow dataRow = scriptParameters.Rows[0];

            object[] recordFields = dataRow.ItemArray;// ItemArrayは1回の呼び出しが重い。

            Builder_TexttemplateP1pImpl formatString = new Builder_TexttemplateP1pImpl();
            formatString.Text = recordFields[0].ToString();//例:"%1%:%2%"
            //.Console.WriteLine(this.GetType().Name + "#CreateText: recordFields[0].ToString()=[" + recordFields[0].ToString() + "]");

            FieldToParameters fieldToParameters = new FieldToParameters();
            Configurationtree_Node parent_Configurationtree_Node = new Configurationtree_NodeImpl("!ハードコーディング_RecordFormatStringImpl#CreateText",null);
            // フィールド名のリストが続く。
            for (int nIndex = 1; nIndex < recordFields.Length; nIndex++)
            {
                //.Console.WriteLine(this.GetType().Name + "#CreateText: index=[" + index + "] recordFields[index].ToString()=[" + recordFields[index].ToString() + "]");

                string sFieldName = recordFields[nIndex].ToString();
                fieldToParameters.AddField(
                    sFieldName,
                    xenonTable,
                    log_Reports
                    );

                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    result = "(エラー)";
                    goto gt_EndMethod;
                }
            }

            fieldToParameters.Perform(ref formatString, dataRowView, xenonTable, log_Reports);
            if (!log_Reports.Successful)
            {
                // 既エラー。
                result = "(エラー)";
                goto gt_EndMethod;
            }

            result = formatString.Perform(log_Reports);

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
            gt_Error_NullTable:
            result = "(テーブルが未指定です)";
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー131!", log_Method);
                r.Message = "(エラー。テーブルが未指定です)";
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return result;
        }
Пример #2
0
        //────────────────────────────────────────

        /// <summary>
        /// 例えば、次の2つの物を与えると、
        /// ●ID=10、EXPL=赤、と入っている行。
        /// ●「%1%:%2%|ID|EXPL」という文字列。
        ///
        /// すると、次の文字列が返ってくる。
        /// ●「10:EXPL」
        ///
        /// %1%はID、%2%はEXPLに当たる。
        /// </summary>
        /// <param name="sFormat"></param>
        /// <param name="dataRowView"></param>
        /// <param name="xenonTable"></param>
        /// <param name="sErrorMsg"></param>
        /// <returns></returns>
        public string Perform(
            string sFormat,
            DataRowView dataRowView,
            Table_Humaninput xenonTable,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Table.Name_Library, this, "Perform", log_Reports);


            string result;

            if (null == xenonTable)
            {
                // エラー
                // テーブルが未指定の場合

                goto gt_Error_NullTable;
            }


            CsvTo_DataTableImpl reader = new CsvTo_DataTableImpl();

            reader.CharSeparator = '|';
            DataTable scriptParameters = reader.Read(
                sFormat
                );


            if (scriptParameters.Rows.Count < 1)
            {
                // 警告
                // 項目の表示書式が指定されていない場合
                //
                result = "(【Er:301;】表示書式未指定、レイアウト設定で)";

                // エラーにはしない。
                if (log_Method.CanWarning())
                {
                    log_Method.WriteWarning_ToConsole("(【Er:301;】表示書式未指定、レイアウト設定で)");
                }

                goto gt_EndMethod;
            }

            DataRow dataRow = scriptParameters.Rows[0];

            object[] recordFields = dataRow.ItemArray;// ItemArrayは1回の呼び出しが重い。



            Builder_TexttemplateP1pImpl formatString = new Builder_TexttemplateP1pImpl();

            formatString.Text = recordFields[0].ToString();//例:"%1%:%2%"
            //.Console.WriteLine(this.GetType().Name + "#CreateText: recordFields[0].ToString()=[" + recordFields[0].ToString() + "]");

            FieldToParameters      fieldToParameters             = new FieldToParameters();
            Configurationtree_Node parent_Configurationtree_Node = new Configurationtree_NodeImpl("!ハードコーディング_RecordFormatStringImpl#CreateText", null);

            // フィールド名のリストが続く。
            for (int nIndex = 1; nIndex < recordFields.Length; nIndex++)
            {
                //.Console.WriteLine(this.GetType().Name + "#CreateText: index=[" + index + "] recordFields[index].ToString()=[" + recordFields[index].ToString() + "]");

                string sFieldName = recordFields[nIndex].ToString();
                fieldToParameters.AddField(
                    sFieldName,
                    xenonTable,
                    log_Reports
                    );

                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    result = "(エラー)";
                    goto gt_EndMethod;
                }
            }

            fieldToParameters.Perform(ref formatString, dataRowView, xenonTable, log_Reports);
            if (!log_Reports.Successful)
            {
                // 既エラー。
                result = "(エラー)";
                goto gt_EndMethod;
            }

            result = formatString.Perform(log_Reports);


            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NullTable:
            result = "(テーブルが未指定です)";
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー131!", log_Method);
                r.Message = "(エラー。テーブルが未指定です)";
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
        //────────────────────────────────────────
        private void Execute6_Sub(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute6_Sub", log_Reports);

            string sFlowSkip;
            this.TrySelectAttribute(out sFlowSkip, Expression_Node_Function04Impl.PM_FLOWSKIP, EnumHitcount.One_Or_Zero, log_Reports);
            if ("" != sFlowSkip.Trim())
            {
                // 処理をスキップします。
                goto gt_EndMethod;
            }

            //
            //
            //
            // テーブル名
            //
            //
            //
            List<string> sList_TableName = new List<string>();
            {
                string sTableNames;
                this.TrySelectAttribute(out sTableNames, Expression_Node_Function04Impl.PM_NAME_TABLE, EnumHitcount.One_Or_Zero, log_Reports);

                CsvTo_DataTableImpl reader = new CsvTo_DataTableImpl();
                DataTable tblNamesTable = reader.Read(
                    sTableNames
                    );

                foreach (DataRow row in tblNamesTable.Rows)
                {
                    foreach (string column in row.ItemArray)
                    {
                        sList_TableName.Add(column);
                    }
                }
            }

            foreach (string sTableName in sList_TableName)
            {
                Table_Humaninput o_Table;
                if (log_Reports.Successful)
                {
                    Expression_Node_String ec_ArgTableName;
                    this.TrySelectAttribute(out ec_ArgTableName, Expression_Node_Function04Impl.PM_NAME_TABLE, EnumHitcount.One_Or_Zero, log_Reports);

                    Expression_Node_StringImpl ec_TableName = new Expression_Node_StringImpl(this, ec_ArgTableName.Cur_Configuration);
                    ec_TableName.AppendTextNode(
                        sTableName,
                        this.Cur_Configuration,
                        log_Reports
                        );

                    // テーブル
                    o_Table = this.Owner_MemoryApplication.MemoryTables.GetTable_HumaninputByName(
                        ec_TableName,
                        true,
                        log_Reports
                        );
                }
                else
                {
                    o_Table = null;
                }

                string sCsvText;
                if (log_Reports.Successful)
                {
                    ToCsv_Table_Humaninput_Impl textizer = new ToCsv_Table_Humaninput_Impl();
                    sCsvText = textizer.ToCsvText(o_Table, log_Reports);
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }
                }
                else
                {
                    sCsvText = null;
                }

                string sFpatha;//絶対ファイルパス
                if (log_Reports.Successful)
                {
                    // 正常時

                    //essageBox.Show("テーブルのtext=[" + csvText + "]", "デバッグ");

                    // TODO ファイルパスの妥当性判定も欲しい
                    sFpatha = o_Table.Expression_Filepath_ConfigStack.Execute4_OnExpressionString(
                        EnumHitcount.Unconstraint, log_Reports);
                    if (!log_Reports.Successful)
                    {
                        // 既エラー。
                        goto gt_EndMethod;
                    }
                }
                else
                {
                    sFpatha = "";
                }

                if (log_Reports.Successful)
                {
                    bool bPopup;
                    string sPopup;
                    this.TrySelectAttribute(out sPopup, Expression_Node_Function04Impl.PM_POPUP, EnumHitcount.One_Or_Zero, log_Reports);

                    if ("block" == sPopup.Trim())
                    {
                        log_Method.WriteInfo_ToConsole("sPopup=[" + sPopup + "] ポップアップしません。");
                        bPopup = false;
                    }
                    else
                    {
                        bPopup = true;
                    }

                    CsvWriterImpl writer = new CsvWriterImpl();
                    writer.Write(
                        sCsvText, sFpatha, bPopup);
                }
            }

            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }