2022.12.19TIL(pj416 트러블슈팅)

SaGo_MunGcci·2022년 12월 19일
0

C#

목록 보기
19/27

트러블슈팅

pj416은 pj411~415까지의 화면의 데이터를 받아서 활성화되는 화면이다. 즉 단독으로 사용되지 못하는 화면이다.

단독으로 사용할 시 AMessageBox.Show("경고", "해당화면은 단독으로 띄울수 없습니다.");로 경고창을 띄우면서 닫아지긴 지는데 다른화면에서 데이터를 받아와도 위의 메시지가 띄워지면서 닫혀지는 문제였다.

문제점

 private void VHMGCPJ416S_Shown(object sender, EventArgs e)
 {
   VerifiedForm();
   AMessageBox.Show("확인", "폼_쇼운");

}

 private void VerifiedForm()
 {
   if (cbtest.EditValue.IsNullOrEmpty())
      {
      AMessageBox.Show("경고", "해당화면은 단독으로 띄울수 없습니다.");
      this.Close();
     }         
  }

디버깅한 결과 pj416이 단독으로 띄워지거나, 다른화면을 통해서 띄워지거나
cbtest.EditValue가 null인 문제였다. 왜냐하면 다른화면에서 넘어와도 폼생성시에
cbtest.EditValue는 null인상태에서 만들어져서 그다음 데이터를 받는 메서드로 가기 때문이다.

따라서 다른화면에서 데이터를 받지않으면 단독화면으로 인식하게해서 메시지를 띄워주고 이게 아니라면 단독화면으로 인식해서 경고메시지를 띄움과 동시에 창을 닫게해주어야 했다.

그런데 아무리해봐도 단독화면을 실행할때는 이전화면에서 화면간 데이터전달이 되지 않기때문에 데이터를 받아오는 메서드가 작동이 되지않으면서 단독화면으로 인식하지 못하는 것이었다.

한참을 해메대가 과장님께 말씀드리니

놓친부분 1)
form_shown에 대해서 말씀해 주셨다.

화면은 기본적으로 form_Load, form_Shown, form_paint순으로 만들어진다.

form_Load는 화면이 만들어지기 시작한 직후
form_Shown은 화면이 다만들어지기 직전
form_Paint은 화면이 만들어지고 난 직후이다.

꽤나 복잡한데 form_shown은 화면내부의 모든 이벤트가 활성화가 되고 컨트롤또한 활성화가 되지만 완성되기 0.1초전이다. 따라서 화면을 완전히 그리긴 그린것이다.

놓친부분2)

다른화면에서 pj416으로 넘어온 데이터를 받는 메서드가

public override object OnObjectDicReceived(string senderScreen, string messageID, Dictionary<string, object> objectDic)
 {
        ...       
}

인데 이 넘겨온 데이터 Dictionary<string, object>가 있으면 다른화면에서 넘어온 화면이고 없으면 단독화면으로 인식하게 끔하면 된다.

즉 기준이 Dictionary<string, object> 이것이다. (cbtest.EditValue가 아니다.)

놓친부분1) + 놓친부분2)를 한 결론은

화면이 그려지고 최종적으로 이전화면에서 넘어온 데이터가 있는지 없는지 판별하는 순간은
Form_Shown에서 이루어지고 이전화면에서 데이터가 넘어왔는지 안넘어 왔는지 판단하는 객체는
Dictionary<string, object>로 판별하는 것이다.

pj416 전체 완성본

--해놓은것 잘보기

using AMIS3.UIFramework;
using AMIS3.UIFramework.DataModel;
using AMIS3.UIFramework.UI;
using AMIS3.UIFramework.UI.Controls;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using AMIS3.HM.ZZ;

namespace AMIS3.HM.GC.PJ416
{
    public partial class VHMGCPJ416S : ScreenBase, ISmartToolbar
    {
        private object oSynthCd;

        // 2022.11.24 / 박민준 / 해당 콤보박스 종합코드 받는 전역변수 추가        
        private String classify;        

