220203(금) 문제해결정리

김민석·2023년 2월 3일
0

Today I Learned

목록 보기
25/30
post-custom-banner

[Q1] MA_CODEDTL이 어떤 컬럼인가요?
[Q2] 변수명이 스네이크로 되어있는데 어떤 경우에 카멜케이스를 쓰고 어떤 경우에 스네이크를 쓰는지 회사 내부 규칙 궁금합니다.
[Q3] DB테이블에 HR_MTNITYIDNF_MST를 조회해봤을때 DESC가 적혀있지않음.
[Q4] @DzApiService와 @DzApi의 차이점을 알고 싶습니다.
[Q5] 테이블 명세 관련 노란색 강조는 무엇을 뜻하는지 궁금
[Q6] 4번과 18번 컬럼이 중복인것인지, 다른 쓰임인건지?
[Q7] 사업자명(BIZAREA_NM), 신청자한글성명(KOR_NM)의 경우 테이블 명세에는 없고 설계서에는 사용되고 있는 경우 어떻게 처리?
[Q8] 시퀀스 처리문제 - 기존에 만들어진 시퀀스는 없는지? (ex.SQ_NO 컬럼),

[Q9] 테이블 컬럼 타입과 길이와 값이 매칭되지 않는다. 우리가 변경해서 쓰는건지?

(ex. SQ_NO의 경우 테이블명세는 number, 하지만 db상에는 varchar2
PAY_YN의 경우 설계서에는 YES, NO등 3글자이상 입력이 들어가야하나 db상에는 varchar크기설정이 1로 되어있음)

A) db 기준으로 해라

[Q10]. 대상기간급여내역이 조회되는 조건이 어떻게 되나요?

HR_MTNITYIDNF_DTL의 모든 컬럼이 조회되게하면 되는지,
MST테이블의 회사코드, 문서번호가 일치되는 내용만 조회되게 하면 되는지
MST테이블과 DTL테이블의 관계가 궁금합니다.

A) pk값 일치되게 쿼리 조인

Q11. 소스코드 수정시마다 서버 재실행하거나 담아야하는지?
데이터소스 조회, 수정사항 반영이 너무 지연되고있습니다. 서버도 꺼졌습니ㄷ ,,

[Q12] DzParamType.Body와 QueryString 차이가 뭔가요


13~20번 화상으로 진행함.

[Q13] 신청종류 cd -> data 표시하는방법*

컬럼 드롭다운 리스트에 사용할 데이터소스 파라미터매핑 확인

그 외에 다른 프론트엔드 FD 소스를 참조해야 아마 개발이 가능할거에요, 참고해야 개발이 쉬울 것 같습니다

[Q14] 조회 쿼리 대부분 Left join으로 사용하고있고, Left join으로 해야 모든 데이터가 mst에서 조회된다고 이해하고 있습니다. 쿼리에서 MA_BIZAREA_MST테이블은 inner join 쓰고 있는데 이유가 궁금합니다.


개발자 마음이다. 만약에 inner join 하게 된다면 값이 없다면 값이 안나올 수 있다. 
그걸 의도 한 것일 수도 있고, 일반적으로는 사업장이 보이지 않더라도 데이터는 보이게 하는 것이 맞다.
inner join을 꼭 써야한다는 그런 것은 없다. 설계자 마음이다.

[Q15] DTL테이블의 DOC, EMP경우 파라매터에 연결되는 컨트롤이 없는데, 이 경우의 파라매터 처리를 스크립트 말고 매핑으로 처리하는 방법은 있나요?

파라미터 매핑은 그리드 매핑도 가능합니다. 전에 설명을 안드렸던 것 같은데 이게 상황에 따라서는 자바스크립트로 매핑 해야할 수도 있어요.
방법은 이렇게 2가지가 있습니다.


function() {
  var currentRow = self.grid1.select();
  console.log(currentRow);

    return{
    doc_no: (typeof currentRow === 'undefined' || currentRow < 0) ? '' : self.grid1.getCellValue(currentRow, 'DOC_NO'),
    emp_no: (typeof currentRow === 'undefined' || currentRow < 0) ? '' : self.grid1.getCellValue(currentRow, 'EMP_NO')

  }
}

