function newEpst02050Script(pageName, doctx="[data-doctx='epst02050']") {
    let ctrl = new DatasetControl({
          doctx: doctx
        , prefix: "epostRcptRslt"
        , prefixName: "전자우편 접수 결과"
        , dataGetter: obj => obj["List"]
        , keys: ["RCPT_RSLT_ID"]
        , appendData: true
        , infoSize: "lg"
        , urls: {
            load: "/list.do"
        }
        , formats : {
              EXTRI_REGYMD: dateFormat
            , RCEPT_YMD: dateFormat
            , RCEPT_CNT: numberFormat
            , RCEPT_AMT: numberFormat
            , USEFEE_AMT: numberFormat
            , TOTPOST_PRC: numberFormat
            , REG_DT: datetimeFormat
        }
    });

    // 합계 Dataset
    ctrl.dsSumAmt = new Dataset({
          doctx: doctx
        , prefix: "sumAmt"
        , prefixName: "합계 금액"
        , dataGetter: obj => obj["sumAmtList"]
        , keys: ["DIV_KB"]
        , appendData: true
        , formats : {
              RCEPT_CNT: numberFormat
            , RCEPT_AMT: numberFormat
            , USEFEE_AMT: numberFormat
            , TOTPOST_PRC: numberFormat
        }
    });

    // 검색 조건
    ctrl.query = { pageNum: 1, fetchSize: DEFAULT_FETCH_SIZE };                 // 1 페이지당 자료 건수 index.jsp에서 확인
    // paging
    ctrl.pagingSupport = new FimsPagingSupport({
          ctrl: ctrl                                                            // DatasetControl
        , ignoreCtrlPrefix: true                                                // ctrl.prefix 가 있더라도 무시
        , linkContainer: "[name='dataPaging']"                                  // <ul class="pagination pagination-primary" name="dataPaging">
    });

    /**************************************************************************
     * DatasetControl Events
     **************************************************************************/
    // Dataset 변경 이벤트
    ctrl.onDatasetChange = (obj, option) => {
        // 데이터 셋
        let dataList = ctrl.dataset;
        let empty = dataList.empty;

        let replacer = (str, dataItem) => str
            .replace(/{onclick}/gi, "pageObject['" + pageName + "'].dataTableClick('{data-index}');");

        let trs = empty ?
                      [ctrl.find("[name='tmpltNotFound']").innerHTML]
                    : dataList.inStrings(ctrl.find("[name='tmpltRows']").innerHTML, replacer);

        let noMore = (dataList.length >= obj["Paging"]?.totalSize);             // 전체 건수
        let initScroll = (ctrl.query.pageNum < 2);

        if (option != null && option.reloaded) {
            initScroll = false;
        }

        // dataTables(그리드)에 자료 표시 td
        ctrl.find("[name='tableRspns']").changeContent(trs.join(), initScroll, noMore);

        // checkbox 체크 해제
        $(ctrl.find("[name='gridAllCheckbox']")).prop("checked", false);

        // dataTables(그리드)에 페이지 표시 pagingInfo
        ctrl.pagingSupport.setPagingInfo(obj);

        // 보안모드
        fn_securityModeToggle($("#securityMode--top").is(":checked"));
    };

    // 현재 선택 자료 변경 이벤트
    ctrl.onCurrentChange = (item) => {
        Apply.fromDataset.currentRow(ctrl.dataset, item, ctrl.find("[name='tbodyList']"));
    };

    /**************************************************************************
     * 합계 Dataset Events
     **************************************************************************/
    // Dataset 변경 이벤트
    ctrl.dsSumAmt.onDatasetChange = (obj, option) => {
        // 데이터 셋
        let dataList = ctrl.dsSumAmt;
        let empty = dataList.empty;

        let replacer = (str, dataItem) => str
            .replace(/{onclick}/gi, "pageObject['" + pageName + "'].ctrl.dsSumAmt.setCurrent('{data-index}');")

        let trs = empty ?
                      [ctrl.find("[name='tmpltNotFoundSumAmt']").innerHTML]
                    : dataList.inStrings(ctrl.find("[name='tmpltSumAmtRows']").innerHTML, replacer);

        // dataTables(그리드)에 자료 표시 td
        ctrl.find("[name='tableRspnsSumAmt']").changeContent(trs.join());
    };

    // 현재 선택 자료 변경 이벤트
    ctrl.dsSumAmt.onCurrentChange = (item) => {
        Apply.fromDataset.currentRow(ctrl.dsSumAmt, item, ctrl.find("[name='tbodySumAmtList']"));
    };

    return ctrl;
}