        public List<ActionButtonItem> ActionButtonItems { get; set; }

        private DataTable dtList = new DataTable();
        
        ------------------------------------------------------------
        
        private Dictionary<string, object> mCreateParam;
        GZCDCORCD mTextCode;
        public VHMGCPJ416S()
        {
            InitializeComponent();
            SetControl();
            SetEvent();

            mTextCode = new ZZ.GZCDCORCD("CanStomach1", "CanStomach2", "CanLung", "CanCervix", "CanBreast", "CanLiver", "CanColon1", "CanColon2", "CanColon3");
        }
     
     ------------------------------------------------------------------
        private void SetEvent()
        {           
            DocumentService.ChangeActionButtons(this);           
        }      

        private void SetControl()
        {            
            // 그리드 row순번표시
            grvSuasion.SetCustomDrawRowIndicatorRowNum();   
            

           
        }
        private void VHMGCPJ416S_Load(object sender, EventArgs e)
        {
            AMessageBox.Show("확인", "폼로드");
        }

        private void VHMGCPJ416S_Shown(object sender, EventArgs e)
        {
            VerifiedForm();
            AMessageBox.Show("확인", "폼_쇼운");

        }

        private void VHMGCPJ416S_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            AMessageBox.ShowInstant("폼_페인트");
        }

        // 2022.12.16 / 박민준 / 콤보박스에 데이터가 없을시 단독으로 띄울수 없게 추가
        private void VerifiedForm()
        {
            if (mCreateParam == null)
            {
                AMessageBox.Show("경고", "해당화면은 단독으로 띄울수 없습니다.");
                this.Close();
            }           
           
        }

        // 2022.11.29 / 박민준 / 데이터 전달 받는 메서드 추가
        public override object OnObjectDicReceived(string senderScreen, string messageID, Dictionary<string, object> objectDic)
        {
            //VerifiedForm();
            mCreateParam = objectDic;

            if (objectDic.ContainsKey("synthCd"))
            {
                oSynthCd = objectDic["synthCd"];
            }

            // pj410에서 전달한 데이터를 받아오는 부분            
            string some = objectDic["key"].ToString();

            // 위암
            if (some == "stomachCancerA") // 위장조영
            {
                InitComboBoxStmCancerA();
            }

            if (some == "stomachCancerB") // 위내시경
            {
                InitComboBoxStmCancerB();
            }

            // 대장암
            if (some == "CanColonA") // 분변잠혈검사
            {
                InitComboBoxCanColonA();
            }

            if (some == "CanColonB") // 대장이중조영검사
            {
                InitComboBoxCanColonB();
            }

            if (some == "CanColonC") // 대장내시경
            {
                InitComboBoxCanColonC();
            }

            if (some == "CanLiverA") // 간암
            {
                InitComboBoxCanLiverA();
            }

            if (some == "CanCervixA") // 자궁경부암
            {
                InitComboBoxCanCervixA();
            }

            if (some == "CanBreastA") // 유방암
            {
                InitComboBoxCanBreastA();
            }

            if (some == "CanLungA") // 폐암
            {
                InitComboBoxCanLungA();
            }

            return String.Empty;

        }


       

        // 2022.11.29 / 박민준 / 위장조영 전용 콤보박스 추가
        public void InitComboBoxStmCancerA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");            

            dt.Rows.Add("1.이상소견없음 또는 위염", "1");
            dt.Rows.Add("2.양성질환", "2");
            dt.Rows.Add("3.위암 의심", "3");
            dt.Rows.Add("4.위암", "4");
            dt.Rows.Add("5.기타()", "5");
            
            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanStomach1";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }


        // 2022.11.29 / 박민준 / 위내시경 전용 콤보박스 추가
        public void InitComboBoxStmCancerB()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음 또는 위염", "1");
            dt.Rows.Add("2:양성질환", "2");
            dt.Rows.Add("3:위암 의심", "3");
            dt.Rows.Add("4:위암", "4");
            dt.Rows.Add("5:기타()", "5");           

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanStomach2";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }

