[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 컬럼),
(ex. SQ_NO의 경우 테이블명세는 number, 하지만 db상에는 varchar2
PAY_YN의 경우 설계서에는 YES, NO등 3글자이상 입력이 들어가야하나 db상에는 varchar크기설정이 1로 되어있음)
A) db 기준으로 해라
HR_MTNITYIDNF_DTL의 모든 컬럼이 조회되게하면 되는지,
MST테이블의 회사코드, 문서번호가 일치되는 내용만 조회되게 하면 되는지
MST테이블과 DTL테이블의 관계가 궁금합니다.
A) pk값 일치되게 쿼리 조인
Q11. 소스코드 수정시마다 서버 재실행하거나 담아야하는지?
데이터소스 조회, 수정사항 반영이 너무 지연되고있습니다. 서버도 꺼졌습니ㄷ ,,
13~20번 화상으로 진행함.
컬럼 드롭다운 리스트에 사용할 데이터소스 파라미터매핑 확인
그 외에 다른 프론트엔드 FD 소스를 참조해야 아마 개발이 가능할거에요, 참고해야 개발이 쉬울 것 같습니다
개발자 마음이다. 만약에 inner join 하게 된다면 값이 없다면 값이 안나올 수 있다.
그걸 의도 한 것일 수도 있고, 일반적으로는 사업장이 보이지 않더라도 데이터는 보이게 하는 것이 맞다.
inner join을 꼭 써야한다는 그런 것은 없다. 설계자 마음이다.
파라미터 매핑은 그리드 매핑도 가능합니다. 전에 설명을 안드렸던 것 같은데 이게 상황에 따라서는 자바스크립트로 매핑 해야할 수도 있어요.
방법은 이렇게 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')
}
}
추가기능 구현시 요구사항에 사원 도움창을 열어야 되서 참고하려고 합니다.
첨부해 준 다른 프론트엔드 FD 예제 소스를 참조
열심히 설명해주셨는데 화면녹화 실패, 흡수하지 못함. 추후 다시 질문 필요
내부적인 로직은 담당 개발자만 알 수 있다. 우리는 가져다가 잘 쓰면 된다. 내부적인 구조는 알 필요가 없다.
문제가 생길경우 담당 플랫폼 개발팀에 물어볼 수 있어요.
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();
Jenkins
: 소프트웨어의 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역의 저장소에
지속적으로 업로드하여 CI (지속적인 통합)이 가능하도록 하는 도구
: Git과 같은 버전관리 시스템과 연동하여 소스의 커밋을 감지하면 테스트가 포함된 빌드가 작동
간단한 거라고 시연 보여줬음.
모델에 보면 이 변수가 뭘 의미하는지 어노테이션 다 적혀있잖아요?
모델에 대한 설명들이 다 저장이 되어있는데 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(); 한다.
내부해결 - model에 컬럼유무 및 select 쿼리에 컬럼을 가져오지 않아 디폴트값이 뜨지 않고 있었음.
질문 안했던거 같음. 따로 저장 안할경우 다른 컬럼 수정사항도 날아가므로 즉시 저장되게 설계했을 것으로 추정.
commonhelp 는 공통 도움창입니다
공통적으로 많이 쓰는 도움창을 사용하는곳입니다. 개발하려는 기능이 commonhelp 에 없다면 커스텀으로 새롭게 만들어야 합니다.
commonhelp 에는 만들지 않습니다
24번 사업장 의미입니다
데이터 리턴되는부분 확인해보니까 같네요 zipcode 랑 zonecode랑.
내부적으로 소스그래프 검색해본결과 zipcode 쓰는 경우가 대부분이고
zonecode 는 3건이 끝입니다
그냥 zipcode로 진행하세요 히스토리를 알기가 어렵습니다
최초 개발할때는 zonecode 쓰다가 zipcode로 넘어올수도 있고 그런건 해당 api 를 개발한 개발자만 아는데 쉽지 않네요
추가질문 - Q 그러면 그런 메소드는 스크립트에서도 따로 설명을 알 수 가 없어서(다른 메서드와는 달리) 그냥 DBS에서 암기하는 방법 밖에는 없는 건가요?
음... 저같은 경우 암기했던 메소드는 없습니다 그냥 필요할때 개발자 문서 들어가서 찾아서 씁니다
-원격조치-
내부적으로 어떤 XML 파서를 쓰는지 모르겠지만 순차적으로 xml 을 파싱하는것으로 보입니다 xml 안에 파싱이 불가능한 부분이 있었습니다
xml 코드를 잘못작성 한 부분이 있어서 그 아래부터는 작동을 매퍼에 등록을 못한겁니다
잘못된 코드가 있어 매퍼에 등록도 안된건고 결국 작동을 안하는거죠
xml 파서가 또 순차적으로 파싱해서 지금 마감 update 태그만 가장 최상위로 올려서 해결한겁니다
어디에서 잘못된건지는 본인이 찾아야해요
[Q27 - 서민석] 기간피커 초기값 미설정시 디테일 그리드 조회가 되지않는 현상 -> 조치중
이클립스(STS) 콘솔창에 어떤작업을 하던 쿼리문이 다뜨게 되어있는데
다른 메뉴에서 직급 직위를 codehelp 로 선택하는 부분있으면 선택할때 쿼리문 확인해서 하는 방법이 있습니다
이외에도 공통 코드등록 부분이 있는데
https://dev.comet.duzon.net/MA/BASSEC00100
이렇게 확인하는 방법도 있습니다
DEPT_NM 같은거는 MA_DEPT_IF 테이블이 있고
부서 사업장 코스트센터 같은 큰 그룹은 전용 테이블이 있고
소속 직위같은 같은건 공통코드에 주로있습니다
나중에 메뉴 개발해보면 자주쓰게되어서 알게됩니다
참고 쿼리
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
30번같은경우 저같은경우 대문자로 처리하는데 꼭 답이 있는건 아니지만 대부분의 개발자들이 쓰는 명명규칙을 쓰면 좋습니다
지금 배포된 소스코드 확인해보니 대상등급과 송급등급 CD값을 그대로 쓰고있습니다 코드등록의 데이터를 활용하지 않고 그대로 쓰네요
<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>
지금 만드려는 기준년월이 2023.01 기준이고
기존에는 2022.01, 2022.07 값 2개가 있다고 하면
기존에 있는 2022.07 값을 그대로 복사하여 2023.01 에다가 넣어주는 기능같아보입니다
물론 기준년월 컬럼인 STD_YM 컬럼은 2023.01 로 변경하고요
아마 처리방법이 SELECT INTO 절을 써서 바로 백엔드에서 처리하는 방법 이 있을 수 있고 프론트에서 기존 내역을 불러와 새롭게 입력한것처럼 처리할수도 있을것같습니다
https://dbs.douzone.com/docs/UI/Document/%EC%97%91%EC%85%80%EC%B2%98%EB%A6%AC/docs/grid_excel
참고하시면 될것같습니다. 링크에 있는 엑셀 import 기능 구현하면 될것같아요
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("들어왔습니다 !!!");
// }
// });
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 주석처리되어있습니다
max 값은 HR_JOBDIVBASE_MST.VER_CD 로 하면 될것같습니다
SELECT *
FROM DBA_TAB_COLUMNS
WHERE COLUMN_NAME = 'ABLTCLSFCT_CD'
뭔가.... 설계문서에 문제가 있던것 같아보입니다
능력단위코드도움창이 설계서에 화면으로 보여져있나요? 능력단위분류코드 : 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 입니다
전날 서브페이지를 열기 위한 메소드 dews.ui.page.openSubPage가 작동하지않아
프론트 npm개발환경 실습하기로 함.
다음과 같은 파일들을 전달 받았고 설치 진행하였음.
FD역시 출력 경로를 일치시켜줘야 함.