본문 바로가기
프로그래머의 길/Power Builder

Power Builder Function (4)

by 제이콥케이 2008. 1. 3.
반응형

[ InsertRow PowerScript Function ]

◆ 기 능
데이타윈도우의 주어진 ROW의 위치에 초기화된 ROW를 삽입한다.
ROW가 0이면 마지막에 추가된다.
InsertRow함수 인수는 새로운 행을 위치시키려고 하는 곳의 행 번호를 명시한다.
예를 들면, 인수가 5이면 다섯번째 위치에 행을 삽입하고, 현재 5번째 행은 6번째 행으로 될 것이다.

◆ 문 법
datawindowname.InsertRow ( row )
DataWindowName에는 행을 삽입하고자 하는 DataWindow control이나 자손 DataWindow의
이름을 기입한다.
row에는 삽입될 row의 위치를 지정한다. 주어진 row값 앞에 삽입된다. 또한,
row가 0이면 마지막 행의 다음 위치에 새로운 row가 추가된다.

◆ 반환값
long.
성공하면 삽입된 row의 번호, 실패하면 -1을 리턴한다.

◆ 사용법
현재행이나 디스틀레이의 변화없이 행을 간단하게 삽입할수 있다. 한행으로 자리 이동하고 그
것을 현재행으로 만들기 위해 ScrollToRow를 호출하라. 현재행으로 간단히 만들기 위해 SetRow를
호출하라.

◆ 예 제
dw_emp 의 7번째 행에 초기화된 행을 삽입하는 예제이다.
dw_emp.InsertRow(7)

다음 예제는 마지막 행에 초기화된 행을 삽입하고 그행으로 스크롤해 현재행으로 만드는 것이다.
long ll_newrow
ll_newrow = dw_emp.InsertRow(0)
dw_emp.ScrollToRow(ll_newrow)

반응형


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

[ IsSelected PowerScript Function ]

◆ 기 능
DataWindow에 행이 선택되었는지를 결정하며, 지정된 행은 역상으로 나타낸다.

◆ 적 용
데이터윈도우 컨트롤과 자손데이터윈도우.

◆ 문 법
datawindowname.IsSelected(row)
* datawindowname : 사용자가 test하기를 원하는 행을 포함하는 데이터윈도우 컨트롤 또는 자손 데이터윈도우의 이름
* row : 행이 선택되었다면 사용자가 test하여 보여주기를 원하는행

◆ 반환값
Boolean.
datawindowname의 행이 선택되었다면 TRUE를 반환하고 선택되지 않았다면 FALSE를 반환한다.

◆ 사용법
user clicked가 선택된 행의 clicked event script에 사용자는 IsSelected 함수를 호출할수 있다.

◆ 예 제
integer CurRow
boolean result

CurRow = dw_employee.GetRow()
result = dw_employee.IsSelected(CurRow)

아래 코드는 dw_employee에서 현재 행이 선택되었는지를 테스트하기위해 IsSelected 함수를 부른다.
행이 선택되었다면 SelectRow는 그것을 해제하고, 선택되지않았다면 SelectRow는 그것을 선택한다.

IF result THEN
dw_employee.SelectRow(CurRow, FALSE)
ELSE
dw_employee.SelectRow(CurRow, TRUE)
END IF

아래 코드는 IF/THEN/ELSE문과 같은 결과를 얻기위하여 IsSelected 함수의 반환값에 NOT연산
자를 사용한 것이다.

integer CurRow
boolean result
CurRow = dw_employee.GetRow()
dw_employee.SelectRow(CurRow, &
NOT dw_employee.IsSelected(CurRow))


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

[ ModifiedCount PowerScript Function ]

◆ 기 능
변경은 되었지만 아직 database에서 변경되지 않은 행의 수를 구한다.

◆ 적 용
datawindow controls 와 child datawindows

◆ 문 법
datawindowname.ModifiedCount()

* datawindowname : 변경되었지만 연결된 database table에서 변경되지 않은 행의 수를 구하려
는 datawindow control의 이름이나 child datawindow의 이름

◆ 반환값
long.
datawindow에서 변경된 행의 수를 반환한다. 변경된 행이 없거나 모든 수정된 행이
database table에서 변경되었다면 0을 반환하고 에러 발생시 에는 -1을 반환한다.

