Powerbuilder2009. 12. 23. 17:36

Modify Datawindow - 컬럼선택 - Font 및Backcolor선택 

If(act_gu = 'Y', rgb(255,255,255) ,rgb(0,0,0))


Posted by Julyus
2009. 10. 30. 18:27

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Powerbuilder2009. 10. 20. 16:45

http://cafe.naver.com/pentaeduclub/7013



소스 살표보신면 원하는 자료가 있을것입니다.

 

1. 작업관리자 리스트
   프로세스 찾기, 프로세스 끝내기
2. 글꼴(선택)
3. 데이이타 윈도 해더 TEXT클릭하면 정렬되게(:컬럼명_t)
   컬럼명_t->하지 안고 마우스 위치로 정렬되도록
4. 메시지박스
5. parentwindow 찾기
6. mdiwindow찾기
7. 윈도 Sleep (1/1000 초단위)
8. 윈도 상태바 보이기/숨기기
9. 윈도에서 바로가기 아이콘 만들기 함수
10.도스명령이나 다른(EXE)프로그램을 실행시키고 끝날때 까지 기다리는 함수
11.윈도에 설치된 프린터의 리스트와 기본프린터를 가져오기
12.주어진 MDI에서 열려있는 Sheet Window List
13.주어진 MDI에 열려있는 Sheet Window 중 원하는 윈도 찾기
14.Timer만들기(Parent Event 주기적인 반복)
15.dddw에 디스플레이 된값을 가져오는 함수이다.
16.문자열에서 특정한 문자만 카운트한다.
17.문자들 중에서 일정한 문자만을 변경하여 반환한다. 
    변경될 문자가 ''이면 특정한 문자만 지우기가 된다.
18.DW에 컬럼이 있는지 검사한다.
19.그리드로 되어 있는 DW Width 값 저장하고 불러오기
20.DW컬럼들을 점검하여 null값을 초기화 한다.
21.DW와 DB연결 함수
22.파일 읽기
23.파일 쓰기
24.PowerObject 글꼴 적용
25.Object BackColor 변경
26.DB Error Message 보여주기
27.rowscopy 확장


등 의 기능이 들어있습니다.
 

윈도에 에 user object올려놓고 사용하시면 됩니다.
 

다른방법 nonvisualobject 로 사용하기..

nvo_object  lu_obj
lu_obj = create nvo_object

 ...

DESTROY lu_obj

Posted by Julyus
2009. 10. 9. 18:05

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2009. 9. 28. 11:12

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Powerbuilder/TNCTech2009. 9. 23. 17:24
Trac 설치하기 Subversion 

2009/08/13 13:54

복사http://blog.naver.com/nabiro/130067073862

 

*** 검색어: nabiro, Trac, install, 설치하기

 

아래의 글에도 설명되어 있지만 Trac, Subversion 관련하여 참조한 서적을 소개드립니다.

제가 적은 글의 거의 70% 이상이 이 책의 내용을 보며 학습해서 나온 내용들입니다.

 

이재홍 님의 "윈도우 프로젝트 필수 유틸리티" (한빛미디어)

 

Subversion, Trac, CruiseControl.Net에 관심 있으신분은 꼭 한번 보시기 바랍니다.

여기 저기 흩어져있는 글들을 검색해서 내것으로 만드는 시간보다 이 책을 한번 읽어보시는 편이

훨씬 시간을 절약할 수 있다고 생각되어 글을 남깁니다.

 

 

간략히 정리하자면 아래와 같습니다.

 

1. Python 2.5.4 설치

2. Mod_Python 설치
   httpd.conf 수정

3. svn-python-1.6.3.win32-py2.5.exe 설치

4. setuptools 설치

5. Genshi Ver 0.5.1 설치

6. pysqlite-2.4.1 설치

7. enscript 1.6.3 설치

8. trac-0.11.5 설치

 

어휴 많군요 많아. 
이외에도 플러그인까지 다운로드 받아 설치하려면 매우 피곤하네요.
각각의 프로그램에 대한 내용은 위에 소개한 서적을 참조하시면 될 것 같습니다.

 

