게시판을 이용해 주셔서 감사합니다.
다음양식에 맞게 입력해주세요.
* 고객시스템명 : 철도유통
* GAUCE 버전 :
* WAS 종류(WebLogic 등등) :
* DB 종류 : oracle
* 문의 유형(질문/요청/참조) :
* 내용 :
더운 날씨에 고생하십니다. 현재 철도유통에 가우스로 환경을 구성하고 있습니다.
대략
[후지쯔 가우스 Struts프레임워크 사용] gauce class 를 거의 오버라이딩 하는 수준입니다.
html(jsp)(화면) <-> action <-> dao <-> xml.query
|
xml.setdataheader
html 에서 dataset 을 생성 하고 action 에서는 미리 정의된 xml에서 datasetheader와 dao 에서
생성 된 list type 의 data를 매칭 시켜 줍니다.
현재 고민중인 사항은 dataheader가 동적으로 변환 해야되는데 문제입니다
1. 한 화면에 조건이 120개 정도되며 조건에 따라 쿼리문(header)가 바꿔야 됩니다. 그러므로
crosstab 형태의 자료가 아닙니다
2. 가우스 메뉴얼의 setdataheader 의 예제에서 보면 엑셀의 헤더가 없이 html 단에서 header를
생성하여 data를 매칭시키고 있지만 사실 엑셀의 header가 없어지면 매칭이 안됩니다.
3. html 단에서 setdataheader 를 조건에 따라 동적으로 구성하고 SQL역시 동적으로 구현하여
실행하지만 action 에서는 html에서 보낸 dataset 이름을 받아오지만 지정한 header 정보는
받아오지 못하는것 같습니다.
- jsp start ---------------------------------------------------------------------
- ..중략 ..-
- ..setheader.. -
DS_List.SetDataHeader("HQ:STRING(20):KEYVALUETYPE, DEPT_UPPER:STRING(20), SALE_QTY:DECIMAL(15.0), SALE_SUP:DECIMAL(15.0), GU:STRING(20),MDATE:STRING(8)");
..중략...
TR_Search.Action="<%=webapp%>/EIS.do?goTo="+goTo+parameters;
TR_Search.KeyValue="SERVLET("+action+":DSPOST=DS_List)";//조회는 O
TR_Search.Post();
..하단에 DS_List obj 지정..
- jsp end---------------------------------------------------------------------
- action start-------------------------------------------------------------------
public ActionForward EisSaleReportQuery(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws ServletException {
String goTo = "";
String formGoTo = form.getParam("goTo"); // 분기할곳
String formAction = String2.nvl(form.getParam("action")); // 이벤트 특성(O:저장, I:저장)
String formFlg = String2.nvl(form.getParam("flg")); // 조회 종류
List list = null;
if (formAction.equals("")) {
goTo = formGoTo;
} else if (formAction.equals("O")) {
goTo = "blank";
GauceHelper helper = null;
EisSaleReportQueryDAO dao = null;
List header = null;
if (formFlg.equals("1")) {
GauceDataSet dSet = new GauceDataSet();
try {
dao = new EisSaleReportQueryDAO();
helper = new GauceHelper(request, response);
###########################################
dSet = helper.getDataSet("DSPOST"); <-- jsp 단에서 dataset 받아오는 구문
###########################################
/* 기존에 사용방식 */
//xml 미리 지정된 header 를 jsp 넘겨 받아온 dSet 과 매칭 */
//helper.setDataSetHeader(dSet, form, "EisSaleReportQueryDAO.DS_List");
###########################################
/* 아래와 같은 경우로 하면 list data와 매칭이 됩니다
jsp생성된 header 로는 왜 안되는 지 의문입니다 ..
단, 이렇게 하면 데이타 매칭은 잘되고 하단에 logger 가 잘찍히나
jsp 단에 그리드에서 화면에 안보여집니다. flush()를 하는데 불구하구요
dSet.addDataColumn(new GauceDataColumn("HQ", GauceDataColumn.TB_STRING, 20));
dSet.addDataColumn(new GauceDataColumn("DEPT_UPPER", GauceDataColumn.TB_STRING, 20));
dSet.addDataColumn(new GauceDataColumn("SALE_QTY", GauceDataColumn.TB_DECIMAL, 15, 2));
dSet.addDataColumn(new GauceDataColumn("SALE_SUP", GauceDataColumn.TB_DECIMAL, 15, 2));
dSet.addDataColumn(new GauceDataColumn("GU", GauceDataColumn.TB_STRING, 20));
dSet.addDataColumn(new GauceDataColumn("MDATE", GauceDataColumn.TB_STRING, 20));
*/
###########################################
list = dao.query((Service) form.getService(), form); //DAO 데이타 받아옴
helper.setDataSet(dSet, list); // dataset , list 를 매칭
logger.info("_________dSet.getDataRowCnt() :" + dSet.getDataColCnt());
logger.info("_________dSet.getDataRowCnt() :" + dSet.getDataRowCnt());
logger.info("_________dSet.getDataColCnt() :" + dSet.getDataColCnt());
logger.info("_________dSet.indexOfColumn(1):" + dSet.indexOfColumn("1"));
logger.info("_________dSet.getName():" + dSet.getName());
logger.info("_________dSet.getDataColumns():" + dSet.getDataColumns());
} catch (GauceHelperException e) {
e.printStackTrace();
helper.writeException("GAUCE", "001", "가우스처리를 못했습니다.");
} catch (Exception e) {
e.printStackTrace();
helper.writeException("GAUCE", "002", e.getMessage());
} finally {
helper.close(dSet); <-- flush() 사용
}
}
}
return mapping.findForward(goTo);
}
- action end-------------------------------------------------------------------
이런식으로 구성되 있습니다.
무엇이 문제인지 궁금합니다... html 단에서 동적 header 를 사용할수 없다면
dSet.addDataColumn(new GauceDataColumn("HQ", GauceDataColumn.TB_STRING, 20));
이런식으로 사용했을시 html 그리드 단에서 자료가 외 flush()가 안되는지요??? 궁금합니다.
그럼 수고 하세요~~~~~~~~~~~~~마무리 1주일 남겨놓고 이런 일이 터져서 문제네요