◆ 사용법
ModifiedCount는 datawindow와 연결된 database table에 변경되었거나 더해지도록 계획된 행의
수를 알 수 있다. primary buffer나 filter bufferdks의 행까지 포함한다.
DeleteCount 함수가 delete bufferdks의 행수를 세었다. RowCount 함수는 primary bufferdks의 총 행수를 센다.

◆ 예 제
5개의 행이 수정되고 연결된 database table에서 변경되지 않았다면 다음 ll_row에 5가 저장된다.
long ll_row
ll_row = dw_emp.ModifiedCount()

만약 모든 행이 수정되고 database table에서 변경이 아직 안되었다면 다음 예제는 database table
을 변경시킨다.

IF dw_emp.ModifiedCount() > 0 THEN
dw_emp.Update()


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

[ Modify PowerScript Function ]

◆ 기 능
데이타윈도우내의 오브젝트의 속성을 변경시킨다.
명시된 문자열을 사용해서 DataWindow객체를 변경한다.

◆ 적 용
DataWindow control 과 child DataWindows

◆ 문 법
datawindowname.Modify ( modstring )

datawindowname에는 변경될 데이터 윈도우 혹은 차일드 윈도우의 이름을 기입한다. modstring
는 변경을 하기 위해 특별한 값을 할당한다.

Modstring
CREATE object(settings)
텍스트, 계산된 필드, 비트맵 등의 오브젝트를 생성한다.
DESTORY [column] object
데이터 오브젝트를 삭제한다.
objectname.attribute=value

위치, 색깔, 크기, 폰트 등의 속성값을 지정된 값으로 변경한다. 이 때 속성값은 상수, 인용된
상수, 그리고 유효한 값들의 지속적인 표현이어야 한다.

◆ 반환값
리턴값은 string형이다. 성공시 empty string(" ")을 반환하며, 실패시 에러 메시지를 반환한다.

◆ 사용법
변경에 사용되는 대표적인 용도
- 객체의 색, 텍스트 그리고 기타 다른 외형을 변경.
- DataWindow에서 다른 테이블들의 갱신된 상태를 변경.
- DataWindow의 SQL SELECT문에서 WHERE절을 변경.
- 질의식 모드를 변경하여 사용자는 그들이 원하는 데이터를 지정할 수 있다.
- 검색상태(Status of Retrieve)를 요구에의해 변경.
- 프린트 미리보기를 제어한다.
- 객체를 추가하거나 삭제한다. 예를들어, DataWindow객체에서 라인이나 비트맵 등.

DataWindow 오프젝트를 변경하기위해 Modstring에서 아래 3가지 유형의 구문을 사용한다.

==오브젝트 명==
데이터윈도우 페인터는 자동적으로 칼럼명과 칼럼라벨을 제공한다.

==변경하기위한 표현식==
defaultvalue~tDataWindowpainterexpression

Defaultvalue는 속성들을 가지는 적절한 데이터타입으로 변경할수 있는 값이다. 탭(~t)으로 연결된
다. DataWindowpainterexpression은 DataWindow painter함수를 사용할 수 있다. 사용자가 칼럼의
속성을 지정할 때 표현식은 데이터에 기초하여 디스플레이를 변경하도록 DataWindow에있는 각
row를 지정한다. IF함수를 사용한 표현식은 아래와 같다.

'16777215 ~t If(emp_status=~~'A~~',255,16777215)'

modstring에서 표현식을 사용하기위해 아래와같이 지정한다.

modstring = "emp_id.Color='16777215 ~tIf(emp_status=~~'A~~',255,16777215)'"

== 인용구와 틸드(Quotes and tildes) ==
Modify의 인자가 스트링이기 때문에 다른 스트링을 포함할수 있는데 이때 인용구표식을 지정하기
위해 틸드(~)구문을 사용한다. 틸드(~)를 포함한 인용구를 우선해서 실행한다.

modstring = "emp_id.Color=~"16777215 ~tIf(emp_status=~~~"A~~~",255,16777215)~""


== WHERE 절을 변경하기(Modifying a WHERE clause) ==

