/// <summary> /// 대시보드 테이블을 업데이트한다. /// </summary> public FormTable UpdateFormTable(Guid formId, IFormTableUpdatable fields) { using (var repo = new FormTableRepository()) { var formTable = repo.SelectFormTable(formId); if (formTable == null) { throw new ObjectNotFoundException($"업데이트 할 대상 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\""); } List <UpdatedField> updated = null; formTable.Update(fields, out updated); if (repo.UpdateFormTable(formTable)) { logger.Info($"대시보드 정보가 업데이트 되었습니다. 대시보드: \"{formTable.Name}\"" + $"\r\n\r\n" + $"updated: {UpdatedField.Print(updated)}" + $"\r\n\r\n" + $"{formTable}"); return(formTable); } return(null); } }
/// <summary> /// 대상 대시보드의 양식 HTML을 사본처리한다. /// </summary> public FormHtmlTemplate CopyFormHtmlTemplate(Guid formId, Guid templateId) { var newTemplateId = Guid.NewGuid(); using (var repo = new FormTableRepository()) { var form = repo.SelectFormTable(formId); if (form == null || form.IsDeleted) { throw new ObjectNotFoundException($"사본 처리 할 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\""); } var old = repo.SelectFormHtmlTemplate(formId, templateId); if (old == null) { throw new ObjectNotFoundException($"사본 처리 할 대시보드 양식을 찾을 수 없습니다.\r\n양식 ID: \"{templateId}\""); } repo.BeginTransaction(); try { // 1. 새 HTML 사본 레코드를 DB에 추가 var htmlTemplate = FormHtmlTemplate.CopyFrom(old, newTemplateId); if (repo.InsertFormHtmlTemplate(htmlTemplate)) { // 2. 대시보드가 참조하고 있는 HTML 양식 ID를 업데이트 form.HtmlTemplateId = newTemplateId; form.HtmlTemplate = htmlTemplate; repo.UpdateFormTable(form); repo.CommitTransaction(); logger.Info($"대시보드 양식이 사본 처리되었습니다. 대시보드: \"{old.FormName}\"" + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\"" + $"\r\n\r\n" + $"새 양식 정보: \r\n" + $"{htmlTemplate}"); return(htmlTemplate); } throw new InvalidOperationException($"대상 대시보드의 새 양식을 DB에 등록하지 못했습니다.\r\n대시보드: \"{form.Name}({formId})\"" + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\""); } catch (Exception ex) { logger.Error(ex, $"대시보드 양식을 사본 처리하는 도중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{form.Name}({formId})\""); try { repo.RollBackTransaction(); } catch (Exception rex) { logger.Fatal(ex, $"대시보드 양식을 사본 처리하는 함수에서 롤백 실행 중 치명적인 에러가 발생했습니다. 대시보드: \"{form.Name}({formId})\""); ExceptionDispatchInfo.Capture(rex).Throw(); // not reached } ExceptionDispatchInfo.Capture(ex).Throw(); return(null); // not reached } } }