반응형
파워빌더 함수 도움말 한글버전입니다..

6.0 버전이라 누락되거나 변경된것도 있을듯 하네요..

이후 버전에 추가된 것들은 없을수도 ^^;

@@페이지 표시가 잘 안되면 파일 선택하고 속성 들어가서 차단해제 하면 잘 보입니다.
반응형

파워빌더로 DB프로그램을 개발할때 많은 프로시져와 함수가 사용된다.
일반적으로 파워빌더에서 오라클의 Procedure나 Fuction을 실행할때 Declare문을 사용한다. 다음 예제는 도움말의 Example이다.

오라클의 spu_edt_object 프로시져를 호출하기 위해서 파워빌더 스크립트에서 DECLARE, FETCH를 이용하는 예제이다.
이렇게 복잡한 방법보다 다음과 같이 한라인으로 호출하도록 설정하는 방법을 알아보자.

SQLCA.spu_edt_object(o_id_object, o_message, a_id_object, a_param, a_value)

파워빌더의 SQLCA라는 변수는 시스템 글로벌변수로 파워빌더에서 DB transaction object로 정의되어 있는 변수이다. 이 변수를 사용자 정의 transaction object로 변경해서, 그 UserObject의 Local External Functions에 함수로 정의 하는 것이다.
우선 New > PB Object > Standard Class를 선택하여 transaction을 상속받은 UserObject를 생성하자.

새로 만든 UserObject를 저장한다. 예제에서는 uo_transaction으로 저장하였다. 그럼 SQLCA를 정의한 곳에서 transaction 대신에 지금 만든 uo_transaction 오브젝트로 재정의 해 준다.
이제 SQLCA를 uo_transaction으로 재정의 해줘야한다. SQLCA가 정의된 곳은 Application 오브젝트에 있다.
Application 페이터를 열고, Properties의 General탭 제일 아래에 보면 "Additional Properties"가 있다. 이 버튼을 클릭하면 Variable Types탭에 SQLCA를 정의하는 부분이 있다. 디폴트로 transaction으로 되어 있는 부분을 새로 만든 transaction 오브젝트인 uo_transaction으로 변경해 준다.
 
이제 기본적인 설정은 끝이 났고, 오라클의 프로시져나 함수를 uo_transaction 오브젝트의 Local External Fuction으로 정의만 하면 된다.
프로시져/함수를 등록하는 Syntax는 외부 DLL함수를 등록하는 방식도 대동소이하다. DLL 등록시 사용되는 Library 키워드 대신에 RPCFUNC라는 키워드가 사용된다. 그리고 프로시져에서 OUT변수는 REF키워드를 사용하여 정의하면 된다.

FUNCTION rtndatatype functionname ( { { REF } datatype1 arg1, ...,    { REF } datatypen argn } ) 
RPCFUNC { ALIAS FOR "spname" }
SUBROUTINE functionname ( { { REF } datatype1 arg1 , ...,    { REF } datatypen argn } ) 
RPCFUNC { ALIAS FOR "spname" }

procedure는 SUBROUTINE으로 등록하면 된다.
그럼 위 예제의 프로시져는 다음과 같이 등록하면 될것이다.

SUBROUTINE spu_edt_object(REF long o_id_object, REF string o_message, long a_id_object, string a_param, string a_value) RPCFUNC ALIAS FOR "spu_edt_object"

이렇게 정의해둔 프로시져나 함수는 SQLCA.<함수명>({변수}) 와 같은 식으로 한라인으로 처리가 가능하다.
알고 나면 쉽지만... 모르면 Example의 예처럼 많은 삽질을 해야한다. ^^;

반응형

