private void Import() { ClearStatusMessage(); try { ImportSetting importSetting = null; var task = Util.GetMasterImportSettingAsync(Login, ImportFileType.Department); ProgressDialog.Start(ParentForm, task, false, SessionKey); importSetting = task.Result; var definition = new DepartmentFileDefinition(new DataExpression(ApplicationControl)); definition.StaffIdField.GetModelsByCode = val => { StaffsResult result = null; ServiceProxyFactory.LifeTime(factory => { var staffMaster = factory.Create <StaffMasterClient>(); result = staffMaster.GetByCode(SessionKey, CompanyId, val); }); if (result.ProcessResult.Result) { return(result.Staffs .ToDictionary(c => c.Code)); } return(new Dictionary <string, Staff>()); }; //その他 definition.DepartmentCodeField.ValidateAdditional = (val, param) => { var reports = new List <WorkingReport>(); if (((ImportMethod)param) != ImportMethod.Replace) { return(reports); } MasterDatasResult resultstaff = null; MasterDatasResult resultsectionWithDepartment = null; MasterDatasResult resultbilling = null; ServiceProxyFactory.LifeTime(factory => { var departmentMaster = factory.Create <DepartmentMasterClient>(); var codes = val.Values.Where(x => !string.IsNullOrEmpty(x.Code)).Select(x => x.Code).Distinct().ToArray(); resultstaff = departmentMaster.GetImportItemsStaff(SessionKey, CompanyId, codes); resultsectionWithDepartment = departmentMaster.GetImportItemsSectionWithDepartment(SessionKey, CompanyId, codes); resultbilling = departmentMaster.GetImportItemsBilling(SessionKey, CompanyId, codes);// }); foreach (MasterData ca in resultstaff.MasterDatas.Where(p => !val.Any(a => a.Value.Code == p.Code))) { reports.Add(new WorkingReport { LineNo = null, FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"営業担当者マスターに存在する{ ca.Code }:{ ca.Name }が存在しないため、インポートできません。", }); } foreach (MasterData ca in resultsectionWithDepartment.MasterDatas.Where(p => !val.Any(a => a.Value.Code == p.Code))) { reports.Add(new WorkingReport { LineNo = null, FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"入金・請求部門名対応マスターに存在する{ca.Code}:{ca.Name}が存在しないため、インポートできません。", }); } foreach (MasterData ca in resultbilling.MasterDatas.Where(p => !val.Any(a => a.Value.Code == p.Code))) { reports.Add(new WorkingReport { LineNo = null, FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"請求データに存在する{ca.Code}:{ca.Name}が存在しないため、インポートできません。", }); } return(reports); }; var importer = definition.CreateImporter(m => m.Code); importer.UserId = Login.UserId; importer.UserCode = Login.UserCode; importer.CompanyId = CompanyId; importer.CompanyCode = Login.CompanyCode; importer.LoadAsync = async() => await LoadListAsync(); importer.RegisterAsync = async unitOfWork => await RegisterForImportAsync(unitOfWork); var importResult = DoImport(importer, importSetting); if (!importResult) { return; } Clear(); var departmentProgress = new List <Department>(); departmentProgress.Clear(); Task <List <Department> > loadTask = LoadListAsync(); ProgressDialog.Start(ParentForm, loadTask, false, SessionKey); departmentProgress.AddRange(loadTask.Result); grdDepartment.DataSource = new BindingSource(departmentProgress, null); } catch (Exception ex) { Debug.Fail(ex.ToString()); NLogHandler.WriteErrorLog(this, ex, SessionKey); ShowWarningDialog(MsgErrImportErrorWithoutLog); } }
private void ExportData() { try { List <Department> list = null; var loadTask = ServiceProxyFactory.LifeTime(async factory => { var service = factory.Create <DepartmentMasterClient>(); DepartmentsResult result = await service.GetDepartmentAndStaffAsync(SessionKey, CompanyId); if (result.ProcessResult.Result) { list = result.Departments; } }); ProgressDialog.Start(ParentForm, Task.WhenAll(loadTask), false, SessionKey); if (!list.Any()) { ShowWarningDialog(MsgWngNoExportData); return; } string serverPath = GetServerPath(); if (!Directory.Exists(serverPath)) { serverPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); } var filePath = string.Empty; var fileName = $"請求部門マスター{DateTime.Today:yyyyMMdd}.csv"; if (!ShowSaveExportFileDialog(serverPath, fileName, out filePath)) { return; } var definition = new DepartmentFileDefinition( new DataExpression(ApplicationControl)); var exporter = definition.CreateExporter(); exporter.UserId = Login.UserId; exporter.UserCode = Login.UserCode; exporter.CompanyId = CompanyId; exporter.CompanyCode = Login.CompanyCode; ProgressDialog.Start(ParentForm, (cancel, progress) => { return(exporter.ExportAsync(filePath, list, cancel, progress)); }, true, SessionKey); if (exporter.Exception != null) { NLogHandler.WriteErrorLog(this, exporter.Exception, SessionKey); ShowWarningDialog(MsgErrExportError); return; } DispStatusMessage(MsgInfFinishExport); } catch (Exception ex) { Debug.Fail(ex.ToString()); NLogHandler.WriteErrorLog(this, ex, SessionKey); DispStatusMessage(MsgErrExportError); } }
/// <summary> /// インポート処理本体 /// </summary> /// <param name="source"></param> /// <param name="token"></param> /// <returns></returns> public async Task <ImportResult> ImportAsync(MasterImportSource source, CancellationToken token = default(CancellationToken)) { var mode = (ImportMethod)source.ImportMethod; var encoding = Encoding.GetEncoding(source.EncodingCodePage); var csv = encoding.GetString(source.Data); var companyTask = companyProcessor.GetAsync(new CompanySearch { Id = source.CompanyId, }, token); var loginUserTask = loginUserProcessor.GetAsync(new LoginUserSearch { Ids = new[] { source.LoginUserId }, }, token); var appConTask = applicationControlProcessor.GetAsync(source.CompanyId, token); var staffsTask = staffProcessor.GetAsync(new StaffSearch { CompanyId = source.CompanyId, }, token); await Task.WhenAll(companyTask, loginUserTask, appConTask, staffsTask); var company = companyTask.Result.First(); var loginUser = loginUserTask.Result.First(); var appCon = appConTask.Result; var staffDictionary = staffsTask.Result.ToDictionary(x => x.Code); var definition = new DepartmentFileDefinition(new DataExpression(appCon)); definition.StaffIdField.GetModelsByCode = codes => staffDictionary; var parser = new CsvParser { Encoding = encoding, StreamCreator = new PlainTextMemoryStreamCreator(), }; var importer = definition.CreateImporter(x => x.Code, parser); importer.UserId = source.LoginUserId; importer.UserCode = loginUser.Code; importer.CompanyId = source.CompanyId; importer.CompanyCode = company.Code; if (mode == ImportMethod.Replace) { importer.AdditionalWorker = async worker => { var codes = worker.Models.Values.Select(x => x.Code).Where(x => !string.IsNullOrEmpty(x)).Distinct().ToArray(); var staffItemTask = departmentProcessor.GetImportItemsStaffAsync(source.CompanyId, codes, token); var swdItemTask = departmentProcessor.GetImportItemsSectionWithDepartmentAsync(source.CompanyId, codes, token); var billItemTask = departmentProcessor.GetImportItemsBillingAsync(source.CompanyId, codes, token); await Task.WhenAll(staffItemTask, swdItemTask, billItemTask); var staffResult = staffItemTask.Result.ToArray(); var swdResult = swdItemTask.Result.ToArray(); var billResult = billItemTask.Result.ToArray(); (worker.RowDef as DepartmentFileDefinition).DepartmentCodeField.ValidateAdditional = (val, param) => { var reports = new List <WorkingReport>(); reports.AddRange(staffResult.Select(x => new WorkingReport { FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"営業担当者マスターに存在する{x.Code}:{x.Name}が存在しないため、インポートできません。", }).ToArray()); reports.AddRange(swdResult.Select(x => new WorkingReport { FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"入金・請求部門名対応マスターに存在する{x.Code}:{x.Name}が存在しないため、インポートできません。", }).ToArray()); reports.AddRange(billResult.Select(x => new WorkingReport { FieldNo = definition.DepartmentCodeField.FieldIndex, FieldName = definition.DepartmentCodeField.FieldName, Message = $"請求データーに存在する{x.Code}:{x.Name}が存在しないため、インポートできません。", }).ToArray()); return(reports); }; } } ; importer.LoadAsync = () => departmentProcessor.GetAsync(new DepartmentSearch { CompanyId = source.CompanyId, }, token); importer.RegisterAsync = x => departmentProcessor.ImportAsync(x.New, x.Dirty, x.Removed, token); var result = await importer.ImportAsync(csv, mode, token, null); result.Logs = importer.GetErrorLogs(); return(result); } }