[Q16] 기존 helpcode로 자동으로 기능이 입력됬을 때, 그 코드는 어디서 볼 수 있나요?

추가기능 구현시 요구사항에 사원 도움창을 열어야 되서 참고하려고 합니다.

첨부해 준 다른 프론트엔드 FD 예제 소스를 참조

[Q17] 문서번호 : 자동채번등록 CLASS_CD ='17' 에 따라 채번

열심히 설명해주셨는데 화면녹화 실패, 흡수하지 못함. 추후 다시 질문 필요

[Q18 - 서민석] 블랙박스 api 설명, 암호화 로직?

내부적인 로직은 담당 개발자만 알 수 있다. 우리는 가져다가 잘 쓰면 된다. 내부적인 구조는 알 필요가 없다.
문제가 생길경우 담당 플랫폼 개발팀에 물어볼 수 있어요.

BlackBoxUtil BB = new BlackBoxUtil(this.getUserId(), this.getCompanyCode(), this.getGroupCode());

// 복호화
			List<EncParameter> encParameters = new ArrayList<>();			
			EncParameter encParameter = new EncParameter();
			encParameter.setKeyField("res_no");
			encParameter.setValueField("res_no");
			encParameter.setTargetField("res_no");
			encParameter.setEncryptStyle(EncryptStyle.JUMIN);
			encParameters.add(encParameter);
			BB.getDecryptTextList(items, encParameters);

BB.dispose();

[Q19] 젠킨스? how to?

Jenkins

: 소프트웨어의 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역의 저장소에 
  지속적으로 업로드하여 CI (지속적인 통합)이 가능하도록 하는 도구
: Git과 같은 버전관리 시스템과 연동하여 소스의 커밋을 감지하면 테스트가 포함된 빌드가 작동

간단한 거라고 시연 보여줬음.

[Q20 - 서민석] queryformodel과 queryforobject 둘중 queryformodel만 datasource에 조회되는 이유

모델에 보면 이 변수가 뭘 의미하는지 어노테이션 다 적혀있잖아요?
모델에 대한 설명들이 다 저장이 되어있는데 object 객체로 하면 요런 데이터가 하나도 없으니까 조회가 안되지 않을까 싶거든요
select만 데이터 소스에 넣지 외에 update, insert등은 반환 될 필요가 없는 경우 데이터 소스에 조회되지 않아요.
update, insert는 넣지 않습니다.
리턴이 있어봣자 몇개 삭제됬는지 갯수정도라..

추가내용1 - post,batchSave

저는 batchSave를 추천하지 않아요. 역으로 제가 추적을 한거잖아요? 
저는 이렇게 하는것보다 data쪽에 넘기는 값을 지정하는 post를 추천해요. post로 보낸다고 트랜젝션을 안거는건 아니거든요. 