파워빌더 11 제품발표 세미나에서 Q/A시간에 어떤 개발자 분이 했던 질문이 있었다. 데이터윈도우(DW)에서 Query를 수정하면 기존 화면이 변경되는 경우가 있는데, 이거 개발자가 의도하지 않는 경우는 변경안되도록 해달라는 요지의 질문이었다. 답변에 나선 John Strano는 파워빌더가 개발의 편의를 위해서 자동으로 DW의 컬럼명을 rebuild하는 기능인데, 개발자가 의도하지 않은 때가 있기 때문에 그런 문제가 생긴 것같고, 이 문제는 여러 개발자들의 의견을 수렴해서 EBF에 반영하겠다는 원론적이 답변을 하였다.
이 문제는 파워빌더로 레포트를 개발하다가 보면 개발자를 아주 짜증나게 하는 원인이 되기도 한다. 이쁘게 만들어 둔 레포트화면이 쿼리의 컬럼면 하나 수정으로 다 틀어져 버리는 경우가 생기기 때문이다.

세미나에서 질문을 한 개발자도 이야기 했지만, 대부분의 레포트의 개발은 우선 쿼리를 DB관리툴(TOAD)에서 만든 다음 파워빌더에서 DW를 생성하는 방법을 사용한다. 나도 대부분의 레포트를 TOAD같은 툴에서 미리 쿼리를 생성하고 Data를 검증한 후 파워빌더에서 DW를 새로 생성할때 Design > Conver to Syntax메뉴를 선택하여 TOAD에서 만든 쿼리를 복사/붙혀넣기해서 작업을 진행한다. Graphic모드가 Default로 되어 있는데 이것도 옵션으로 처리하게 했으면 좋겠는데... 외국 개발자들은 Graphic모드에서 다 처리하는지도 모르겠다. --;

우선 이렇게 생성한 DW의 쿼리가 변경되었을때 일반적으로 개발자들은 DW Painter를 오픈하고 Data Source 툴바를 클릭하고 쿼리를 수정하게된다. 여기서 문제가 발생한다. 기존 쿼리의 컬럼명을 바꾸었는데, 그 컬럼이 DW에서 Display되던 컬럼이었다면 컬럼에 적용된 디자인은 모두 날라가버리게 된다. 파워빌더가 기본으로 DW의 컬럼명을 자동으로 생성하기 때문이다. 옵션으로 이 기능을 해제할 방법도 없다.

해결방안은 Edit Source를 이용하는 것이다.

DW 오브젝트를 선택하고 오른쪽 마우스키를 클릭하면 파업메뉴가 뜨는데 그중 Edit Source를 선택하면, 파워빌더의 텍스트 에디트 페인터에 DW의 오리지널 소스가 표시되고, 수정할 수가 있게 된다. 여기서 retrieve항목의 값이 Query값이 된다. retrieve항목의 값으로 더블코테이션("")안에 쿼리가 위치하는데, Query가 멀티라인일 경우 Syntax Highlight가 조금 이상하지만 자세히 보면 쿼리부분을 금방 구분할 수가 있을 것이다. 이 부분의 쿼리를 변경해 주면 DW의 디자인은 전혀 변경이 되지않는다.

이 Tip은 또다른 경우에도 사용될 수가 있다. 바로 Update Properties의 불필요한 변경을 방지하는 경우이다.

DW화면 디자인 뿐아니라 DW의 Update()함수를 이용하여 데이터를 추가/삭제하는 기능이 있는 DW에 쿼리가 변경될 경우 Update Properties에 설정된 내용이 몽창 날라가 버리는 경우가 있다. 이 문제을 알면 다행인데, 모르고 넘어가면 잘 동작하던 프로그램이 오동작을 하게되어 버그를 찾는데 한참 삽질을 해야하는 경우가 발생한다. 나도 많이 그랬으니까... --;
이런 경우에도 Edit Source를 이용하여 쿼리를 수정하면 Update Properties에 설정했던 내용은 전혀 변경되지 않는다. Edit Source로 보면 알겠지만 Retrieve항목의 쿼리바로 다음에 Update Properties의 설정 내용이 있는 것을 알 수가 있을 것이다. DW 페인터에서는 이부분 또한 자동으로 생성되기 때문에 쿼리가 수정되면 문제가 발생하는 것이다.

