반응형
1 - 1. 화면 조회 이벤트 스크립트
// Retrieve Event
this.fn_retrieve = function(obj:nexacro.Button, e:nexacro.ClickEventInfo){
var sDeptCd = this.div_search.form.edt_dept_cd.value;
this.transaction("svcSelect"
,"SvcURL::select_emp.jsp?sDept="+sDeptCd
,""
,"ds_emp = out_emp"
,""
,"fn_callback");
};
this.fn_retrieve = function(obj:nexacro.Button, e:nexacro.ClickEventInfo){
var sDeptCd = this.div_search.form.edt_dept_cd.value;
this.transaction("svcSelect"
,"SvcURL::select_emp.jsp?sDept="+sDeptCd
,""
,"ds_emp = out_emp"
,""
,"fn_callback");
};
// Async Result callback
this.fn_callback = function(scvId, errCD, errMSG){
if(errDC < 0){
this.alert("Error : " + errMSG);
return;
}
if(svcID == "svcSelect"){
this.alart("Retrieve Success!");
}
}
this.fn_callback = function(scvId, errCD, errMSG){
if(errDC < 0){
this.alert("Error : " + errMSG);
return;
}
if(svcID == "svcSelect"){
this.alart("Retrieve Success!");
}
}
cf) 트랜젝션 처리
1 - 2. 조회 서비스 페이지(JSP) 작성
...
// package import
<%@ page import = "com.nexacro17.xapi.data.*" %>
<%@ page import="com.nexacro17.xapi.tx.*" %>
...
// get으로 온 변수 받음
String sDept = request.getParameter("sDept");
...
// 조회 결과 보낼 PlatformData(데이터 송수신 기본 단위)생성
PlatformData out_pData = new PlatformData();
...
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:....");
// SQL문 작성
String SQL;
SQL = "SELECT EMPL_ID \n" +
" , FULL_NAME \n" +
" , DEPT_CD \n" +
" , POS_CD \n" +
" , GENDER \n" +
" , HIRE_DATE \n" +
" , MARRIED \n" +
" , SALARY \n" +
" , MEMO \n" +
" FROM TB_EMP \n" +
" WHERE 1=1 \n" ;
if(sDept != null && sDept.length() != 0 && !sDept.equals("undefined")){
SQL += "AND DEPT_CD = '" + sDept + "'";
}
SQL += " ORDER BY DEPT_CD, EMPL_NAME";
// 결과를 ResultSet 객체로 반환
rs = stmt.executeQuery(SQL);
...
// ResultSet데이터 Dataset 형태로 변환
DataSet ds = new DataSet("out_emp");
ds.addColumn("EMPL_ID" ,DataTypes.STRING ,(short)10 );
ds.addColumn("FULL_NAME" ,DataTypes.STRING ,(short)50 );
ds.addColumn("DEPT_CD" ,DataTypes.STRING ,(short)10 );
ds.addColumn("POS_CD" ,DataTypes.STRING ,(short)10 );
ds.addColumn("GENDER" ,DataTypes.STRING ,(short)10 );
ds.addColumn("HIRE_DATE" ,DataTypes.DATE ,(short)10 );
ds.addColumn("MARRIED" ,DataTypes.STRING ,(short)10 );
ds.addColumn("SALARY" ,DataTypes.INT ,(short)10 );
ds.addColumn("MEMO" ,DataTypes.STRING ,(short)10 );
while(rs.next())
{
int row = ds.newRow();
ds.set(row ,"EMPL_ID" ,rs.getString("EMPL_ID") );
ds.set(row ,"FULL_NAME" ,rs.getString("FULL_NAME"));
ds.set(row ,"DEPT_CD" ,rs.getString("DEPT_CD") );
ds.set(row ,"POS_CD" ,rs.getString("POS_CD") );
ds.set(row ,"GENDER" ,rs.getString("GENDER") );
ds.set(row ,"HIRE_DATE" ,rs.getString("HIRE_DATE"));
ds.set(row ,"MARRIED" ,rs.getString("MARRIED") );
ds.set(row ,"SALARY" ,rs.getString("SALARY") );
ds.set(row ,"MEMO" ,rs.getString("MEMO") );
}
...
// Dataset을 PlatformData에 추가
out_pData.addDataSet(ds);
...
// PlatformData에 에러를 체크할 변수 추가
VariableList varList = out_pData.getVariableList();
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg" , strErrorMsg);
...
// PlatformData 클라이언트 화면으로 전송
HttpPlatformResponse pRes = new HttpPlatformResponse(response
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
pRes.setData(out_pData);
pRes.sendData();
...
// package import
<%@ page import = "com.nexacro17.xapi.data.*" %>
<%@ page import="com.nexacro17.xapi.tx.*" %>
...
// get으로 온 변수 받음
String sDept = request.getParameter("sDept");
...
// 조회 결과 보낼 PlatformData(데이터 송수신 기본 단위)생성
PlatformData out_pData = new PlatformData();
...
--------------------------------------------------------------------
// DB설정 정보 작성Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:....");
--------------------------------------------------------------------
...// SQL문 작성
String SQL;
SQL = "SELECT EMPL_ID \n" +
" , FULL_NAME \n" +
" , DEPT_CD \n" +
" , POS_CD \n" +
" , GENDER \n" +
" , HIRE_DATE \n" +
" , MARRIED \n" +
" , SALARY \n" +
" , MEMO \n" +
" FROM TB_EMP \n" +
" WHERE 1=1 \n" ;
if(sDept != null && sDept.length() != 0 && !sDept.equals("undefined")){
SQL += "AND DEPT_CD = '" + sDept + "'";
}
SQL += " ORDER BY DEPT_CD, EMPL_NAME";
// 결과를 ResultSet 객체로 반환
rs = stmt.executeQuery(SQL);
...
// ResultSet데이터 Dataset 형태로 변환
DataSet ds = new DataSet("out_emp");
ds.addColumn("EMPL_ID" ,DataTypes.STRING ,(short)10 );
ds.addColumn("FULL_NAME" ,DataTypes.STRING ,(short)50 );
ds.addColumn("DEPT_CD" ,DataTypes.STRING ,(short)10 );
ds.addColumn("POS_CD" ,DataTypes.STRING ,(short)10 );
ds.addColumn("GENDER" ,DataTypes.STRING ,(short)10 );
ds.addColumn("HIRE_DATE" ,DataTypes.DATE ,(short)10 );
ds.addColumn("MARRIED" ,DataTypes.STRING ,(short)10 );
ds.addColumn("SALARY" ,DataTypes.INT ,(short)10 );
ds.addColumn("MEMO" ,DataTypes.STRING ,(short)10 );
while(rs.next())
{
int row = ds.newRow();
ds.set(row ,"EMPL_ID" ,rs.getString("EMPL_ID") );
ds.set(row ,"FULL_NAME" ,rs.getString("FULL_NAME"));
ds.set(row ,"DEPT_CD" ,rs.getString("DEPT_CD") );
ds.set(row ,"POS_CD" ,rs.getString("POS_CD") );
ds.set(row ,"GENDER" ,rs.getString("GENDER") );
ds.set(row ,"HIRE_DATE" ,rs.getString("HIRE_DATE"));
ds.set(row ,"MARRIED" ,rs.getString("MARRIED") );
ds.set(row ,"SALARY" ,rs.getString("SALARY") );
ds.set(row ,"MEMO" ,rs.getString("MEMO") );
}
...
// Dataset을 PlatformData에 추가
out_pData.addDataSet(ds);
...
// PlatformData에 에러를 체크할 변수 추가
VariableList varList = out_pData.getVariableList();
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg" , strErrorMsg);
...
// PlatformData 클라이언트 화면으로 전송
HttpPlatformResponse pRes = new HttpPlatformResponse(response
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
pRes.setData(out_pData);
pRes.sendData();
...
주의사항 : 동일 출처 정책(Same Origin Policy 주의)
2. 화면 입력 이벤트 스크립트
this.fn_add = function(obj:nexacro.Button,e:nexacro.ClickEventInfo){
// Dataset의 마지막 row에 새로운 row를 추가
this.ds_emp.addRow();
// Dataset의 원하는 위치에 새로운 row를 추가
// insertRow();
// 추가한 row의 입사일자 컬럼에 오늘 일자를 초기값으로 설정
this.ds_emp.setColumn(this.ds_emp.rowposition, "HIRE_DATE", this.fn_today());
};
// 자바스크립트를 이용하여 오늘 일자 계산
this.fn_today = function(){
var objDate = new Date();
var sToday = objDate.getFullYear().toString();
sToday += (objDate.getMonth()+1).toString().padLeft(2, "0")
sToday += objDate.getDate().toString().padLeft(2, "0");
return sToday;
};
3. 화면 삭제 이벤트 스크립트
this.fn_delete = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
// 선택되어 있는 row를 삭제
this.ds_emp.deleteRow(this.ds_emp.rowposition);
};
4 - 1. 화면 저장 이벤트 스크립트
this.fn_save = function(obj:nexacro.Button,e:nexacro.ClickEventInfo){
var sTitle = nexacro.wrapQuote(this.titletext);
this.transaction("svcSave"
,"SvcURL::save_emp.jsp"
,"in_emp=ds_emp:u"
,""
,"in_var1="+sTitle
,"fn_callback");
};
// callback 메서드 수정
this.fn_callback = function(svcID, errCD, errMSG)
{
if(errCD < 0){
this.alert("Error: " + errMSG);
return;
}
if(svcID == "svcSelect"){
this.alert("Retrieve Success!!!");
}else if(svcID == "svcSave"){
this.alert("Save Success!!!");
}
}
4 - 2. 저장 서비스 페이지(JSP) 작성
…
// package import
<%@ page import="com.nexacro17.xapi.data.*" %>
<%@ page import="com.nexacro17.xapi.tx.*" %>
…
// 전송된 Dataset에서 컬럼에 해당하는 값을 추출
public String dsGet(DataSet ds, int rowno, String colid) throws Exception{
String value;
value = ds.getString(rowno,colid);
if( value == null ){
return "";
}else{
return value;
}
}
…
//HttpServletRequest를 이용하여 HttpPlatformRequest 생성하고 전송된 XML 데이터를 분석
HttpPlatformRequest pReq = new HttpPlatformRequest(request);
pReq.receiveData();
…
// 데이터를 PlatformData 형태로 저장하고 변수와 Dataset을 할당 받음
PlatformData in_pData = pReq.getData();
VariableList in_varList = in_pData.getVariableList();
String sVar1 = in_varList.getString("in_var1");
DataSet ds = in_pData.getDataSet("in_emp");
…
// 전송된 데이터를 쿼리를 이용하여 DB 테이블에 적용
// 먼저 삭제한 레코드에 대해서 Delete 쿼리를 실행
/******** DELETE ********/
for( i = 0; i < ds.getRemovedRowCount(); i++ ){
String sEmpID = ds.getRemovedData(i, "EMPL_ID").toString();
SQL = "DELETE FROM TB_EMP WHERE EMPL_ID = '" + sEmpID + "'";
stmt.executeUpdate(SQL);
}
…
// 입력 수정된 레코드에 대해서 쿼리를 실행
/******** INSERT, UPDATE ********/
for( i = 0; i < ds.getRowCount(); i++ ){
int rowType = ds.getRowType(i);
if( rowType == DataSet.ROW_TYPE_INSERTED ){
SQL = "INSERT INTO TB_EMP( EMPL_ID, \n" +
" FULL_NAME, \n" +
" DEPT_CD, \n" +
" POS_CD, \n" +
" GENDER, \n" +
" HIRE_DATE, \n" +
" MARRIED, \n" +
" SALARY, \n" +
" MEMO) \n" +
" VALUES('" + dsGet(ds, i, "EMPL_ID") + "',\n" +
" '" + dsGet(ds, i, "FULL_NAME") + "',\n" +
" '" + dsGet(ds, i, "DEPT_CD") + "',\n" +
" '" + dsGet(ds, i, "POS_CD") + "',\n" +
" '" + dsGet(ds, i, "GENDER") + "',\n" +
" '" + dsGet(ds, i, "HIRE_DATE") + "',\n" +
" '" + dsGet(ds, i, "MARRIED") + "',\n" +
" '" + dsGet(ds, i, "SALARY") + "',\n" +
" '" + dsGet(ds, i, "MEMO") + "') ";
}else if( rowType == DataSet.ROW_TYPE_UPDATED ){
String sOrgEmpID = ds.getSavedData(i, "EMPL_ID").toString();
SQL = "UPDATE TB_EMP \n" +
" SET EMPL_ID = '" + dsGet(ds, i, "EMPL_ID") + "',\n" +
" FULL_NAME = '" + dsGet(ds, i, "FULL_NAME") + "',\n" +
" DEPT_CD = '" + dsGet(ds, i, "DEPT_CD") + "',\n" +
" POS_CD = '" + dsGet(ds, i, "POS_CD") + "',\n" +
" GENDER = '" + dsGet(ds, i, "GENDER") + "',\n" +
" HIRE_DATE = '" + dsGet(ds, i, "HIRE_DATE") + "',\n" +
" MARRIED = '" + dsGet(ds, i, "MARRIED") + "',\n" +
" SALARY = '" + dsGet(ds, i, "SALARY") + "',\n" +
" MEMO = '" + dsGet(ds, i, "MEMO") + "' \n" +
" WHERE EMPL_ID = '" + sOrgEmpID + "'";
}
stmt.executeUpdate(SQL);
}
…
// 저장 처리 결과를 전송할 PlatformData 생성
PlatformData out_pData = new PlatformData();
…
// PlatformData에 에러 체크를 할 변수와 화면으로 전송 할 변수를 추가
VariableList out_varList = out_pData.getVariableList();
out_varList.add("ErrorCode", nErrorCode);
out_varList.add("ErrorMsg" , strErrorMsg);
out_varList.add("out_var" , sVar1);
…
// "ErrorCode"와 "ErrorMsg"는 화면에 작성한 콜백함수의 2번째, 3번째 인자에서 받습니다.
// 필수로 지정하고 전송하셔야 합니다.
// 추가로 지정한 변수는 화면에 동일한 변수명으로 폼변수를 선언하여 받을 수 있습니다.
// PlatformData를 클라이언트 화면으로 전송
HttpPlatformResponse pRes = new HttpPlatformResponse(response
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
pRes.setData(out_pData);
pRes.sendData();
5 - 1 화면 코드조회 이벤트 스크립트
this.Form_onload = function(obj:nexacro.Form,e:nexacro.LoadEventInfo){
this.transaction("svcCode"
,"SvcURL::select_code.jsp"
,""
,"ds_dept=out_dept ds_pos=out_pos"
,""
,"fn_callback");
};
cf ) 트랜잭션의 3번째(서버로 보내는 데이터셋), 4번째(서버에서 받을 데이터셋) 인자에 빈칸으로 구분을 하여 여러개의 데이터셋을 보내거나 받을 수 있음
5 - 2 코드조회 서비스 페이지(JSP) 작성
...
// package import
<%@ page import="com.nexacro17.xapi.data.*" %>
<%@ page import="com.nexacro17.xapi.tx.*" %>
...
// JSP 조회 결과 ResultSet을 메타데이터를 이용해 Dataset으로 변환하는 클래스 생성
<%!
// ResultSet ==> Dataset
public DataSet RsToDs(ResultSet rs, String dsID) throws Exception{
int i;
int iColCnt;
String sColName;
String sColType;;
int ColType = 0;
int ColSize = 255;
DataSet ds = new DataSet(dsID);
ResultSetMetaData rsmd = rs.getMetaData();
iColCnt = rsmd.getColumnCount();
for( i = 1 ; i <= iColCnt ; i++ ){
sColName = rsmd.getColumnName(i).toUpperCase();
sColType = rsmd.getColumnTypeName(i);
ColType = DataTypes.STRING;
if(sColType.equals("INTEGER")) ColType = DataTypes.INT;
if(sColType.equals("DECIMAL")) ColType = DataTypes.DECIMAL;
ds.addColumn(sColName, ColType, ColSize);
}
while(rs.next()){
int row = ds.newRow();
for( i = 1 ; i <= iColCnt ; i++ ){
sColName = rsmd.getColumnName(i).toUpperCase();
ds.set(row, sColName, rsGet(rs, sColName));
}
}
return ds;
}
public String rsGet(ResultSet rs, String id) throws Exception{
if( rs.getString(id) == null ){
return "";
} else {
return rs.getString(id);
}
}
%>
...
// 조회 결과를 보낼 PlatformData생성
PlatformData out_pData = new PlatformData();
...
// 쿼리 작성, 실행 후 RsToDs메서드 호출하여 PlatformData에 추가
String SQL;
SQL = " SELECT DEPT_CD, DEPT_NAME FROM TB_DEPT";
rs = stmt.executeQuery(SQL);
out_pData.addDataSet(RsToDs(rs,"out_dept"));
SQL = " SELECT POS_CD, POS_NAME FROM TB_POS";
rs = stmt.executeQuery(SQL);
out_pData.addDataSet(RsToDs(rs,"out_pos"));
...
// PlatformData에 에러 체크할 변수 추가
VariableList varList = out_pData.getVariableList();
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg" , strErrorMsg);
...
// PlatformData를 클라이언트 화면으로 전송
HttpPlatformResponse pRes = new HttpPlatformResponse(response
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
, PlatformType.CONTENT_TYPE_XML
, "UTF-8");
pRes.setData(out_pData);
pRes.sendData();
...
반응형
'Frontend > Nexacro' 카테고리의 다른 글
[넥사크로] 메인 화면 구성 (0) | 2023.07.07 |
---|---|
[넥사크로] 팝업 화면 처리 (0) | 2023.07.07 |
[넥사크로] 데이터 통신(서버 설정) (0) | 2023.07.07 |
[넥사크로] 그리드 셀 표현 (0) | 2023.07.07 |
[넥사크로] 스크립트 작업 실습 (0) | 2023.07.06 |