이 복잡함을 싫어하시는 분들은 위해 TOW 라는 솔루션도 있습니다.
물론 무료로 알고 있구요. 

관심있으신 분들은 "trac tow" 로 검색 한번 해보세요

 

이곳에 씌여진 글에 사용된 프로그램은 아래의 url에서 다운로드 받으실 수 있습니다.

하지만, 출처로 되어있는 다운로드 사이트에서 최신의 버전을 다운받으시길 권장해드립니다.

혹시나 모를 바이러스 유포가 두렵습니다.

 

http://www.softcm.co.kr/download/Trac-Tools.zip

 

 

 

Trac 설치하기

 

Apache  Subversion이 이미 설치되어 있다는 가정하에 설명을 드립니다.

 

Python 2.5.4 설치

 

1.        Python 2.5.4 download
현재 (2009.08.12) mod_python 이 지원하는 Apache Python의 버전이 Apache 2.2, Python 2.5 여서 Python 2.5.4 버전으로 다운로드 받는다


download: http://python.org/download

2.        python-2.5.4.msi 실행
Install for all user 
선택 후 Next 버튼 클릭


       

 

3.        설치 경로 C:\Python25\ 확인  Next 버튼 클릭

       
       

 

4.        Next 버튼 클릭


             


 

5.        Finish 버튼 클릭






 

Mod_Python 설치

 

1.        mod_python-3.3.1.win32-py2.5-Apache2.2.exe 다운로드

http://www.modpython.org/ url
 download 에서 다운로드


2.        mod_python-3.3.1.win32-py2.5-Apache2.2.exe 실행
다음 버튼 클릭

 

      

 

 

 

3.        다음 버튼 클릭

 

       

 

 

4.        다음 버튼 클릭

 

       

 

 

5.        Apache 설치된 경로 (C:\Apache2.2) 선택  마침 버튼 클릭
(Apache 
설치된 경로를 선택하는 화면은 생략함)

 

       

 

 

6.        c:\Apache2.2\conf\httpd.conf 파일을 텍스트 편집기로 열어 아래의 라인을 추가한다.

 

#LoadModule usertrack_module modules/mod_usertrack.so

#LoadModule version_module modules/mod_version.so

#LoadModule vhost_alias_module modules/mod_vhost_alias.so

#이 윗부분은 원래 있던 부분

이 아래 라인이 새로 추가되는 라인

LoadModule python_module modules/mod_python.so

 

7.        http://www.modpython.org/live/current/doc-html/inst-testing.html 페이지를 IE로 열어 테스트

 

Python version mismatch, expected '2.5', found '2.5.4'.

 

Apache 로그에 (C:\Apache2.2\log\error.log) 위와 같은 오류가 있다.

해결 방법이 뭘까?

 

>> 상관없는 오류인 듯 하다.

테스트 하니 잘 된다.

 

c:\apache2.2\htdocs\modTest\mptest.py 파일을 아래의 내용으로 생성

from mod_python import apache

 

def handler(req):

             req.content_type = 'text/plain'

             req.write("Hello World!")

             return apache.OK

 

그리고 아래와 같이 httpd.conf 수정

 

 

위의 그림에서

 

<Directory "C:/Apache2.2/htdocs/modTest">

    AddHandler mod_python .py

    PythonHandler mptest

    PythonDebug On

</Directory>

 

부분이 추가된 부분입니다.

 

이후 http://localhost/modTest/mptest.py실행하면 
Hello World 
라고 잘 표시됩니다.

 

 

svn-python-1.6.3.win32-py2.5.exe 설치

 

1.         http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&expandFolder=8100&folderID=0 사이트에서 svn-python-1.6.3.win32-py2.5.exe 다운로드 

2.         svn-python-1.6.3.win32-py2.5.exe 실행
다음 버튼 클릭

 

       

 

 

3.         Python이 설치된 디렉터리 확인 후 다음” 버튼 클릭

 

      

 

 

4.         다음 버튼 클릭

 

      

 

 

5.         마침 버튼 클릭

 

     

 

 

 

 

