Class GlueJdbcModify

java.lang.Object
com.poscoict.glueframework.biz.activity.GlueActivity<GlueContext>
com.poscoict.glueframework.biz.activity.GlueJdbcModify

public class GlueJdbcModify extends GlueActivity<GlueContext>
Modify Activity. GlueJdbcModify Class는 "update emp set ename=?, job=? where empno=?" 와 같은 SQL update statement를 수행 하는 Activity 이다. Web화면과 NonUI 공통으로 사용되고 Binding Parameter Type은 Web인 경우 String []의 {0}번째로 Binding 하고 Web이 아닌 경우는 해당 Object를 Binding 한다. 여기서 chk-name이 있는 경우 Web의 CheckBox에 Check 된 수만큼 반복 하고 없는 경우는 Context에서 바로 String[] 로 get하여 Binding 한다. NonUI의 경우 Data Type이 String[]가 아닌 경우 바로 해당 Object로 Binding 한다.
 Activity Property

 - dao : (필수) applicationContext.xml의 DAO id.

 - sql-key : (필수) {name}-query.glue_sql의 query id 

 - param-count : (선택) Binding 할 개수 ( update emp set ename=? job=? where empno=? )의 "?" 수

 - param#(param0,param1...) : (선택) Binding Value ("?"와 순서 일치 하여야 함)

 - param-bindings : (선택) binding에 사용되는 값과 Mapping 되는 Key( bindName=ctxName[|bindName=ctxName] ).
         ctx의 key가 binding variable name과 같은 경우 생략(대소문자 구분함).
         ctxName 은 GlueContext의 Key 이거나 list-key 에 해당하는 map의 Key이다.

 - chk-name : (선택) 화면의 CheckBox ID(HttpRequest의 parameter name).
         chk-name 에 따라 Looping 처리를 한다. 
         chk-name에 해당하는 것이 다음과 같이 checkbox 라면, 그 값은 0,1,2...,n 으로 부여되며 
         checked 된 값만 GlueContext에 담긴다. 

 - list-key : (선택) SQL 문에 Binding 할 Data로서, Map 형태의 Data을 갖는 List 구조체를 가르킴.

 - result-key : (선택) Context에 담기는 Query 수행 결과(등록 record 수) Key.
         [ default ] : {sql-key}_updateCnt

 - is-audit : insert시 Audit 항목 적용 Option
          Audit 항목은 glue.properties에 audit.insert.key 와 audit.update.key 를 참고한다.
          주의사항: Audit 항목은 SQL에 반영되어 있어야 한다. 
                아래의 'emp.update.audit' 와 같은 유형의 SQL인 경우, 
                Column의 순서는 glue.properties에 정의한 순서와 같아야 하며, 
                Audit 항목을 위 SQL처럼 맨 앞에 기술되어야 한다.



 예제
 
 사용 예# 1
 - 유형1 쿼리를 사용하는 경우

     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update" />
         <property name="param-count" value="3" />
         <property name="param0" value="SAL" />
         <property name="param1" value="ENAME" />
         <property name="param2" value="EMPNO" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 2
 - 유형1 쿼리의 Looping 처리. (Web)

     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update" />
         <property name="param-count" value="3" />
         <property name="param0" value="SAL" />
         <property name="param1" value="ENAME" />
         <property name="param2" value="EMPNO" />
         <property name="chk-name" value="chk" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 3
 - 유형1 쿼리의 Looping 처리. (NonUI)

     <activity name="Custom" class="...">
         <transition name="success" value="Modify" />
     </activity>
     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update" />
         <property name="param-count" value="3" />
         <property name="param0" value="SAL" />
         <property name="param1" value="ENAME" />
         <property name="param2" value="EMPNO" />
         <property name="list-key" value="dataList" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 4
 - 유형2 쿼리를 사용하는 경우

     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update.named" />
         <property name="param-bindings" value="empno=EMPNO|ename=ENAME|sal=SAL" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 5
 - 유형2 쿼리의 Looping 처리. (Web)

     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update.named" />
         <property name="param-bindings" value="empno=EMPNO|ename=ENAME|sal=SAL" />
         <property name="chk-name" value="chk" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 6
 - 유형2 쿼리의 Looping 처리. (NonUI)

     <activity name="Custom" class="...">
         <transition name="success" value="Modify" />
     </activity>
     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update.named" />
         <property name="param-bindings" value="empno=EMPNO|ename=ENAME|sal=SAL" />
         <property name="list-key" value="dataList" />
         <transition name="success" value="Find" />
     </activity>


 사용 예# 7
 - 유형1 쿼리의 audit정보

     <activity name="Modify" class="com.poscoict.glueframework.biz.activity.GlueJdbcModify">
         <property name="dao" value="testdao" />
         <property name="sql-key" value="emp.update.audit" />
         <property name="param-count" value="3" />
         <property name="param0" value="ENAME" />
         <property name="param1" value="SAL" />
         <property name="param2" value="EMPNO" />
         <property name="is-audit" value="true" />
         <transition name="success" value="Find" />
     </activity>



 참고 : {name}-query.glue_sql

     <query id="emp.update" desc="Type #1">
         <![CDATA[
               update emp set sal=?, ename=? where empno=?
         ]]>
     </query>
     <query id="emp.update.named" desc="Type #1" isNamed="true">
         <![CDATA[
               update emp set sal=:sal, ename=:ename where empno=:empno
         ]]>
     </query>
     <query id="emp.update.audit">
         <![CDATA[
               update emp_audit
               set audit_update_id=?, audit_update_ip=?, audit_update_dt=?,
                 ename=?, job=?
               where empno=?
         ]]>
     </query>


 참고 : HTML Code

     <input type="checkbox" name="chk" value="0">
     <input type="text" name="EMPNO" value="1111">
     <input type="text" name="ENAME" value="name1">
     <input type="text" name="SAL" value="1000">
     <input type="checkbox" name="chk" value="1">
     <input type="text" name="EMPNO" value="1112">
     <input type="text" name="ENAME" value="name2">
     <input type="text" name="SAL" value="1100">


 참고 : Java Code (Custom)

     List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
     Map<String, Object> data1 = new HashMap<String, Object>();
     data1.put("EMPNO","1111");
     data1.put("ENAME","name1");
     data1.put("SAL","1000");
     dataList.add(data1);
     Map<String, Object> data2 = new HashMap<String, Object>();
     data2.put("EMPNO","1112");
     data2.put("ENAME","name2");
     data2.put("SAL","1100");
     dataList.add(data2);
     ctx.put("dataList",dataList);


 참고 : glue.properties

     audit.insert.key=id,ip,cur_time,id,ip,cur_time
     audit.update.key=id,ip,cur_time
 
  • Constructor Details

    • GlueJdbcModify

      public GlueJdbcModify()
  • Method Details

    • runActivity

      public String runActivity(GlueContext ctx)
      Description copied from class: GlueActivity
      Sub Class에서 반드시 구현하여야 하는 Abstract Method 이며 이 Method는 F/W에서 호출한다. 결과 값은 GlueContext에 담아서 다음 Activity 또는 F/W에 전달하게 된다. 필요한 모든 Data는 GlueContext에서 호출하여 사용하게 된다.
      
       예)
       <transition name="success" value="BizLogic"/>
       <transition name="failure" value="ErrorHandle"/>
       ==> return "success"이면 BizLogic Activity 를 실행함.
       
      Specified by:
      runActivity in class GlueActivity<GlueContext>
      Parameters:
      ctx - GlueContext
      Returns:
      String 정상적이면 "success"를 Return 하고 비정상 처리를 원하면 "failure"를 Return 한다.