// post 사용법
dews.api.post(dews.url.getApiUrl('HR', 'PAMMPM00200_SERVICE', 'Pammpm00200_MasterData_save'),
	{
		async: false,
		data: {
			PAMMPM00200_SERVICE: JSON.stringify(self.PAMMPM00200_SERVICE.getDirtyData()),
			orgin_detail: JSON.stringify(self.detail.getDirtyData())
			 }
	}

// batchSave 사용법
dews.api.batchSave(dews.url.getApiUrl('HR', 'PAMMPM00200_SERVICE', 'Pammpm00200_MasterData_save'),
                self.PAMMPM00200_SERVICE, self.detail

추가내용2 - 트랜젝션 언급

예를 들어 여러 데이터를 한번에 삭제하는데 그중에서 하나가 잘못되면 그 작업하고있는 삭제내역을 원복시키고 원래 그대로 있게 만들게 하려고 사용하는 것. 

DbTransaction transaction = null; 선언했으면
transaction = this.beginTransaction(); 으로 시작하고
transaction.commit(); 하거나
transaction.rollback(); 한다.

[Q21 - 서민석] 조회시 디폴트값이 뜨지 않는이유가 궁금합니다. helpParams 설정문제이거나 BIZAREA_NM,RSPT_EMP_NM 컬럼이 HR_MTNITYIDNF_MST 테이블에 없는 문제가 관계있나요?

내부해결 - model에 컬럼유무 및 select 쿼리에 컬럼을 가져오지 않아 디폴트값이 뜨지 않고 있었음.

[Q22] 마감기능관련 마감시 바로 db에 저장되게되는데 저장버튼이 따로있음에도 저장기능을 추가로 만든 이유와 의도가 궁금합니다.

질문 안했던거 같음. 따로 저장 안할경우 다른 컬럼 수정사항도 날아가므로 즉시 저장되게 설계했을 것으로 추정. 

[Q23] 도움창을 새로 만들게 되는지, 만들게 된다면 commonhelp에 있는 이름ex.H_HR_EMP_MST_S11등과 일치가 되어야 하는데, 이곳에 파일 추가해서 작업하면될까요?

commonhelp 는 공통 도움창입니다
공통적으로 많이 쓰는 도움창을 사용하는곳입니다. 개발하려는 기능이 commonhelp 에 없다면 커스텀으로 새롭게 만들어야 합니다.
commonhelp 에는 만들지 않습니다

[Q24] BIZAREA 뜻, 발음

24번 사업장 의미입니다

[Q25 - 상연] 우편번호피커 zipcode의 경우에 jibun등의 메소드를 D-Business에서 확인 할 수 있었으나 . e.zonecode 의 경우 사용되고있지만 해당내용은 없었습니다. 관련 메소드를 확인할 수 있는 방법이 따로 있을까요?

데이터 리턴되는부분 확인해보니까 같네요 zipcode 랑 zonecode랑.
내부적으로 소스그래프 검색해본결과 zipcode 쓰는 경우가 대부분이고
zonecode 는 3건이 끝입니다
그냥 zipcode로 진행하세요 히스토리를 알기가 어렵습니다
최초 개발할때는 zonecode 쓰다가 zipcode로 넘어올수도 있고 그런건 해당 api 를 개발한 개발자만 아는데 쉽지 않네요


추가질문 - Q 그러면 그런 메소드는 스크립트에서도 따로 설명을 알 수 가 없어서(다른 메서드와는 달리) 그냥 DBS에서 암기하는 방법 밖에는 없는 건가요?

음... 저같은 경우 암기했던 메소드는 없습니다 그냥 필요할때 개발자 문서 들어가서 찾아서 씁니다

[Q26 - 서민석] 네임스페이스를 잡아도 Mapperd Statements collection does not contain value 에러가 나오는 경우 조치방법

-원격조치-

내부적으로 어떤 XML 파서를 쓰는지 모르겠지만 순차적으로  xml 을 파싱하는것으로 보입니다 xml 안에 파싱이 불가능한 부분이 있었습니다
xml 코드를 잘못작성 한 부분이 있어서 그 아래부터는 작동을 매퍼에 등록을 못한겁니다
잘못된 코드가 있어 매퍼에 등록도 안된건고 결국 작동을 안하는거죠
xml 파서가 또 순차적으로 파싱해서 지금 마감 update 태그만 가장 최상위로 올려서 해결한겁니다
어디에서 잘못된건지는 본인이 찾아야해요

[Q27 - 서민석] 기간피커 초기값 미설정시 디테일 그리드 조회가 되지않는 현상 -> 조치중

[Q28] db테이블컬럼중에 설계서에서 적혀있는 한글이름(직급,직위 등)이 어떤 컬럼인지 확인 할 수 있는 노하우?

이클립스(STS) 콘솔창에 어떤작업을 하던 쿼리문이 다뜨게 되어있는데
다른 메뉴에서 직급 직위를 codehelp 로 선택하는 부분있으면 선택할때 쿼리문 확인해서 하는 방법이 있습니다
이외에도 공통 코드등록 부분이 있는데
https://dev.comet.duzon.net/MA/BASSEC00100
이렇게 확인하는 방법도 있습니다

DEPT_NM 같은거는 MA_DEPT_IF 테이블이 있고 
부서 사업장 코스트센터 같은 큰 그룹은 전용 테이블이 있고 
소속 직위같은 같은건 공통코드에 주로있습니다
나중에 메뉴 개발해보면 자주쓰게되어서 알게됩니다

[Q29] 직급,직군,소속,직위은 HR_EMP_MST테이블 안에 PSTN_NM,OGRP_NM,DEPT_NM,POSI_NM은 없고, PSTN_CD,OGRP_CD,DEPT_CD,POSI_CD만 존재합니다. CD로 NM을 구할 수 있나요?

참고 쿼리
   SELECT HEM.COMPANY_CD AS COMPANY_CD,
          HEM.EMP_NO AS EMP_NO,
          HEM.KOR_NM AS KOR_NM,
          HEM.BIZAREA_CD AS BIZAREA_CD,
          MBM.BIZAREA_NM AS BIZAREA_NM,
          MCD1.SYSDEF_NM AS EMP_TP_NM,
          MCD2.SYSDEF_NM AS PSTN_NM,
          MCD3.SYSDEF_NM AS OGRP_NM,
          MCD4.SYSDEF_NM AS POSI_NM 
     FROM HR_EMP_MST HEM
LEFT JOIN MA_DEPT_MST MDM
       ON HEM.COMPANY_CD = MDM.COMPANY_CD
      AND HEM.DEPT_CD = MDM.DEPT_CD
      AND MDM.DEPT_START_DT <= TO_CHAR(SYSDATE, 'YYYYMMDD')
	  AND (MDM.DEPT_END_DT > TO_CHAR(SYSDATE, 'YYYYMMDD') OR MDM.DEPT_END_DT IS NULL OR MDM.DEPT_END_DT = ' ')   
LEFT JOIN MA_BIZAREA_MST MBM
       ON MBM.BIZAREA_CD = HEM.BIZAREA_CD
      AND MBM.COMPANY_CD = HEM.COMPANY_CD
LEFT JOIN MA_CODEDTL MCD1
       ON MCD1.COMPANY_CD = HEM.COMPANY_CD
      AND MCD1.MODULE_CD = 'HR'
      AND MCD1.FIELD_CD = 'P00220'
      AND MCD1.SYSDEF_CD = HEM.EMP_TP
LEFT JOIN MA_CODEDTL MCD2
       ON MCD2.COMPANY_CD = HEM.COMPANY_CD
      AND MCD2.MODULE_CD = 'HR'
      AND MCD2.FIELD_CD = 'P00650'
      AND MCD2.SYSDEF_CD = HEM.PSTN_CD
LEFT JOIN MA_CODEDTL MCD3
       ON MCD3.COMPANY_CD = HEM.COMPANY_CD
      AND MCD3.MODULE_CD = 'HR'
      AND MCD3.FIELD_CD = 'P00660'
      AND MCD3.SYSDEF_CD = HEM.OGRP_CD
LEFT JOIN MA_CODEDTL MCD4
       ON MCD4.COMPANY_CD = HEM.COMPANY_CD
      AND MCD4.MODULE_CD = 'HR'
      AND MCD4.FIELD_CD = 'P00640'
      AND MCD4.SYSDEF_CD = HEM.POSI_CD
    WHERE 1=1
      AND HEM.COMPANY_CD = 'HR01

[Q30] DFD에서 id는 대문자인경우도 소문자인 경우도 있는데 어느쪽이 약속인지 궁금합니다.

30번같은경우 저같은경우 대문자로 처리하는데 꼭 답이 있는건 아니지만 대부분의 개발자들이 쓰는 명명규칙을 쓰면 좋습니다

[Q31 - 선형] 해당 사진의 대상등급과 승급등급이 어느 FIELD인지 궁금합니다

지금 배포된 소스코드 확인해보니 대상등급과 송급등급 CD값을 그대로 쓰고있습니다 코드등록의 데이터를 활용하지 않고 그대로 쓰네요

[Q32 - 상연,김민석] maven update시 192.168.0.14로 로딩 지연되는 현상

  1. Preferences-Maven-User Settings-settings.xml을 확인하여 ID,PS확인
  2. pom.xml의 repositories 수정
  <repositories>
    <!-- douzone nexus down repo -->
    <repository>
      <id>nexus</id>
      <name>comet2020-group</name>
      <url>https://repo.comet.duzon.net/repository/comet2020-group/</url>
    </repository>
  </repositories>
  

[Q33 - 선형] 혹시 승급기준표등록 메뉴에서 종전자료복사가 select 후 insert를 하게 되어있는데 이게 이전 자료를 데이터베이스에 insert하라는 의미인가요?

지금 만드려는 기준년월이 2023.01 기준이고
기존에는 2022.01, 2022.07 값 2개가 있다고 하면
기존에 있는 2022.07 값을 그대로 복사하여 2023.01 에다가 넣어주는 기능같아보입니다
물론 기준년월 컬럼인 STD_YM 컬럼은 2023.01 로 변경하고요
아마 처리방법이 SELECT INTO 절을 써서 바로 백엔드에서 처리하는 방법 이 있을 수 있고 프론트에서 기존 내역을 불러와 새롭게 입력한것처럼 처리할수도 있을것같습니다

[Q34 - 선형] 그리고 혹시 자료 업로드 기능 구현 때 엑셀 업로드 화면을 띄우는데 이게 dialog를 띄우는 것인지 아니면 실제 엑셀화면을 띄우는 것인지 궁금합니다....!

https://dbs.douzone.com/docs/UI/Document/%EC%97%91%EC%85%80%EC%B2%98%EB%A6%AC/docs/grid_excel
참고하시면 될것같습니다. 링크에 있는 엑셀 import 기능 구현하면 될것같아요

[Q35] 서브페이지 오픈시 url의미, dews.ui.page와 dialog차이

dews.ui.page.openSubPage 는 안쓰는 경우가 대부분이고
일부 메뉴에서 쓰고있습니다
오래되어 수정이 좀 힘든 html 파일만 남아있는 메뉴 주로 있고요
컨설턴트가 정해주면 쓰긴해야하는데 대부분 잘안씁니다


Q 어떤경우는 ~/ 또 /HR/ 이렇게 되는데 기준이 되는 위치를 잘 모르겠습니다

패키지면 view/HR로 개발해도 괜찮습니다 신규 개발이 대부분 업체전용일꺼에요 패키지 신규개발은 대부분없는데 업체전용 개발시 위치는 컨설턴트 통해서 받아야합니다 저같은경우 /view/CX/ 이런식으로 간적도 있고 다양해요
지금 개발할때는 딱히 상관없습니다

C:\DOUZONE\dews-web\repository 위치가 기본 위치

[조치내용]
C:\DOUZONE\dews-web\repository\view\js에 d-erp.main.js 추가

서브페이지 빌드하면 해당 위치에 html 파일 생성 이후 js에 url 매핑하면 해당 서브페이지가 열림.

    // Dialog 예제
    // let dialog = dews.ui.dialog('ESSODM01400_X10005_Sub', {
    //     title: '결근신청 및 조회',
    //     url: '/view/HR/ESSODM01400_X10005_Sub',
    //     data: { status: 'insert' },
    //     callback: function () {
    //         console.log("들어왔습니다 !!!");
    //     }
    // });
    // dialog.open();

    //SubPage 예제
    // dews.ui.page.openSubPage('ESSODM01400_X10005_Sub', {
    //     title: '결근신청 및 조회',
    //     url: '/view/HR/ESSODM01400_X10005_Sub',
    //     data: { status: 'insert' },
    //     callback: function () {
    //         console.log("들어왔습니다 !!!");
    //     }
    // });

[Q36 - 선형] 엑셀업로드 화면호출 (모듈과 검색어를 파라미터로 전달) 이라고 되어있는데 openMenu로 새로운 화면을 만들어서 이를 띄우는 것인지 궁금합니다! 이 때 새로운 화면 설계는 어떻게 해야하는지도 궁금합니다.

https://dbs.douzone.com/docs/UI/Document/%EC%97%91%EC%85%80%EC%B2%98%EB%A6%AC/docs/grid_excel

grid.importExcel 부분 확인하시면됩니다

김주현 주임 연구원님 혹시 저 엑셀업로드 화면 호출시에 모듈명과 검색어를 파라미터로 전달한다는 것이 무슨 뜻인지 잘 모르겠습니다
self.$uploadBtn.on('click', function (e) {
    dews.ui.openMenu('MA', 'BASSCC01300', { 'MODULE_CD': 'HR', 'TABLE_ID': 'HR_URGDBASETBL_INFO_X10005' });
});이런식으로 화면을 호출하게 되어있는데 저도 이런 식으로 메뉴를 하나 더 만들면 되는 건가요....?

BASSCC01300 메뉴랑은 다른것같은데요
제가 보는 git 에는 openMenu 주석처리되어있습니다

[Q37 - 상연] ABLTCLSFCT_CD 해당 컬럼은 어떤 테이블에도 없는거 같은데 이 경우는 어떻게 컬럼을 찾는지 알 수 있을까요?

max 값은 HR_JOBDIVBASE_MST.VER_CD 로 하면 될것같습니다





SELECT *
  FROM DBA_TAB_COLUMNS
 WHERE COLUMN_NAME = 'ABLTCLSFCT_CD' 
 
 
 뭔가.... 설계문서에 문제가 있던것 같아보입니다

[Q38 - 상연] 직무분류관리 프로젝트 진행 중인데 설계서를 보면 조회조건으로 대중소세분류와 능력단위코드도움창을 사용하고 있습니다. 코드도움의 경우 별도의 페이지가 있어 해당 페이지를 여는 방법이 따로 있을까요?


능력단위코드도움창이 설계서에 화면으로 보여져있나요? 능력단위분류코드 : ACLF_CD,ACLF_NM, 도움창 조회(신규) 
아님 그냥 문자로 되어있는거 보고 말하시는건가요?

그리드가 3개냐 1개냐에 따라서 2개로 만들수도 있을것같긴한데 
개발하면서 어떤게 편한지는 직접 판단해서 개발하면 될것같습니다

추가적으로 heplcode를 커스텀하는 방법도 알고 싶습니다!!
helpcode를 커스텀하는게 아니라 Dialog 페이지를 새로 만든다고 보면 좋을것같습니다

확인해보니까 백엔드에서 만드는 방법 아닌 약간 꼼수적으로 개발했네요
DEWS FD 에서 일단 도움창 페이지 만든다음에 helpCode 에는 도움창 ID값을 넣어줬고요

helpURLCustom 에는 \view\HR\{메뉴ID} 값을 넣어줬네요
그리고 codeField, textField 값은 
도움창 페이지 ready 부분 에서 thisDialog.ok 리턴값으로 처리하네요

2023.02.07 () 16:16 김주현 
dews.ready(function () {
    var self = this;

    self.version = self.version || {};
    self.version.view='1.0';


    var thisDialog = dews.ui.dialog(self.$content.prop("id"));
    var initParams = thisDialog.initData.params;
    var resultObj = {};
    
    // console.log("thisDialog.buttons:", thisDialog.buttons);
    
    
    thisDialog.buttons.ok.on('click', function (e) {
      if (isSingleCodePicker()) {
        var mstData = self.classCodeGrid.dataItems(self.classCodeGrid.select());
        thisDialog.ok({
          CLAS_CD: mstData.CLAS_CD,
          CLAS_NM: mstData.CLAS_NM
        });
      } else {
        var rows = self.classCodeGrid.getCheckedRows(); // 체크된 행들의 데이터를 배열로 저장
        if (rows.length <= 0) { // 선택된 행들이 없으면
          dews.ui.snackbar.warning(dews.localize.get('적용할 코드를 선택해주세요.', 'M0014354'));
        } else {
          thisDialog.initData
          thisDialog.ok(rows); // 호출한 페이지로 데이터 전달
        }
      }
    });

위 코드에서 codeField/textField 값은 CLAS_CD, CLAS_NM 입니다

23.02.08(수) douzone

전날 서브페이지를 열기 위한 메소드 dews.ui.page.openSubPage가 작동하지않아
프론트 npm개발환경 실습하기로 함.

다음과 같은 파일들을 전달 받았고 설치 진행하였음.


FD역시 출력 경로를 일치시켜줘야 함.

profile
뉴비개발자
post-custom-banner

0개의 댓글