WHERE절을 변경하기위해 SetSQLSelect대신에 Modify를 사용한다.
Modify는 DataWindow object의 속성을 변경하기위한 것이다. 사용자는 표준 도트(.)표시를 사용한
오브젝트를 포함하는 데이터윈도우컨트롤의 속성을 지정할 수 있다. 예를들어, 컨트롤에 border를
놓기위해 아래와 같이 지정한다.

dw_1.Border = TRUE

◆ 예 제
== 색변경하기(Changing color) ==

색깔 속성을 지정한 결과는 사용자가 변경한 오브젝트에 의존한다. 전체 DataWindow object의
백그라운드 칼라를 지정하기위해 아래와 같은 구문을 사용한다.

dwcontrolname.Modify("DataWindow.Color='long'")

칼럼의 텍스트 칼라나 텍스트 오브젝트를 지정하기위해선 아래 구문 사용한다.

dwcontrolname.Modify("objectname.Color='long'")

칼럼이나 다른 오브젝트의 백그라운드칼라를 지정하기위해 아래 구문을 사용할 수 있다.
dwcontrolname.Modify( "objectname.Background.Mode='<0 - Opaque, 1 - Transparent>'")
dwcontrolname.Modify("objectname.Background.Color='long'")

다음 예제는 DataWindow 오브젝트의 여러부분에대한 색깔을 설정하기위한 구문이다. 다음 문장
은 DataWindow 인 dw_cust에 백그라운드칼라를 붉은색으로 변경하기위한 구문이다.
dw_cust.Modify("DataWindow.Color = 255")

다음 문장은 DataWindow인 dw_cust에서 봉급이 9000을 초과하면 봉급칼럼의 텍스트를 빨강색
으로 변경하고 90000 미만이면 초록색으로 나타낸다.
dw_cust.Modify( "salary.Color='0~tIf(salary>90000,255,65280)'")

다음 구문은 3가지 이상의 색깔을 제공하기위해 하나의 IF함수를 끼워넣은것이다. DataWindow인
dw_cust에서 id가 200이면 초록으로, id가 100이면 빨강으로 나머지는 검정으로 나타낸다.

dw_cust.Modify("dept_id.Color='0~t " + "If(dept_id=200,65380,If(dept_id=100,0,255))'")

위의 예제는 IF함수를 끼워넣은 복합표현식을 사용한것으로서 이 함수는 봉급값에따라 봉급칼럼
의 백그라운드 칼라를 설정하는데 사용된다.

string mod_string, err

long color1, color2, color3, default_color

err = dw_emp.Modify(
"salary.Background.Mode=0")

IF err <> "" THEN
MessageBox("Status", &
"Change to Background Mode Failed " + err)
RETURN
END IF

/* Pseudocode for mod_string:
봉급이 10000 보다 작으면 백그라운드를 빨강으로 설정한다.
봉급이 10000과 같거나 크면 백그라운드는 파랑으로 설정한다. 만일 20000 보다 크거나 같고
30000보다 작으면 백그라운드는 초록으로 설정한다. 디폴트는 흰색이다. */

color1 = 255 //red
color2 = 16711680 //blue
color3 = 65280 //green
default_color = 16777215 //white
mod_string = &
"salary.Background.Color = '" &
+ String(default_color) &
+ "~tIf(salary < 10000," &
+ String(color1) &
+ ",If(salary < 20000," &
+ String(color2) &
+ ",If(salary < 30000," &
+ String(color3) &
+ "," &
+ String(default_color) &
+ ")))'"

err = dw_emp.Modify(mod_string)

IF err <> "" THEN
MessageBox("Status", "Change to Background Color Failed " + err)
RETURN
END IF

== 텍스트 변경하기 (Changing displayed text) ==

텍스트오브젝트의 텍스트를 설정하기위해 아래 2개의 예제는 이 구문을 사용한다.
dwcontrolname.Modify("textobjectname.Text='string'")
다음 문장은 데이터윈도우 dw_cust의 텍스트오브젝트 Dept_t에있는 텍스트를 Dept로 변경한다.

dw_cust.Modify("Dept_t.Text='Dept'")

dept_id 가 201보다 크면 텍스트를 Marketing로, 그렇지않으면 Finance로 텍스트를 설정한다.