Setuptools 설치

 

1.        http://pypi.python.org/pypi/setuptools#downloads 에서 setuptools-0.6c9.win32-py2.5.exe 다운로드

2.        setuptools-0.6c9.win32-py2.5.exe 실행
다음 버튼 클릭

 

      

 

 

3.        Python 설치 디렉터리 확인 후 다음 버튼 클릭

 

      

 

 

4.        다음 버튼 클릭

 

      

 

 

5.        마침 버튼 클릭

 

     

 

 

 

 

Genshi Ver 0.5.1 설치

 

1.        http://genshi.edgewall.org/wiki/Download 사이트에서 Genshi-0.5.1.win32-py2.5.exe 파일 다운로드 하여 설치 
또는 setuptools가 설치된 경우 command line에서 아래와 같이 실행

 


위 그림에서와 같이 C:\Python25\Scripts 디렉터리 아래에서 easy_install.exe Genshi 명령어를 실행하면 자동으로 다운로드하여 설치됨 

아래의 경우는 홈페이지에서 직접 다운로드 하여 설치한 경우에 대한 설명입니다

2.        Genshi-0.5.1.win32-py2.5.exe 실행
다음 버튼 클릭

 

      

 

 

3.        Python 설치된 경로 확인 후 다음 버튼 클릭

 

      

 

 

4.        다음 버튼 클릭

 

       

 

 

5.        마침 버튼 클릭

 

     

 

 

 

 

pysqlite-2.4.1 설치

 

1.        http://oss.itsystementwicklung.de/trac/pysqlite/wiki/pysqlite 사이트에서 
pysqlite-2.4.1.win32-py2.5.exe 
파일을 다운로드 받는다
 

2.        pysqlite-2.4.1..win32-py2.5.exe 실행
다음 버튼 클릭

 

      

 

 

3.        Python 설치된 디렉터리 확인 후 다음 버튼 클릭

 

      

 

 

4.        다음 버튼 클릭

 

     

 

 

5.        마침 버튼 클릭

 

     

 

 

 

 

enscript 1.6.3 설치

 

1.         http://sourceforge.net/projects/gnuwin32/files/enscript/ enscript-1.6.3-9-bin.exe 파일을 다운로드 받는다

2.         설치는 특별한 것이 없이 그냥 Next 또는 동의를 묻는 창에서 동의 한다는 버튼 클릭이 전부입니다. (사실 캡쳐 받아 저장하고 붙이기가 너무 힘들어요 ㅠ.)

 

 

Trac-0.11.5 설치

 

1.        http://trac.edgewall.org/wiki/TracDownload  사이트에서 Trac-0.11.5.win32.exe 파일 다운로드 

2.        Trac-0.11.5..win32.exe 실행
다음 버튼 클릭

 

     

 

 

3.        Python 설치 디렉터리 확인 후 다음 버튼 클릭

 

     

 

 

4.        다음 버튼 클릭

 

     

 

 

5.        마침 버튼 클릭

 

     

 

 

설치는 모두 완료되었습니다.

Posted by Julyus
Powerbuilder2009. 9. 18. 12:10
DBMS = "O84 ORACLE 8.0.4"
//DBMS = "O90 Oracle9i (9.0.1)"
//DBMS = "O10 Oracle10g (10.1.0)"
Posted by Julyus
Powerbuilder2009. 9. 15. 16:09

파워빌더 Datawindow 부분처리

Retrieve-as-Needed DataWindow Option

What is it? 
Retrieve As Needed is an option available in PowerBuilder that, when properly used, can reduce network traffic and speed up response times. Instead of bringing back all the rows for the datawindow on the retrieve, only as many rows as are needed to show in the datawindow at a time are retrieved. Then, if you page down through the datawindow, it will bring back the rows as needed from the server to display in the datawindow.

How does it work? 
The datawindow retains an open cursor while it is retrieving the rows. This might impact server performance. You can issue a dbcancel( ) function to end the retrieval (and thereby close the cursor), and should issue this function before closing the window. Keep in mind that some databases will not allow updates against the retrieved rows while the cursor is open.

