[ 파워빌더.DDDW - 태그(tag) 활용해서 dddw 자동으로 조회 ]

 

 

☞   

 

참고 글)tag 활용하기 http://cafe.naver.com/pentaeduclub/2523
자동으로 윈도우내 모든 데이터윈도우 dB 연결하기 2 http://cafe.naver.com/pentaeduclub/7486

 

 

-----------------------------------------------------------

dw의 각 컬럼마다 보시면, property에 tag가 있다.

이를 이용해서 dddw에 아규먼트가 있어서 조회를 시켜줘야 하는 컬럼에 대한 자동 조회로직을 만들어 보자.

물론 아규먼트가 없는 dddw는 auto retrieve 속성만 체크해주면  되기 때문에 별 상관없다.(하위 버전은 안될 수도 있음)

 

방식은 간단하다.

dddw 가 있는 컬럼의 태그에 아규먼트 값을 적어주는 것이다.

단, 전제조건은 공통코드 값처럼 고정이여야 한다는 것이다.

 

변수를 셋팅하는 방법은 아직 고민을 안해봤다..(머..규칙을 만들면..가능할지도...ㅎㅎ)

 

자, 본격적으로 설명을 해 보겠다.

예를 들어, dept_cd 라는 부서코드가 공통코드 테이블에 01 이라는 대표번호로 정의가 되어 있고,

kind 라는 종류(어느 종률까? ㅋ) 를 나타내는 코드 내용이 공통코드 테이블에 02라는 대표번호로 정의가 되어 있다고 보자.

 

이럴 경우, 우린 두 가지 방법으로 dddw를 정의한다.

먼저, dept_cd, kind 컬럼용 dddw를 아규먼트 없이 각자 생성한다. 자동으로 조회시킨다.

두번째는 대표번호를 아규먼트로 하는 dddw를 하나 생성 해놓고, 스크립트에서 getchild() 해서 직접 조회해준다.

 

전자의 경우에는 편하지만, 그 코드수만큼 dddw를 만들어야 한다. 형식이 똑같다면,  자원의 낭비가 될 수도 있다.

이점에 기인해서 후자의 경우를 좀 편하는 하는 방법을 적용한 것이다.

 

dept_cd, kind 컬럼의 태그에 각 각 01, 02만 셋팅해놓는다.

 

이제 공통 조상 윈도우에서는 다음과 같은 함수를 하나 만들어서 open 시에 실행만 시켜주면 된다.

그전에 함수 하나 더 추가

함수명 : stringtokenize

아규먼트 : ref string as_source

                        string as_separator

리턴값 string

integer li_pos
string  ls_retValue

if isnull( as_source ) or IsNull( as_separator ) THEN
 String ls_Null

 SetNull( ls_Null )
 Return ls_Null
END IF

li_pos = Pos( as_source, as_separator )
IF li_pos = 0 THEN
 ls_retValue = as_source
 as_source = ""
ELSE
 ls_retValue = Mid( as_source, 1, li_pos - 1 )
 as_source = Right( as_source, Len(as_source) - (li_pos + Len( as_separator ) -1 ) )
END IF

Return ls_retValue

 

 

함수명 : wf_set_comdddw

아규먼트 : datawindow adw

리턴값 없음

 

DatawindowChild ldwc_child
String ls_objects, ls_col_nm, ls_dddw_name, ls_cd_id
ls_objects = adw.Describe("DataWindow.Objects")
do while true
 // 각 컬럼의 이름을 가져온다.
 if ls_objects = '' then
  exit
 end if
 ls_col_nm = stringtokenize(ls_objects, '~t')
 //해당 컬럼이 dddw 타입이 아니면 패스..
 if adw.Describe(ls_col_nm+".Edit.Style") <> 'dddw' then continue
 ls_dddw_name = adw.Describe(ls_col_nm + ".dddw.name")
 //공통 코드 dddw 가 아니면 패쓰..
 choose case ls_dddw_name
  case 'd_dddw_common' //공통 코드 dddw 명.. 사용자에 따라 다르겠죠? ^^
   //태그값을 읽어서 자동으로 조회시킨다.
   ls_cd_id = adw.Describe(ls_col_nm + ".tag")
   if adw.GetChild(ls_col_nm, ldwc_Child) = -1 then
    Messagebox('Error', 'wf_set_comdddw() , Getchild() 에러')
    exit
   end if
   ldwc_child.setTransObject(sqlca)
   ldwc_child.retrieve(ls_cd_id)
  case else
   continue
 end choose
Loop

 

Posted by 농부지기
,