コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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
                }
            }
        }