grep

기본형 : 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 : 25

Nexacro 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);
  }
};