본 Activity에서는 주어진 정보(table name 또는 procedure name)를 이용해서 실행하고자 하는 문장을 만든다.
- {call (?,?} 형태의 프로시저 실행 문장
- select * from where constraint_column=? 형태의 sql 문장
이러한 문장은 다음과 같은 형태의 SQL 실행결과를 필요로 한다.
사용 예
- case 1 :
==>
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
/ / IN /
--> {call proc1( )} 문을 실행함.
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
P_INPUT1 / VARCHAR2 / IN / INPUT1
P_INPUT2 / NUMBER / IN/OUT / INPUT2
P_OUTPUT / NUMBER / OUT / OUTPUT
--> {call proc1( ?,? )} 문을 실행함.
--> bind에 사용되는 data 2개는 GlueContext에서 SECOND_NAME(null일 경우 NAME)를 key로 해서 획득함.
--> GlueContext에 2개의 결과값 추가함. GlueContext의 key는 SECOND_NAME(null일 경우 NAME)이 사용됨
- case 2 :
==>
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
/ / IN /
--> {call biz1.sub1( )} 문을 실행함.
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
P_INPUT1 / VARCHAR2 / IN /
P_INPUT2 / NUMBER / IN/OUT /
P_OUTPUT / NUMBER / OUT /
--> {call biz1.sub1( ?,? )} 문을 실행함.
--> bind에 사용되는 data 2개는 GlueContext에서 SECOND_NAME(null일 경우 NAME)를 key로 해서 획득함.
--> GlueContext에 2개의 결과값 추가함. GlueContext의 key는 SECOND_NAME(null일 경우 NAME)이 사용됨
- case 3 :
==>
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
/ / IN /
--> {call biz1.sub1( )} 문을 실행함.
oracle.procedure.arguments(sql-key) 실행결과(NAME/DATA_TYPE/IN_OUT/SECOND_NAME 순) 가 다음과 같을 경우
P_INPUT1 / VARCHAR2 / IN /
P_INPUT2 / NUMBER / IN/OUT /
P_OUTPUT / NUMBER / OUT /
--> {call biz1.sub1( ?,? )} 문을 실행함.
--> bind에 사용되는 data 2개는 GlueContext에서 가져올때 사용되는 key는 name-bindings에 근거함
ctx.get("a") : P_INPUT1 이 아닌 a를 key로 함.
ctx.get("P_INPUT2") : name-bindings에 P_INPUT2가 없으므로 실행결과 NAME이 사용됨.
--> GlueContext에 2개의 결과값 추가함. GlueContext의 key는 name-bindings에 근거함.
ctx.put("P_INPUT2", obj1) : name-bindings에 P_INPUT2가 없으므로 실행결과 NAME이 사용됨.
ctx.put("result", obj2) : : P_OUTPUT 이 아닌 result를 key로 함.
Property 설정- dao : (필수) applicationContext.xml의 DAO id.
- sql-key : (필수) xxx-query.glue_sql의 query id
유형에 맞는 query를 지정해야 하며, query 실행결과에 따라 Statement 실행 구문이 만들어짐.
sql은 named query여야 하며, :table_name, :object_name, :package_name, :owner만 named parameter로 사용한다.
ex) oracle 의 경우 다음 3가지 유형에 맞는 SQL 이 필요함.
1. procedure 실행
-> {call package.procedure(:arg, :arg, ...)}
2. package 실행
-> {call procedure(:arg, :arg, ...)}
3. table 정의 정보에 기반한 sql 실행
-> select * from table where column_pk = :column and ...
-> insert into table(column, ...) values (:column, ...)
-> delete from table where column_pk = :column and ...
-> update talbe set column=:column, ... where column_pk = :column and ...
- procedure-name : (필수) 실행하고자 하는 PL/SQL 프로시저 또는 패키지 이름. table-name 과 같이 사용할 수 없음.
sql-key에 해당하는 query를 실행한 결과항목(oracle.procedure.arguments, oracle.package.arguments 참고)
- 필수 : NAME, DATA_TYPE, IN_OUT 항목을 포함해야함.
- 선택 : SECOND_NAME 항목은 name을 가공한 값임.
sql상의 :package_name 과 :object_name 의 값으로 사용됨.
- aaa.bbb 형태일경우 경우 :package_name으로 aaa 를 :object_name에는 bbb 를 그 값으로 bind함.
- ccc 형태일 경우 :object_name 에 ccc 를 그 값으로 bind함.
실행결과는 IN/OUT 과 OUT 유형에 대해.. _result 로 GlueContext에 담김.
- table-name : (필수) table 명. procedure-name 과 같이 사용할 수 없음.
sql-key에 해당하는 query를 실행한 결과 항목(oracle.table.primary.key 참고)
- 필수 NAME, DATA_TYPE, CONSTRAINT_TYPE 을 포함해야함.
- 선택 : NULLABLE 항목은 sql 실행시 bind되는 값의 null check해당 항목인지 판단함..
sql상의 :table_name 의 값으로 사용됨.
- table-sql : (선택) sql 처리 유형. default는 select임.
- select : PK(UK)를 조건으로 select 수행. 조회 결과는 _resultList 으로 GlueContext에 담김.
- insert : insert 수행. 등록 결과는 _result 로 GlueContext에 담김.
- update : PK(UK)를 조건으로 update 수행. 수정 결과는 _result 로 GlueContext에 담김.
- delete : PK(UK)를 조건으로 delete 수행. 삭제 결과는 _result 로 GlueContext에 담김.
- save : PK(UK)를 조건으로 select 수행하고 그 결과 따라 insert or update 수행. 저장 결과는 _result 로 GlueContext에 담김.
- desert : delete and insert 수행. 등록 결과는 _result 로 GlueContext에 담김.
- owner : (선택) : owner 정보..
oarcle 사용시 sql-key에 해당하는 query에서
user_arguments가 아닌 all_arguments를 사용할 경우 owner 정보를 지정할 수 있음.
sql상의 :owner 의 값으로 사용됨.
- name-bindings : (선택) mapping 정보로 name=ctxKey[|name=ctxKey...] 형태임.
parocedure-name이 사용된 경우는 argumentName=ctxKey|argumentName=ctxKey 의미로 사용함
table-name이 사용된 경우는 columnName=ctxKey|columnName=ctxKey 의미로 사용함.
- name-values : (선택) mapping 정보로 name=constants[|name=constants...] 형태임.
parocedure-name이 사용된 경우는 argumentName=constant|argumentName=constant 의미로 사용함
table-name이 사용된 경우는 columnName=constants|columnName=constants 의미로 사용함.
- null 값일 경우 'name' 만 입력 할 것
- empty string 일 경우 'name=' 만 입력 할 것
- space 일 경우 'name= ' 만 입력 할 것
==> 'a|b=|c= |d=value' 형태가 될 것임.
name-bindings와 name-values의 우선순위는 name-values 를 우선으로 함.
- chk-name : (선택) 화면의 CheckBox ID(HttpRequest의 parameter name).
와 같이 "chk" 가 선언 되어 있다면,
의 value 값에 따라 Looping 처리를 한다.
chk의 value는 0,1,2...,n 으로 부여되며 checked 된 값만 Context에 담긴다.
- list-key : (선택) Binding 할 Data Context Key.
와 같이 "dataList" 가 선언 되어 있다면,
이전 Activity에서 List(Map) 구조의 Data를 생성해서 Context에 담는다.
[ sample java code ]
List dataList = new ArrayList();
Map data1 = new HashMap();
data1.put("EMPNO","1111");
dataList.add(data1);
Map data2 = new HashMap();
data2.put("EMPNO","2222");
dataList.add(data2);
ctx.put("dataList",dataList);
Field Summary
Fields inherited from class com.poscoict.glueframework.biz.activity.GlueActivity
Sub Class에서 반드시 구현하여야 하는 Abstract Method 이며 이 Method는 F/W에서 호출한다. 결과 값은 GlueContext에 담아서 다음 Activity 또는 F/W에 전달하게 된다. 필요한 모든 Data는
GlueContext에서 호출하여 사용하게 된다.