        // 2022.11.29 / 박민준 / 분변잠혈반응검사 전용 콤보박스 추가
        public void InitComboBoxCanColonA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음 또는 위염", "1");
            dt.Rows.Add("2:대장폴립(용종)", "2");
            dt.Rows.Add("3:대장암 의심", "3");
            dt.Rows.Add("4:대장암", "4");
            dt.Rows.Add("5:기타", "5");
            dt.Rows.Add("6:잠혈반응없음", "6");
            dt.Rows.Add("7:잠혈반응있음", "7");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanColon1";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }

        // 2022.11.29 / 박민준 / 대장이중조영검사 전용 콤보박스 추가
        public void InitComboBoxCanColonB()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음 또는 위염", "1");
            dt.Rows.Add("2:대장폴립(용종)", "2");
            dt.Rows.Add("3:대장암 의심", "3");
            dt.Rows.Add("4:대장암", "4");
            dt.Rows.Add("5:기타", "5");
            dt.Rows.Add("6:잠혈반응없음", "6");
            dt.Rows.Add("7:잠혈반응있음", "7");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanColon2";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }

        // 2022.11.29 / 박민준 / 대장내시경 전용 콤보박스 추가
        public void InitComboBoxCanColonC()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음 또는 위염", "1");
            dt.Rows.Add("2:대장폴립(용종)", "2");
            dt.Rows.Add("3:대장암 의심", "3");
            dt.Rows.Add("4:대장암", "4");
            dt.Rows.Add("5:기타", "5");
            dt.Rows.Add("6:잠혈반응없음", "6");
            dt.Rows.Add("7:잠혈반응있음", "7");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanColon3";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }

        // 2022.11.29 / 박민준 / 간암 전용 콤보박스 추가
        private void InitComboBoxCanLiverA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:간암 의심소견 없음", "1");
            dt.Rows.Add("2:추적검사 요망(3개월 이내)", "2");
            dt.Rows.Add("3:간암 의심(정밀 검사 요망)", "3");
            dt.Rows.Add("4:기타", "4");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanLiver";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();
        }

        // 2022.11.29 / 박민준 / 자궁경부암 전용 콤보박스 추가
        private void InitComboBoxCanCervixA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음", "1");
            dt.Rows.Add("2:반응성 소견 및 감염성 질환", "2");
            dt.Rows.Add("3:비정형 상피세포 이상", "3");
            dt.Rows.Add("4:자궁경부암 전구단계 의심", "4");
            dt.Rows.Add("5:자궁경부암의심", "5");
            dt.Rows.Add("6:기타", "6");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanCervix";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();

        }

        // 2022.11.29 / 박민준 / 유방암 전용 콤보박스 추가
        private void InitComboBoxCanBreastA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음", "1");
            dt.Rows.Add("2:양성질환", "2");
            dt.Rows.Add("3:유방암의심", "3");
            dt.Rows.Add("4:판정유보", "4");            

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanBreast";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();
        }

        // 2022.11.29 / 박민준 / 폐암 전용 콤보박스 추가
        private void InitComboBoxCanLungA()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Text");
            dt.Columns.Add("Value");

            dt.Rows.Add("1:이상소견없음", "1");
            dt.Rows.Add("2:양성결절", "2");
            dt.Rows.Add("3:경계선 결절", "3");
            dt.Rows.Add("4:폐암의심", "4");
            dt.Rows.Add("4:폐암 매우 의심", "5");

            cbtest.SetDataSource(dt, "Text", "Value", AComboFirstValueType.All);

            classify = "CanLung";

            // 2022.11.29 / 박민준 / 전용 콤보박스 생성 동시에 전체 검색.
            GetCodeList();
        }


        // 2022.11.29 / 박민준 / 콤보박스 컨텐츠 선택
        private void cbtest_SelectedIndexChanged(object sender, EventArgs e)
        {
            AComboBox cb = sender as AComboBox;
            cbtest.Text = cb.SelectedItem.ToString();
            cbtest.EditValue = cb.EditValue.ToString();
        }

        // 조회하기 버튼 이벤트
        private void btnSearch_Click(object sender, EventArgs e)
        {
            GetCodeList();
        }

        // 2022.11.29 / 박민준 / 해당 테이블 생성 
        private void GetCodeList()
        {
            try
            {
                dtList = new DataTable();

                DataTable dtCanStomach1 = mTextCode.Get("CanStomach1");
                DataTable dtCanStomach2 = mTextCode.Get("CanStomach2");
                DataTable dtCanLung = mTextCode.Get("CanLung");
                DataTable dtCanCervix = mTextCode.Get("CanCervix");
                DataTable dtCanBreast = mTextCode.Get("CanBreast");
                DataTable dtCanLiver = mTextCode.Get("CanLiver");
                DataTable dtCanColon1 = mTextCode.Get("CanColon1");
                DataTable dtCanColon2 = mTextCode.Get("CanColon2");
                DataTable dtCanColon3 = mTextCode.Get("CanColon3");
                
                dtList = mTextCode.Get(classify).Copy();  

                dtList.Columns["dtlCd"].ColumnName = "dtlCd";
                dtList.Columns["atriVal1"].ColumnName = "atriVal1";
                dtList.AcceptChanges();
                dtList.DefaultView.Sort = "dtlCd ASC";
                grdSuasion.DataSource = dtList;

            }

            catch (Exception ex)
            {
                AMessageBox.Show("에러", ex.Message);
                return;
            }
        }

        // 조회하면서 해당 권고사항 반환하기
        private void btnConfirm_Click(object sender, EventArgs e)
        {
            OnOkAction();            
        }

        // 2022.11.29 / 박민준 / 선택한 권고사항을 해당 판정폼에 전달
        private void OnOkAction()
        {
            // 해당 선택한 열의 권고사항 컬럼값을 StringBuilder로 생성
            StringBuilder sb = new StringBuilder();

            foreach (int id in grvSuasion.GetSelectedRows())
            {               
                sb.Append(grvSuasion.GetRowCellValue(id,"atriVal1") as object);
            }          

            // 위장조영일때
            if (classify == "CanStomach1")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanStomach1", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ410S", "Msg01", dicRes, "AMIS3.HM.GC.PJ410.dll");

                //this.ParentForm.Close();
                this.Close();
            }

            // 위내시경일때
            if (classify == "CanStomach2")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanStomach2", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ410S", "Msg01", dicRes, "AMIS3.HM.GC.PJ410.dll");               
                this.Close();
            }

            // 분변잠혈반응검사
            if (classify == "CanColon1")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanColon1", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ411S", "Msg01", dicRes, "AMIS3.HM.GC.PJ411.dll");
                this.Close();
            }

            // 대장이중조영검사
            if (classify == "CanColon2")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanColon2", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ411S", "Msg01", dicRes, "AMIS3.HM.GC.PJ411.dll");
                this.Close();
            }

            // 대장내시경
            if (classify == "CanColon3")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanColon3", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ411S", "Msg01", dicRes, "AMIS3.HM.GC.PJ411.dll");
                this.Close();
            }

            // 간암
            if (classify == "CanLiver")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanLiver", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ412S", "Msg01", dicRes, "AMIS3.HM.GC.PJ412.dll");
                this.Close();
            }

            // 자궁경부암
            if (classify == "CanCervix")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanCervix", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ413S", "Msg01", dicRes, "AMIS3.HM.GC.PJ413.dll");
                this.Close();
            }

            // 유방암
            if (classify == "CanBreast")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanBreast", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ414S", "Msg01", dicRes, "AMIS3.HM.GC.PJ414.dll");
                this.Close();
            }
            
            if (classify == "CanLung")
            {
                Dictionary<string, object> dicRes = new Dictionary<string, object>();
                dicRes.Add("CanLung", sb);

                object ret = this.SendObjectDicToScreen("VHMGCPJ415S", "Msg01", dicRes, "AMIS3.HM.GC.PJ415.dll");
                this.Close();

            }

        }

       

    }
}


profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글