2014년 1월 31일 금요일

8. XplatForm 입력,수정,삭제 후 저장하기(유경석) - 투비소프트 엑스플렛폼교육, 구로디지털단지실무개발자 스프링/Spring Framework3.X/오라클/자바/닷넷/MyBatis/Hibernate강좌/SQL튜닝/오라클힌트/C#/ASP.NET/ADO.NET

8. XplatForm 입력,수정,삭제 후 저장하기(유경석) - 투비소프트 엑스플렛폼교육, 구로디지털단지실무개발자 스프링/Spring Framework3.X/오라클/자바/닷넷/MyBatis/Hibernate강좌/SQL튜닝/오라클힌트/C#/ASP.NET/ADO.NET


1. transaction을 이용해서 입력, 수정, 삭제 후 저장을 해보자.
transaction() 이란?
- Dataset의 값을 갱신하기 위한 서비스를 호출하고, transaction이 완료되면 CallBack Function을 수행하는 Method

2. 파일첨부된 employees_save.jsp을 받아서 Tomcat7.0 -> webapps - > ROOT - >edu(폴더만듬)  -> xp(폴더만듬)폴더 안에 복사한다.
3. 편집기를 사용해서 employees_save.jsp 열어서 코드분석 해보자
<%@ page import="org.apache.commons.logging.*" %>
<%@ page import="com.tobesoft.xplatform.data.*" %>
<%@ page import="com.tobesoft.xplatform.tx.*" %>
<%@ page import = "java.util.*" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.io.*" %>
<%@ page contentType="text/xml; charset=UTF-8" %>
<%!
// Dataset value
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;
}
%>
<%
// PlatformData
// 클라이언트 쪽으로 보낼 데이터 PlatformData
PlatformData o_xpData = new PlatformData();

int nErrorCode = 0;
String strErrorMsg = "START";
// HttpPlatformRequest
HttpPlatformRequest pReq = new HttpPlatformRequest(request);

// XML parsing
// 클라이언트 쪽에서 넘어온 xml데이터를 할당받는 부분
pReq.receiveData();
// PlatformData
// 클라이언트쪽에서 넘어온 데이터를 받기 위한 PlatformData
PlatformData i_xpData = pReq.getData();
// Get
VariableList in_vl = i_xpData.getVariableList();
// 클라이언트 쪽에서 보내준 변수("sVall")를 기술며, 할방받음
String in_var2 = in_vl.getString("sVal1");
// 클라이언트 쪽에서 보내준 dataset이름("in_ds")을 기술하며, 할당 받음
DataSet ds = i_xpData.getDataSet("in_ds");
try {

 Connection conn = null;
 Statement  stmt = null;
 ResultSet  rs   = null;

 try {
  Class.forName("oracle.jdbc.driver.OracleDriver");
   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:EX", "study", "study");
   
  stmt = conn.createStatement();

  String SQL = "";
  int i;
 
  // 클라인트 쪽에서 넘어온 dataset에서 변경된 레코드만 보내주는 :u가 있는데 서버쪽으로 넘// 어오는 데이터 버퍼는 2군대로 나눠지는 delete버퍼와 insert,update버퍼로 나눠진다.
       
 
  // 삭제된 레코드가 있다면 처리할 구문
  for( i = 0 ; i< ds.getRemovedRowCount() ; i++ )
  {
   String del_id = ds.getRemovedData(i,"EMP_ID").toString();
   SQL = "DELETE FROM EMPLOYEES WHERE " +
       "EMP_ID = " + "'" + del_id + "'";
   rs = stmt.executeQuery(SQL);
  }
 
 
  for(i=0;i<ds.getRowCount();i++)
  {
   // 클라이언트 쪽에서 넘어온 레코드의 상태를 확인 할수 있음( .getRowType(i))
   int rowType = ds.getRowType(i);
   if( rowType == DataSet.ROW_TYPE_INSERTED )
   {
    
    SQL = "INSERT INTO EMPLOYEES (EMP_ID,FULL_NAME,DEPT_ID,HIRE_DATE,GENDER,MARRIED,SALARY,EMP_MEMO) VALUES ( " +
       "'" + dsGet(ds,i,"EMP_ID"   ) + "'," +
       "'" + dsGet(ds,i,"FULL_NAME" ) + "'," +
       "'" + dsGet(ds,i,"DEPT_ID"   ) + "'," + 
       "'" + dsGet(ds,i,"HIRE_DATE" ) + "'," +
       "'" + dsGet(ds,i,"GENDER"    ) + "'," +
       "'" + dsGet(ds,i,"MARRIED"   ) + "'," +
       "'" + dsGet(ds,i,"SALARY"    ) + "'," +   
       "'" + dsGet(ds,i,"EMP_MEMO") + "' )";
       System.out.println(">>> insert : "+SQL);
   }
   else if( rowType == DataSet.ROW_TYPE_UPDATED )
   {
    String org_id = ds.getSavedData(i,"EMP_ID").toString();
    SQL = "UPDATE EMPLOYEES SET " +
       "FULL_NAME      = '" + dsGet(ds,i,"FULL_NAME"  ) + "'," +
       "DEPT_ID        = '" + dsGet(ds,i,"DEPT_ID"    ) + "'," + 
       "HIRE_DATE      = '" + dsGet(ds,i,"HIRE_DATE"  ) + "'," +
       "GENDER         = '" + dsGet(ds,i,"GENDER"     ) + "'," +
       "MARRIED        = '" + dsGet(ds,i,"MARRIED"    ) + "'," +
       "SALARY         = '" + dsGet(ds,i,"SALARY"     ) + "'," +
       "EMP_MEMO      = '" + dsGet(ds,i,"EMP_MEMO"  ) + "' " +
       "WHERE EMP_ID = " + "'" + org_id + "'";
   }
   rs = stmt.executeQuery(SQL);
  }
 
 
  //conn.commit();
 } catch (SQLException e) {
  // VariableList에 값을 직접 추가
  nErrorCode = -1;
  strErrorMsg = e.getMessage();
 }


 if ( stmt != null ) try { stmt.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}
 if ( conn != null ) try { conn.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}

 nErrorCode = 0;
 strErrorMsg = "SUCC";
  
} catch (Throwable th) {
 nErrorCode = -1;
 strErrorMsg = th.getMessage();
}
// VariableList 참조
VariableList varList = o_xpData.getVariableList();
   