dw_cust.Modify("dept_t.Text='none~t " &
+ "If(dept_id > 201,~'Marketing~',~'Finance~')'")

== where절 추가하기 (Adding a WHERE clause) ==

아래 스크립트는 데이터윈도우 오브젝트에 select 문에서 where 절을 추가하고자 할 때 사용되는
것이다.
아래는 윈도우의 Open이벤트가 원래의 select 문을 original_select에 저장하기위한 스크립트이다.

dw_emp.SetTransObject(SQLCA)
original_select = &
dw_emp.Describe("DataWindow.Table.Select")

string rc, mod_string
mod_string = "DataWindow.Table.Select='" &
+ original_select + where_clause + "'"

rc = dw_emp.Modify(mod_string)

IF rc = "" THEN
dw_emp.Retrieve( )
ELSE
MessageBox("Status", "Modify Failed" + rc)
END IF

Sort data CheckBox의 클릭 이벤트에대한 스크립이다. Modify가 성공했는지 여부를 검사하는 부
분을 코딩하여 첨가한다.
If This.Checked = TRUE THEN
dw_1.Modify("DataWindow.QuerySort= Yes")
Else
dw_1.Modify("DataWindow.QuerySort=No")
End If

== 검색 (Retrieve as needed) ==
필요한 row만 검색하고 나머지는 RetrieveRow 이벤트 스크립트에서 Retrieve.AsNeed 속성을 변
경하는 스크립트이다.

dw_1.Modify("DataWindow.Retrieve.AsNeed=NO")

== 데이터 소스를 변경하기(Changing the data source) ==
DataWindow오브젝트의 데이터소스를 저장된 절차로 변경한다
사용자가 DataWindow 오브젝트를 정의하고자 할때 먼저 DataWindow검색인자를 정의해야한다. 이
예에선 SELECT문에서 3개의 인자(type string, type number, type date) 가 정의되어있는데, 저장된
절차는 모두 2개의 type string 인자를 가지고 있다. 그러므로 사용자는 4개의 데이터윈도우 인자(2
개의 string type, type number, type date)를 정의할 필요가있다.

string rc, mod_string, name_str = "Watson"
integer dept_num = 100
Dw_1.Modify("DataWindow.Table.Select = ''")
mod_string = "DataWindow.Table.Procedure = &
'1 execute dbo.emp_arg2;1 @dept_id_arg &
= :num_arg1, @lname_arg = :str_arg1'"
rc = dw_1.Modify(mod_string)

IF rc = "" THEN
dw_1.Retrieve(dept_num, name_str)
ELSE
MessageBox("Status", &
"Change to DW Source Failed " + rc)
END IF

== 데이터윈도우 오브젝트에서 오브젝트를 추가하고 삭제하기 ==

DataWindow의 dw_cust에서 logo라고 불리는 비트맵 오브젝트를 삭제하는 문장 :
dw_cust.Modify("destroy logo")

DataWindow의 dw_cust에서 salary 칼럼 을 제거하는 문장:
dw_cust.Modify("destroy column salary")

rect1이라는 사각형을 데이터윈도우 dw_dust의 헤더에 추가하는 문장:
string modstring
modstring = 'create rectangle(Band=background X="206" Y="6" height="69" width="1363" brush.hatch="6" brush.color="12632256"
pen.style="0" pen.width="14" pen.color="268435584" background.mode="2" background.color="-1879048064" ame=rect1 )'
dw_cust.Modify(modstring)

데이터윈도우k dw_cust 에서 logo라는 비트맵을 level 1을 그룹핑하기위한 헤더영역에 추가하는
문장 (modstring 값을 입력한다.)

string modstring
modstring = 'create bitmap(band=footer x="37" y="12" height="101" width="1509" filename="C:PB3BEACH.BMP" border="0"
name=bmp1 )'
dw_cust.Modify(modstring)

반응형

'프로그래머의 길 > Power Builder' 카테고리의 다른 글

Power Builder Function (6)  (0) 2008.01.03
Power Builder Function (5)  (0) 2008.01.03
Power Builder Function (3)  (0) 2008.01.03
Power Builder Function (2)  (0) 2008.01.03
Power Builder Function (1)  (0) 2008.01.03