What can override the retrieve as needed option? 
The option is overridden if you have sorting, filtering, or aggregation (such as sum or average) in the datawindow, since it will need to bring back all the rows to perform these functions. You can get around this if you have an order by clause in your select to do your sorting, specify a where clause instead of using a filter, and put the computed columns in the select statement rather than as computed fields with aggregate functions in the datawindow, form or report.

What happens if I print the datawindow? 
The print will only print as many rows as have been brought back from the server. So if you want to print a datawindow that has retrieve as needed specified, and you want all the rows to print, you can modify the datawindow retrieve.asneeded attribute to force the remaining rows to be retrieved, so that the print will print all the rows. To force any rows to be retrieved and reset the as needed flag back, code the following:

dw_1.object.datawindow.retrieve.asneeded = 'no' 
dw_1.object.datawindow.retrieve.asneeded = 'yes' 
 

What will the retrieve and rowcount functions return? 
The retrieve will tell you how many rows were initially brought back from the server. The rowcount will tell you the current number of rows that have been brought back. So if you do a retrieve, and then page down some, the rowcount should be higher than the return code from the retrieve. If you want to know how many rows COULD be retrieved if you retrieved them all, you can write an embedded sql select to do a count on the rows.

When will the retrievestart, retrieverow, and retrieveend events fire? 
The retrievestart will fire when the retrieval begins. The retrieverow event will fire whenever a row is retrieved, whether initially, or as a result of scrolling down. The retrieveend will fire when the retrieval is finished, either by retrieving all the rows, or by issuing the dbcancel function.

 

출처 - http://www.sybase.com/detail?id=42303

 

파워빌더 datawindw 기능중 하나인 Retrieve-as-Needed DataWindow Option

 

Retrieve가 Back에서 실행되고 그와중에 화면에 보여진다..

 

Event retrieverow에서

DW_NAME.object.datawindow.retrieve.asneeded = 'yes'

 

로 설정해주니 잘된당;;


Posted by Julyus
Powerbuilder2009. 9. 15. 15:42

♠ 파워빌더 성능관리

 

 

 1장. 개요

 

 

사용자와 개발자의 성능관점 차이

 

  사용자:

       성능이라는 것은 실행 시 시스템이 실행명령에 얼마나 빨리 응답하느냐는 것이다.

   개발자:

       성능은 다음과 같은 사항을 고려

            ▶ 서버의 부하

            ▶ 네트웍의 거리

            ▶ 사용자 수

            ▶ 클라이언트와 서버의 구성

            ▶ 데이타베이스 설계와 정규화

            ▶ 어플리케이션의 설계와 작성

            ▶ 사용자의 인지도

 

일반적인 성능 불만 사항

 

            ▶ 원도우를 열때

            ▶ 데이터 조회시

            ▶ 어플리케이션 실행시

            ▶ 필드간 이동시

            ▶ 윈도우 간 이동시

            ▶ 계속하여 실행시

* WIN98에서는 OS자체 버그로 에러발생 가능(펜타에서 ...)

 

어플리케이션 환경점검

 

   어플리케이션 문제인지 구성 문제인지?

   보다 더 성능이 뛰어난 기계에서 실행

   관련모듈을 클라이언트에 설치

 

설계 재점검

 

 

   잘못된 설계는 성능에 영향을 미치므로 기존 프로그램보다는 설계 변경이 효과적일 수도 있다.

 

시간측정

 

 long ll_start, ll_elapsed

  //시작 시간 지정

  ll_start = CPU()

  //측정할 과정 기술

  ...

  //경과 시간 계산

  ll_elapsed = CPU() - ll_start

 

부하를 이동하거나 분산

 

   긴 작업을 작은 단위로 나누면 동일하게 시간이 걸려도 사용자는 덜 지루함.

   모든 데이터를 조회 후 윈도우를 보여주는 것 보다는 윈도우를 먼저 보여주고 데이터를 가져와서 보여 주는 게 효과적.

   Open시 retrieve시키지 않는다.

   dw control의 contructor event에 스크립트를 넣지 않는다.

 