이렇게 Edit Source로 소스를 자주 수정하다 보면 다른 오브젝트들도 Edit Source기능으로 수정하는 경지에 이르게 된다. ^^;

반응형

파워빌더로 개발을 진행하다가 보면 수많은 외부함수,윈도우 함수,글로벌변수,인스턴스변수,로컬변수등을 사용하게 된다. 프로그램이 커지다보면 여기저기에 있는 함수명, 변수명을 일일이 기억하기란 그리 쉬운일이 아니다. 간단하게 이런 함수명이나 변수명을 스크립트창에서 바로 찾아서 참고할수 있다면 참 편리할 것이다. 이전에 버젼 8을 사용할때도 AutoScript기능이 있었으나 솔직히 느린 반응 속도때문에 거의 사용을 하지 않았다. 오브젝트 브라우져를 통해 해당 오브젝트 열어서 일일이 함수명 변수명을 확인하고 스크립트를 작성하곤 하였다.
하지만 10버젼으로 업그레이드(9버젼은 사용해 본 경험이 없어서 논외로 하겠다)하면서 다시 이 기능을 사용해 보니 기존버젼에 비해 많이 성능이 향상되었음을 느끼게 되었다.


AutoScript 이용한 스트립트 작성

기본적으로 파워빌더는 자동으로 AutoScipt 팝업을 띄우는 기능이 비활성화 되어 있다. Edit > Activate AutoScript 메뉴를 이용하여 수동으로 AutoScirpt팝업을 실행시킬 수가 있다. 예를 들어 로컬 변수로 ll_count라는 변수가 선언되어 있다면, 이 변수를 사용할 위치에서 ll만 타이프하고 Edit > Activate AutoScript 메뉴를 선택하면 자동으로 ll_count라고 입력이 되는 것이다. Edit > Activate AutoScript 메뉴를 단축키를 등록(Tools > Keyboard Shortcuts... ; 필자는 F2를 단축키로 등록)하여 두면 사용하기 편하다.
ll로 시작하는 로컬 변수가 여러개 있다면 팝업이 떠서 개발자가 선택하도록 한다. 만약 ll로 시작하는 변수가 하나라면 자동으로 해당 변수가 입력되는 것이다.
로컬변수 뿐만이 아니라 Design > Options 창의 AutoScript화면에 설정된 것은 모두 Activate AutoScript 메뉴를 통해 팝업창으로 조회할수 가 있다.


Default로는 선택이 안되어 있는 Statement Templates항목을 활성하 시키면, if, for, do, choose, try등과 같은 제어문의 템플릿을 추가할 수도 있다. 예를 들어 if를 입력 후 Activate AutoScript 메뉴를 클릭하면 다음과 같은 if문의 템플릿을 선택할 수 있다.


두번째 if then else를 선택하면 다음과 같은 템플릿이 추가된다.
if /*condition*/ then
    /*action1*/
else
    /*action2*/
end if
템플릿 스크립트가 추가된 후 바로 /*condition*/부분이 선택되며, 조건을 바로 입력하여 간단하게 if문을 작성할수가 있다.
Activate AutoScript 메뉴를 선택할 필요없이 바로 관련된 팝업이 뜨도록 하고 싶다면 Automatic Popup옵션을 활성화하고 Delay(Milliseconds)항목에 팝업이 나타나는데 Delay될 시간을 설정해 준다. Defult로 1000이 설정되어 있는데 100정도로 줄여주면 빠르게 팝업을 띄울수가 있다.
Delay를 짧게 주고 Automatic Popup옵션을 활성화 시켜두면 스크립트를 작성할 때마다 AutoScript팝업이 떠서 불편하다고 느껴진다면, Delay시간을 약간 길게 조정하거나 dot이후에만 AutoScript팝업을 활성화시키는 Activate Only After a Dot 옵션을 활성화 시켜서 사용하면 된다.

