Exemplo n.º 1
0
        public IdToCodeWorker(ExportWorker <TModel> export)
        {
            LoginCompanyId   = export.LoginCompanyId;
            LoginCompanyCode = export.LoginCompanyCode;
            LoginUserId      = export.LoginUserId;
            LoginUserCode    = export.LoginUserCode;

            Records           = export.Records;
            RecordCount       = export.RecordCount;
            IdResolutionQueue = export.IdResolutionQueue;
        }
Exemplo n.º 2
0
        public async Task <int> ExportAsync(string csvPath, List <TModel> original,
                                            CancellationToken cancel, IProgress <int> progress,
                                            Action <StringBuilder> specialHeaderHandler = null)
        {
            if (cancel.IsCancellationRequested)
            {
                return(0);
            }
            progress.Report(20); // 進捗:取込対象データ読込完了

            var export = new ExportWorker <TModel>(RowDef.DataExpression);

            export.LoginUserId      = UserId;
            export.LoginUserCode    = UserCode;
            export.LoginCompanyId   = CompanyId;
            export.LoginCompanyCode = CompanyCode;

            RowDef.SetupFields();
            var sb = new StringBuilder();

            specialHeaderHandler?.Invoke(sb);
            // header
            var header = RowDef.GetHeaderAry();

            if (header != null)
            {
                sb.AppendLine(string.Join(RowDef.Delimiter, header));
            }

            await Task.Run(() =>
            {
                foreach (TModel m in original)
                {
                    export.NewRecord(m);
                    RowDef.Do(export);
                }
            }, cancel);

            // DB関連チェック
            var validate = new IdToCodeWorker <TModel>(export); // Exportの結果を引き渡す

            RowDef.Do(validate);                                // DBチェック&エラー情報収集

            // TODO: 文字列項目は強制でダブルクォート という要件
            await Task.Run(() =>
            {
                foreach (var record in validate.Records.Values)
                {
                    for (int i = 0; i < record.Count; i++)
                    {
                        if (record[i] == null)
                        {
                            continue;
                        }
                        if (record[i].IndexOf("\"") >= 0 ||
                            record[i].IndexOf(RowDef.Delimiter) >= 0 ||
                            record[i].IndexOf("\r") >= 0 ||
                            record[i].IndexOf("\n") >= 0)
                        {
                            record[i] = "\"" + record[i].Replace("\"", "\"\"") + "\"";
                        }
                    }
                    sb.AppendLine(string.Join(RowDef.Delimiter, record.ToArray()));
                }
            });

            try
            {
                File.WriteAllText(csvPath, sb.ToString(), CsvEncoding);
            }
            catch (Exception e)
            {
                Exception = e;
                return(0);
            }

            return(validate.Records.Count);
        }