사용자에게 볼 것을 제공

 

   마우스 포인터의 모양 변경

   도움말(MicroHelp) 제공

   진행과정을 측정기로 보여줌

   취소할 수 있게

 

 

 

2장. 해당 실행 모듈 호출

 

 

윈도우가 나타나는 과정

 

   ▶ 클래스 풀에서 해당 모듈을 찾는다.

   ▶ 클래스가 풀에 없으면 라이브러리에서 찾는다.(지정한 순서대로)

   ▶ 윈도우를 생성

   ▶ 각종 컨트롤을 생성

   ▶ 관련된 메뉴를 만든다.

   ▶ 각 컨트롤의 constructor 이벤트

   ▶ 윈도우 open,activate,resize 이벤트

   ▶ 스크립에 있는 데이터 조회 수행

   ▶ 데이터윈도우에 지정된 기능 수행(sort,filter...)

 

탭 컨트롤

 

   CreateOnDemand 기능 사용(tabpage별 선택시 컨트롤을 만듦)

 

상속

 

   다단계 상속은 문제가 되지 않음(메뉴제외).

   상속은 관리나 실행시 이득.

 

클래스 풀(파워빌더에서 사용하는 메모리)

 

   클래스 정의는 클래스 풀에 저장.

   마지막 인스턴스가 종료되면 지워짐.

 

메뉴

 

   메뉴상속은 성능에 악영향(2~3단계)

   ChangeMenu() 사용금지

 

데이터 조회

 

   조건상 반드시 윈도우와 데이터를 동시에 보여 줄 경우에는 Retrieve As Needed 속성을 지정하고 Open 이벤트에서 Post된 이벤트에 다음과 같은 스크립틀 지정:

           dw_1.MODIFY('DataWindow.Retrieve.asneeded=no')

   한 화면의 데이터만 필요하다면 Retrieve As Needed 속성을 지정하고 Open 이벤트에서 Post된 이벤트에 다음과 같은 스크립트을 지정하고 그 후에 적당하게 Retrieve()함수를 수행

           dw_1.DBCancel()

   Open 이벤트는 데이터 조회 삼가.

   일반적으로 많이 사용되어지는 DDDW는 미리 조회하여 ShareData()함수를 사용하여 공유.

   사용자가 요청시에만 데이터 조회를 수행하는 것도 고려.

 

 

3장. 스크립 수행

 

 

스크립 수행

 

   문제점을 분리하기 위해 스크립을 코멘트화.

   긴 시간 수행 스크립은 POST.

   오브젝트 생성시 영향을 주는 이벤트.

       ▶ Open 이벤트

       ▶ Activate 이벤트

       ▶ 각 컨트롤의 Consructor 이벤트

       ▶ GetFocus 이벤트

       ▶ Show와 Resize 이벤트

   OpenWithParm()이나 OpenSheetWithParm()으로 윈도우 간에 데이터 교환시 스트럭춰를 사용하기 보다는 유저오브젝트를 사용.

 

머신코드로 컴파일

 

   장점:

         -.변수참조.

         -.수학적 계산이나 할당.

         -.로직을 전개하기 위한 IF, CHOOSE, FOR, DO 등의 문장

         -.함수 호출

         -.스크립에 관련된 사항만 향상

   제한 사항:

         -.해당모듈 호출

         -.데이터 윈도우 성능

         -.데이터 조회

            예:Retrieve() -  함수는 빠르게 호출되나 서버나 네트웍에는 영향을 미치지 못함

 

화면 재생성

 

   어떤 처리(조회,,,)시 SetRedraw()사용

 