그러나 아직 파워빌더의 AutoScript는 MS Visual Studio보다 많은 점이 부족하다. 특히 함수를 선택하면, Argument를 /**/와 같이 주석처리해서 스크립트에 박아버려서 개발시 참고하도록 하고 있다. 개발시 추가된 이주석을 지우고 변수명으로 대체하는 작업이 반복되다 보면 효율이 상당이 떨어진다. Visual Studio처럼 (입력하면 Argument List가 풍선도움말로 나타나는 기능이 있었으면 아주 편할텐데, 이점이 참 안타깝다.

Paste Special을 이용한 스크립트 작성

파워빌더로 스크립트 작성중에 툴바를 자세히 보면, 일반적으로 붙혀넣기로 사용되는 아이콘과 비슷한 아이콘들이 여러개 붙어 있는걸 볼수가 있다.
붙혀넣기(Paste)는 붙혀넣기인데, 파워빌더에만 있는 특별한 붙혀넣기. Paste Special을 이용하면 스크립트 작성시간을 많이 단축할수가 있다. Paste Special은 툴바의 단축아이콘뿐만 아니라 메뉴의 Edit > Paste Special를 통해서도 접근이 가능하다. 메뉴를 보면 서브메뉴로 툴바에 있는 9개에 추가로 From File...이라는 메뉴가 있다. 각각의 기능은 다음과 같다.

  • Function
    Built-in : 파워빌더의 내장함수
    User-defined : 사용자 정의 함수(ex. 윈도우 함수)
    External : External 함수(ex. win32 API 함수)
  • SQL : Cursor, SELECT문, DML문, Procedure관련된 스크립트를 작성한다. 이것을 이용하면, 스크립트 빌더툴을 실행하여 결과를 스크립트에 반영하는 방식으로 적용된다.
  • Statement : IF, FOR, DO, CHOOSE, TRY문의 템플릿을 스크립트에 추가한다.
  • Global : Global변수 리스트 팝업이 나타나고, Global변수를 선택하면 스크립트에 추가된다.
  • Shared : Shared변수 리스트 팝업이 나타나고, Shared변수를 선택하면 스크립트에 추가된다.
  • Instance : Instance변수 리스트 팝업이 나타나고, Instance변수를 선택하면 스크립트에 추가된다.
  • Window : Access가능한 윈도우 오브젝트 리스트 팝업이 나타나고, 윈도우 오브젝트를 선택하면 스크립트에 추가된다.
  • Object : Access가능한 오브젝트 리스트 팝업이 나타나고, 오브젝트를 선택하면 스크립트에 추가된다.
  • Argument : 이벤트나 함수의 Argument 리스트 팝업이 나타나고, Argument를 선택하면 스크립트에 추가된다.
  • From File... : 파일 선택 팝업이 나타나고, 선택한 파일의 내용이 스크립트에 추가된다.

이중 SQL, Window, From File 이외의 기능은 AutoScript로 추가가 가능한 메뉴라서 사용 비율이 현저히 떨어지는 것이다.
From File기능은 개발중 스크립트 해더 커맨트부분을 템플릿을 파일로 작성해 두고, 스크립트 작성전 해당 템플릿 파일을 불어와서 스크립트를 작성하도록 하면, 소스코드의 관리에 도움이 될 것이다.

파워빌더의 AutoScript기능은 기본적으로 비활성화 되어있기 때문에 개발자들이 잘 모르는 경우가 있다. 이기능을 기본으로 활성화 시켜두고, MS Visual Studio처럼 더욱 좋은 기능을 첨가하고, 보완한다면 파워빌더의 생산성 향상에 많은 도움이 될꺼라는 생각을 해본다.

+ Recent posts