// VariableList에 값을 직접 추가
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg", strErrorMsg);
// HttpServletResponse를 이용하여 HttpPlatformResponse 생성
HttpPlatformResponse pRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "UTF-8");
pRes.setData(o_xpData);
// 데이터 송신
pRes.sendData();
%>

4. 입력, 삭제, 저장 버튼에 fn_add, fn_delete, fn_save 이름으로 Onclick 이벤트를 잡아 준다.

5. 입력 function을 작성해보자.
// 입력
function fu_add(obj:Button,  e:ClickEventInfo)
{
 // 빈 레코드를 추가
 ds_employees.addRow();
}

6. 삭제 function을 작성해보자.
// 삭제
function fn_delete(obj:Button,  e:ClickEventInfo)
{
 // 레코드 삭제
 // ds_employees.rowposition : 사용자가 선택한 레코드 위치를 알려줌.
 ds_employees.deleteRow(ds_employees.rowposition);
}

7. 저장 function을 작성해보자.
// 저장
function fn_save(obj:Button,  e:ClickEventInfo)
{
 transaction("trSava"      // 트렌젝션의ID
      ,"DataURL::employees_save.jsp" // 서버측 주소
     
      ,"in_ds=ds_employees:u"          // input dataset
                                                  // 왼쪽은 server측에서 꺼내써야될 dataSet이름으로 맞춰야됨.
                                                  // 오른쪽 : 화면의 dataset이름
                                                  // :u  -> 변경된 내용 서버로 되돌려 보낼때 사용
            
      ,""                                        // ouput dataset
      ,"sVal1=1"                            // 서버측으로 보내는 변수값
      ,"fn_callback");                    // callback받는 function
     
}
// 비동기 통신을 받을 function
// 첫번째 인자는 트렌젝션의 아이디, 두번째는 에러코드값, 세번째는 에러메시지
function fn_callback(trID, nCD, sMSG){
 if(trID == "trSava"){
  if(nCD < 0){
   alert("저장실패");
  }else{
   alert("저장성공");
  }
 }
}

8. 화면을 출력하여 입력,삭제,수정,저장을 해보자
글 입력된 화면
글 수정 화면
글 삭제 화면


댓글 없음:

댓글 쓰기