속성지정

 

   컬럼 참조시 Dot Notation(.)을 가급적 자제한다.

   SetItem,GetItem()사용한다.(예:ll_id=dw_1.GetItemNumber(1,"emp_id")

 

데이터윈도우간 데이터 이동시 속도가 빠른 순서

 

   1.ShareData()

   2.RowsCopy(), RowsMove()

   3.직접지정:dw_1.object.date = dw_2.object.data

   4.GetItem()/SetItem() LOOP

 

루프

 

   이 방식보다는

        FOR li_index = 1  TO UpperBound(li_array)  //매번 UpperBound()를 수행한다

   이 방식이 유리

        int li_array_len

        li_array_len = UpperBound(li_array)

        FOR li_index = 1  TO li_array_len

 

동적배열

 

   1.정적배열이 유리하나 동적배열 사용시는 반대로 카운트한다.

      FOR li_index = 1  TO li_max

                  :

      NEXT

      보다는

      FOR li_index = li_max  TO  1  STEP -1

                  :      

      NEXT

      이 유리하다.(약20%향상)

   2.배열초기화

      int originarray[]

      int dummyarray[]

      originarray = dummyarray

   3.함수에서 배열을 교한 할 경우에는 Pass by reference나 Read Only사용

 

변수

 

   동일이벤트나 함수 내에서 변수 선언 장소는  문제되지 않음.

   Any 데이터 타입은 사용자제

 

함수

 

   해당 오브젝트에 포함하는 함수가 광역 함수보다 유리.

   지정과 미지정은 동일.

         wf_save()

         Parent.wf_save()

   성능비교(속도가 빠른 순위)

         -.정적이벤트와 정적함수

         -.TriggerEvent()함수

         -.동적함수

         -.동적 이벤트

 

고려할 그 외 사항

 

   단축 지정 문장이 유리.

   코멘트 삭제 - RetrieveRow,SystemError 이벤트에는 되도록 삭제.

   자주 발생하는 이벤트에는 되도록 짧게 작성(MouseMove,Other...).

   CHOOSE CASE와 IF / ELSEIF의 속도는 같다.

   오브젝트 참조시 ParentWindow()함수를 계속 사용하기 보다는 변수선언이 유리

 

 

4장. 데이터 조회

 

 

키와 인덱스

 

   자주사용하는 키는 인덱스를 지정 매월 자주 사용되는 킷값으로 데이터 정리

 

데이터베이스 연결 최소화

 

   Connect와 DisConnect를 적절히.

   SetTrans()보다는 SetTransObject()사용.

 

역정규화

 

   조인을 줄이기 위하여 역정규화.

   요약 정보 테이블 생성이 필요.

 

트랙잭션 관리

 

   COMMIT과 ROLLBACK을 적절히 사용하여 서버에서 잡고 있는 자원을 풀어 줌.

   Retrieve()만 한 경우도 서버의 자원을 잡고 있을 수 있음.

 

SQL문장은 단순하게

 

   WHERE 절의 LIKE와 Subquery 사용 절제.

   복잡한 질의를 단순하게 분리.

   복잡한 조인은 되도록 삼가.

   스크립트 내에 SQL을 삽입하기 보다는 데이터윈도우나 데이터스토어를 사용.

   RPC나 스토어프로시저를 사용.

 

조인 대신에 DDDW 사용

 

   DDDW를 과다하게 사용하면 성능 저하.

   항상 DDDW가 조인보다 빠른 것이 아님.

 

결과치

 

   보고서가 아닌 온라인 조회일 경우 100건 이상은 현실성 부족.

 

하드디스크에 데이터 저장

 

   Rows → Retrieve → Rows to Disk

 

디스플레이에 영향을 주는 것

 

   슬라이드 컬럼.

   AutoHeight 컬럼.

   bmp 참조시 EXE에 포함시키거나 폰트를 활용(Wingding...)

   그래프로 데이터표현 시 레이블을 회전시키지는 말 것.

 

조회 전 데이터윈도우와 테이블 비교

 

   파워빌더는 조회전 데이터윈도우에 정의된 정보와 테이블의 내용이 일치하는지 미리 조사한 후 조회

   ▷ DBParm 속성지정:

       결과치 비교 조사 취소:staticbind=1

 

 

5장. 그 외 사항

 

 

어플리케이션 성능 저하

 

   열었으면 닫아야 함

   생성했으면 제거도 하여야 함

   OpenUserObject()을 사용하였으면 CloseUserObject()도 기술

   OpenTab()을 사용하였으면 CloseTab()도 기술

   연결하였으면 연결 종료도 하여야 함.

   지역 참조 변수와 오브젝트를 사용 시 참조 불가 발생 금지

   자동 인스턴스화 된 오브젝트 제거

 

변수 선언 없이 생성

 

   변수 선언없이 유저오브젝트를 생성하지 말 것

              n_trans = CREATE n_trans

   문장 상으로 문제는 없으나 계속적으로 필요 없는 것이 생성됨.

 

어플리케이션 열기

 

   어플리케이션 시작 시에 다음에 필요한 작업을 하는 것도 고려 해볼만 함

         -.데이터베이스 연결 및 초기화

         -.코드 테이블 조회

         -.보안

   만약에 어프리케이션 여는 시간이 문제라면 메인윈도우에서 처리

 

데이타윈도우 컬럼 간 이동시 아래 사항 고려

 

   ItemChanged 이벤트

   ItemFocusChanged 이벤트

   RowFocusChanged 이벤트

   데이터 검증 룰

   계산 필드

   조건부 수행

 

DDDW가 늦게 열림

 

   각 DDDW가 각각 조회하는 것보다는 공유.

   pbm_dwndropdown 이벤트 점검.

 

윈도우 활성

 

   윈도우 활성이 늦으면 Activate,DeActivate 이벤트를 점검

          -.시간이 걸리는 데이터조회는 POST

          -.Active 이벤트에 메뉴 관련 로직은 삼가

 

라이브러리 관리

 

   대규모 어플리케이션인 경우 SetLibraryList()함수를 이용하여 라이브러리 찾는 순서를 변경하는 것도 고려.

   사용자에 따라 사용하는 부분이 다를 경우...

 

라이브러리 최적화

 

   한 라이브러리 오브젝트 개수는 50~60개.

   한 라이브러리의 크기는 800K.

   PBL의 조각난 부분을 최적화 하면 개발시 실행이 빠르고 하드디스크 공간을 작게 사용.

   재성성 후 최적화.

 

시스템 구성

 

   연장 메모리 사용.

   메모리 추가.

   디스크 케싱 사용.

   해상도가 높은 그림 사용시 속도 느림.

   낮은 해상도 사용.

   DOS환경파일 숙지(공백라인도 영향을 줌,autoexec.bat,config.sys).

   Windows환경 파일 숙지(공백라인도 영향을 줌,win.ini,system.ini).

   하드디스크 조각 모음을 정기적으로.

   하드드라이브의 속도와 디스크 분할 확인.

   파워빌더 실행모듈이 있는 디렉토리는 Path제일 처음 위치로.


Posted by Julyus
Powerbuilder2009. 9. 8. 10:16
/*****************************************************************************************************************/
ls_load = '<Processing result>' + '~n'
                           ls_load += 'Start Time:' + string( ldt_1 , 'hh:mm:ss' ) + '~n'
                           ls_load += 'End Time:' + string( ldt_2 , 'hh:mm:ss' ) + '~n'
                           ls_load += 'Job Time:' + string( int( secondsafter( ldt_1, ldt_2 ) / 60 ) ) + 'Min' + &
                               string( mod( secondsafter( ldt_1, ldt_2 ) , 60  ) ) + 'Sec' + '~n'

/*****************************************************************************************************************/
DateTime ldt_start_time, ldt_end_time
dw_msg_time.Object.end_time[1] = fdt_get_dbserver_now()
ldt_start_time = dw_msg_time.Object.start_time[1]
ldt_end_time = dw_msg_time.Object.end_time[1]

dw_msg_time.Object.eclipsed_time[1] = &
 RelativeTime(Time("00:00:00"), SecondsAfter(Time(ldt_start_time), Time(ldt_end_time)) + &
  DaysAfter(Date(ldt_start_time), Date(ldt_end_time)) * 24 * 3600  )

dw_msg_processing.Object.prg_msg[1] = is_msg_process
Return 0
/*****************************************************************************************************************/
/*****************************************************************************************************************/
Posted by Julyus