기본형 : grep [OPTION] [PATTERN] [FILE] - 파일에서 특정 문자열을 포함한 줄의 내용 표시. grep "2021-06-29 14:15:27.407" /log/resin/erp/online/app.log - 파일에서 특정 문자열을 포함한 줄을 기준으로 위로 10줄, 아래로 20줄의 내용 표시. grep "2021-06-29 14:15:27.407" /log/resin/erp/online/app.log -B10 -A20
서로 다른 유형의 List 복사
/**
* @description
* <pre>
* source list 중 target list와 항목명이 같은 데이터를 복사
* </pre>
* @param srcList : source list
* @param trgtList : target list
* @param pTargetType : target type
*/
public static <E, T> void copyData(List<E> srcList, List<T> trgtList, Class<T> pTargetType) {
try {
for( E src : srcList) {
T trgt = (T) pTargetType.newInstance();
BeanUtils.copyProperties(src, trgt);
trgtList.add(trgt);
}
} catch (BeansException be) {
logger.debug(be.getMessage(), be);
} catch (Exception e) {
logger.debug(e.getMessage(), e);
}
}
사용예)
List<TrgtVo> trgtList = new ArrayList<TrgtVo>();
List<SrcVo> srcList = svc.getList(paramVo);
ErpUtils.copyData(srcList, trgtList, TrgtVo.class);관련글 : 서로 다른 유형의 object 복사
nexacro copy dataset
/*----------------------------------------------------------------------------------------------
* 설명 : dataset 복사. column명이 같은것만 복사.
* 파라미터 : pSrc : (필수) source dataset
pTrgt : (필수) target dataset
* 리턴값 : true : 복사 성공, false : 복사 실패.
-----------------------------------------------------------------------------------------------*/
this.gf_ErpCopyData = function(pSrc:nexacro.NormalDataset, pTrgt:nexacro.NormalDataset) {
try {
pTrgt.clearData();
var nToRow = 0;
pTrgt.set_updatecontrol(false);
for( var nRow = 0; nRow < pSrc.rowcount; nRow++ ) {
nToRow = pTrgt.addRow();
pTrgt.copyRow(nToRow, pSrc, nRow);
pTrgt.setRowType(nRow, pSrc.getRowType(nRow));
};
pTrgt.set_updatecontrol(true);
return pTrgt.rowcount == pSrc.rowcount;
} catch(e) {
return false;
};
};
사용예)
this.gf_ErpCopyData(this.ds_src, this.trgt);javascript string format 구현
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
사용예)
var sTemp = " num1 : {0}, num2 : {1}";
console.log(sTemp.format("12","25"));
결과)
num1 : 12, num2 : 25Nexacro callback 정의 및 호출
//callback function
this.fn_callbackTest = function(param1, param2) {
console.log(param1);
console.log(param2);
};
//init object
this.fv_objConfig;
this.fn_initObject = function(){
this.fv_objConfig = {
objForm : this,
id : "service01",
callbackFunc : this.fn_callbackTest,
param1 : "p1",
param2 : "p2"
};
};
//call callback
this.fn_testFunc = function() {
var param1 = this.fv_objConfig.param1;
var param2 = this.fv_objConfig.param2;
var callbackFunc = this.fv_objConfig.callbackFunc;
var pThis = this.fv_objConfig.objForm;
if(callbackFunc){
callbackFunc.call(pThis, param1, param2);
}
};oracle table, column 정보 조회1
SELECT SUBSTR(a.TABLE_NAME,0,2) AS "업무구분"
, a.TABLE_NAME AS "테이블명"
, b.COMMENTS AS "테이블한글명"
, a.COLUMN_ID AS "컬럼순번"
, a.COLUMN_NAME AS "컬럼명"
, c.COMMENTS AS "컬럼한글명"
, a.DATA_TYPE AS "타입"
, CASE WHEN NVL(a.DATA_SCALE,0) = 0 THEN TO_CHAR(a.DATA_LENGTH)
ELSE a.DATA_LENGTH||'('||a.DATA_SCALE||')'
END AS "길이"
, CASE WHEN d.COLUMN_NAME IS NOT NULL THEN TO_CHAR(d.KEY_SEQ)
ELSE ''
END AS "KEY"
, CASE WHEN a.nullable = 'N' THEN 'Y'
ELSE ''
END AS "NOT NULL"
, a.DATA_DEFAULT AS "초기값"
FROM ALL_TAB_COLUMNS a
INNER JOIN ALL_TAB_COMMENTS b
ON a.OWNER = b.OWNER
AND a.TABLE_NAME = b.TABLE_NAME
LEFT OUTER JOIN ALL_COL_COMMENTS c
ON a.OWNER = c.OWNER
AND a.TABLE_NAME = c.TABLE_NAME
AND a.COLUMN_NAME = c.COLUMN_NAME
LEFT OUTER JOIN (
SELECT ia.OWNER
, ia.TABLE_NAME
, ib.COLUMN_NAME
, ib.POSITION AS KEY_SEQ
FROM ALL_CONSTRAINTS ia
INNER JOIN ALL_CONS_COLUMNS ib
ON ia.OWNER = ib.OWNER
AND ia.TABLE_NAME = ib.TABLE_NAME
AND ia.CONSTRAINT_NAME = ib.CONSTRAINT_NAME
AND ia.CONSTRAINT_TYPE = 'P'
) d
ON a.OWNER = d.OWNER
AND a.TABLE_NAME = d.TABLE_NAME
AND a.COLUMN_NAME = d.COLUMN_NAME
WHERE a.OWNER = 'SEMA_ERP' /* bx-erp : ERP, semis : SEMA_OWN */
AND a.TABLE_NAME LIKE '%_HIST%' /*조회할 Table명*/
-- AND a.TABLE_NAME = 'AM_CARDCONFMDTALSRECPT' /*조회할 Table명*/
-- AND b.COMMENTS LIKE '%원천징수%' /*조회할 Table명*/
-- AND a.TABLE_NAME = 'AM_SLIP_WRT_M'
-- AND a.COLUMN_NAME LIKE '%ACNUT_NM_DIV_CD%'
-- AND c.COMMENTS LIKE '%통화%코드%'
-- AND a.column_name NOT LIKE '%#_%'ESCAPE'#'
-- ORDER BY a.TABLE_NAME
-- , a.COLUMN_ID
ORDER BY a.TABLE_NAME
, a.COLUMN_ID
-- , a.COLUMN_NAME
;oracle dml 문장 생성 1
WITH tempTbl AS (
SELECT a.COLUMN_ID AS colId
, a.COLUMN_NAME AS colName
, LOWER(SUBSTR(REPLACE(INITCAP(a.COLUMN_NAME),'_'),1,1))||SUBSTR(REPLACE(INITCAP(a.COLUMN_NAME),'_'),2,LENGTH(a.COLUMN_NAME)-1) AS camel
, ('/*'||c.COMMENTS || ','|| a.DATA_TYPE ||'('||a.DATA_LENGTH ||')'||'*/') AS cmt
, ('/*'||c.COMMENTS ||'*/') AS cmt2
, c.COMMENTS AS orgCmt
, a.DATA_TYPE AS dataType
, a.DATA_LENGTH AS dataLen
FROM ALL_TAB_COLUMNS a
LEFT OUTER JOIN ALL_COL_COMMENTS c
ON a.OWNER = c.OWNER
AND a.TABLE_NAME = c.TABLE_NAME
AND a.COLUMN_NAME = c.COLUMN_NAME
WHERE a.OWNER = 'SEMA_ERP'
AND a.TABLE_NAME IN ('AM_CMMN_COSTPT_D') /*조회할 Table명*/
-- AND a.COLUMN_NAME IN ('COMPANY_CODE','BANK_NO_SEQ','BANK_NO','BANK_DIV','CUST_CODE','DEPOSIT_OWNER','USE_YN','DEPT_CODE','APL_STR_DTE'
-- ,'APL_END_DTE','FUND_CHK_YN','FUND_CHK_NOTE','FUND_CHK_YN_B','BANK_RES_CODE','BANK_RES_DESC','INPUT_DATE','INPUT_DUTY_ID'
-- ,'CHG_DATE','CHG_DUTY_ID'
-- )
)
SELECT MAX(aa.ommType) AS ommType
, MAX(aa.colId) AS colId
, aa.ommName
, MAX(aa.ommDescription) AS ommDescription
, MAX(aa.ommLength) AS ommLength
, (MAX(aa.ommType)||' '||aa.ommName||'<length='||MAX(aa.ommLength)||' description="'||MAX(aa.ommDescription)||'">;') AS ommGenStr
, MAX(aa.dmlStr) AS dmlStr
, MAX(aa.dmlStr2) AS dmlStr2
FROM (
SELECT CASE WHEN a.dataType IN ('VARCHAR2') THEN 'String'
WHEN a.dataType IN ('DATE') THEN 'Date'
WHEN a.dataType IN ('NUMBER') AND a.dataLen < 10 THEN 'Integer'
WHEN a.dataType IN ('NUMBER') AND a.dataLen >= 10 THEN 'BigDecimal'
END ommType
, a.camel AS ommName
, a.orgCmt AS ommDescription
, a.dataLen AS ommLength
, a.colId
, (', '||RPAD(a.colName, b.maxLenCol, ' ') ||' AS '||RPAD(a.camel, b.maxLenCmt,' ')||' '||a.cmt) AS dmlStr
, (', '||RPAD(a.colName, b.maxLenCol, ' ') ||' '||a.cmt2) AS dmlStr2
FROM tempTbl a
OUTER APPLY( SELECT MAX(LENGTHB(colName)) AS maxLenCol
, MAX(LENGTHB(camel)) AS maxLenCmt
FROM tempTbl
) b
) aa
GROUP BY aa.ommName
-- ORDER BY aa.ommName
ORDER BY MAX(aa.colId)
-- ORDER BY MAX(aa.ommName)Nexacro transaction시 동적 dataset 지정
this.dsEdcRptsResult = new Dataset(); //기안 상신 결과
this.dsEdcRptsResult.set_name("dsEdcRptsResult");
this.gf_ErpEdcRptsCall = function(pSetting) {
var sIfJobDivCd = pSetting.ifJobDivCd;
var sIfTrkey = pSetting.ifTrkey;
var sAppId = pSetting.appId;
var sEdcFormId = pSetting.edcFormId;
var sEdcTitle = pSetting.edcTitle;
var sEdcContent1 = pSetting.edcContent1;
var sEdcContent2 = this.gf_Nvl(pSetting.edcContent2,"");
var sUserId = this.gf_Nvl(pSetting.userId, this.gf_ErpGetUserInfo().userId);
var sDeptCode = this.gf_Nvl(pSetting.deptCode, this.gf_ErpGetUserInfo().deptCode);
var sSiteCode = this.gf_Nvl(pSetting.siteCode, this.gf_ErpGetUserInfo().siteCode);
var sCompanyCode = this.gf_Nvl(pSetting.companyCode, this.gf_ErpGetUserInfo().companyCode);
var inDs = new Dataset();
inDs.addColumn("ifJobDivCd","string");
inDs.addColumn("ifTrkey","string");
inDs.addColumn("appId","string");
inDs.addColumn("edcFormId","string");
inDs.addColumn("edcTitle","string");
inDs.addColumn("edcContent1","string");
inDs.addColumn("edcContent2","string");
inDs.addColumn("userId","string");
inDs.addColumn("deptCode","string");
inDs.addColumn("siteCode","string");
inDs.addColumn("companyCode","string");
inDs.addRow();
inDs.set_name("inDs");
inDs.setColumn(0,"ifJobDivCd", sIfJobDivCd);
inDs.setColumn(0,"ifTrkey", sIfTrkey);
inDs.setColumn(0,"appId", sAppId);
inDs.setColumn(0,"edcFormId", sEdcFormId);
inDs.setColumn(0,"edcTitle", sEdcTitle);
inDs.setColumn(0,"edcContent1", sEdcContent1);
inDs.setColumn(0,"edcContent2", sEdcContent2);
inDs.setColumn(0,"userId", sUserId);
inDs.setColumn(0,"deptCode", sDeptCode);
inDs.setColumn(0,"siteCode", sSiteCode);
inDs.setColumn(0,"companyCode", sCompanyCode);
var strInDs = "ds_input_" + this.gf_GetRandomKey();
var strOutDs = "ds_ouput_" + this.gf_GetRandomKey();
this.addChild(strInDs, inDs);
this.addChild(strOutDs, this.dsEdcRptsResult);
var sInDataset = "_IN_ROOT_="+strInDs;
var sOutDataset = strOutDs+"=_OUT_ROOT_";
this.gf_ErpTransaction("SSMCMMSVC", "SSMCMMSVC002", sInDataset, sOutDataset, "gf_ErpCallback");
};grid column중 dataset과 bind된 column의 edit max length 설정.
/*----------------------------------------------------------------------------------------------
* 설명 : grid column중 dataset과 bind된 column의 edit max length 설정.
* 파라미터 : pGridArray : (필수) 대상 grid array
* 리턴값 : N/A
-----------------------------------------------------------------------------------------------*/
this.gf_ErpSetGridColMaxLength = function(pGridArray) {
var nEditMaxLength = -1;
var sBindCol = "";
var oOuter = this;
if(this.gf_IsNull(pGridArray)) return;
pGridArray.forEach(function(tGrid, idx) {
for(var nCol = 0; nCol < tGrid.getFormatColCount(); nCol++) {
try {
sBindCol = tGrid._getBodyCellInfo(nCol).text._bindexpr;
if( !oOuter.gf_IsNull(sBindCol) ) {
nEditMaxLength = tGrid.bindDS.getColumnInfo(sBindCol).size;
tGrid.setCellProperty("body",nCol,"editmaxlength",nEditMaxLength);
};
} catch(e){};
};
});
};사용예)
this.gf_ErpSetGridColMaxLength([this.tab_subDetail.tap_subDetail1.form.grd_SSMCODE37113Out01,
this.tab_subDetail.tap_subDetail2.form.grd_SSMCODE37113Out02,
this.tab_subDetail.tap_subDetail3.form.grd_SSMCODE37113Out03,
this.tab_subDetail.tap_subDetail4.form.grd_SSMCODE37113Out04,
this.tab_subDetail.tap_subDetail5.form.grd_SSMCODE37113Out05]);nexacro dataset과 bind된 component의 max length 설정.
/*----------------------------------------------------------------------------------------------
* 설명 : dataset과 bind된 component의 max length 설정.
* 파라미터 : pForm : (필수) form object. 보통 this를 넘기면 됨.
* 리턴값 : N/A
-----------------------------------------------------------------------------------------------*/
this.gf_ErpSetBindCompMaxLength = function(pForm) {
var sColId = "";
var aBindList = pForm.binds;
for( var nIdx = 0; nIdx < aBindList.length; nIdx++ ){
sColId = aBindList[nIdx].columnid;
try {
if( !this.gf_IsNull(aBindList[nIdx]._dataset) && !this.gf_IsNull(aBindList[nIdx]._comp.maxlength) ) {
for( var nCol = 0; nCol < aBindList[nIdx]._dataset.colinfos.length; nCol++ ) {
if( sColId == aBindList[nIdx]._dataset.colinfos[nCol].id ) {
aBindList[nIdx]._comp.set_maxlength(aBindList[nIdx]._dataset.colinfos[nCol].size);
};
};
};
} catch(e) {
this.gf_Trace("["+sColId+"] : " + e.message);
};
};
};사용예) this.gf_ErpSetBindCompMaxLength(this);
