[ 파워빌더.기타 - pb와 jsp연동하기 ]

 

 

 

제가 몇년 전에 꽁수라면 꽁수로 개발한 내용이라 참고만 하세요 ㅎㅎㅎ

 

먼저 환경을 말씀드리면 파워빌더 10.5 버젼으로 jsp 웹서버쪽과 연동하면서 개발을 진행해야 했었습니다.

 

또한, 웹서버의 보안을 위하여 모든 통신은 post 방식을 반드시 이용해야 하는 환경이었구요...

 

당시 PostURL, GetURL 등 여러 테스트를 거쳐 봤지만 통신시에 post 방식이 아닌 get방식으로 웹서버가

 

인식해서 많이 고민했던거 같아여...

 

나중엔 과감히 html 에 파라미터 부분을 파워빌더의 파일처리로 작성하고 결과를 받아오는 방식으로 해결했습니다.

 

소스를 보시죠...

 

OLEObject IE         // 웹서버와 통신할 ole 입니다.
integer li_filenum    // 구성할 파일 id가 되겠죠
string  ls_posthtml  // html 자체가 들어있는 변수입니다.

string  body           // body 부분의 결과 값을 가져오는 변수입니다.

// 참고

// arg_data1 는 해당 url 과 submit_id= 부분입니다.

// ex> http://123123.kr/123/.123?submit_id=123123&business_id=pam

// arg_data2 는 넘겨야 하는 파라미터 부분입니다.

// ex> '<input type="hidden" name="a" value = "' + ls_userid + '">  ~r~n' + & .......

 

li_filenum   = FileOpen("c:\post.html",LineMode!, Write!, LockWrite!,  Replace! )

 

// html 문을 구성합니다.

ls_posthtml  = "<html>    ~r~n"                                                     + &
                    "<head>   ~r~n"                                                     + &
                    '<meta http-equiv="Content-Type: application/x-www-form-urlencoded" content="text/html; charset=utf-8" />  ~r~n' + &
                    "</head>  ~r~n"                                                     + &
                    "<body>    ~r~n"                                                     + &
                    "<form method=post id='post_data' action= '"+arg_data1+"'> ~r~n"     + &
                    arg_data2                                                                + &
                    "</form>   ~r~n"                                                     + &
                    "</body>   ~r~n"                                                    + &
                    '<script type="text/javascript"> ~r~n'                         + &
                    'post_data.submit(); ~r~n'                                        + &
                    '</script> ~r~n'                                                      + &
                    '</html> ~r~n'  

 

FileWrite(li_filenum, ls_posthtml)

FileClose(li_filenum)

 

IE = CREATE OLEObject
IE.ConnectToNewObject("InternetExplorer.Application")
IE.navigate("C:\post.html")

 

// 응답시까지 대기 합니다. (읍답이 없을경우 한계시간 처리 내용을 추가해주세요 ㅋㅋㅋ)

DO WHILE IE.busy
 setpointer(hourglass!)
 yield()
LOOP 
  
body   = IE.Document.Body.InnerTEXT
IE.quit()
destroy IE

 

자 이렇게 하면 body 에 해당 인터페이스에서 주는 내용을 받을수가 있었습니다.

 

허접해서... ㅋㅋ 참고만 하시기를...

☞  

 

This example calls the PostURL function using server port 8080. Iinet is an instance variable of type inet:

Blob lblb_args
String ls_headers
String ls_url
Long ll_length

iir_msgbox = CREATE n_ir_msgbox
ls_url = "http://coltrane.sybase.com/"
ls_url += "cgi-bin/pbcgi60.exe/"
ls_url += "myapp/n_cst_html/f_test?"
lblb_args = blob("")
ll_length = Len(lblb_args)
ls_headers = "Content-Length: " + String(ll_length) + "~n~n"
iinet.PostURL(ls_url, lblb_args, ls_headers, 8080, iir_msgbox)


inet posturl를 참조 하세요.help에 있는 내용 입니다.

 

☞  제가 써 봤는데...
결론만 말씀드리면... 서버 셋팅에 따라서 파워빌더의 PostURL 에 get 방식으로 인식되어
질수 있다는거 여여..
우리가 일반적으로 get 방식과 post 방식으로 나누어 사용하는데
파워빌더에서 이용하는 PostURL 함수는 jsp 서버에서 인식할때 get으로 인식하더라구여
실제로 서버쪽 접근 로그까지 확인해 봤었습니다.

ex> PostURL 함수의 결과 스크립 -> http://url/bbslist.html?id=5&pagenum=2&방식=Post

위에 아주 쉬운 예제지만 form method 의 Post가 핵심으로 Post 방식으로 통신을
할수 있게 되어 지는 내용입니다.

 

* get 과 post 의 차이점 *
- GET은 주소줄에 값이 ?뒤에 쌍으로 이어붙고 POST는 숨겨져서(body안에) 보내진다.
- GET은 URL에 이어붙기 때문에 길이제한이 있어서 많은양의 데이터는 보내기 어렵고 POST는
많은 양의 보내기에도 적합하다.(역시 용량제한은 있지만)

http://url/bbslist.html?id=5&pagenum=2 같이 하는 것이 GET방식이고 form을 이용해서
submit을 하는 형태가 POST입니다.

 

Posted by 농부지기
,

[ 파워빌더.기타 - 메시지박스의 내용을 클립보드로 복사 ]

 

단축키를 좋아해서 단축키로 저장하려고 어찌하다 보니 알게 되었네요....

다들 알고 계시듯...

Print Screen 키는 화면을 클립보드로 복사하는거죠 (그림캡처)

Alt + Print Screen 은 현재 활성화되어있는 화면을 캡처뜨는 거라는것도 대부분 알고 계실거구요..

 

근데 메시지박스가 떠있는 상태에서 Ctrl + Shift + Insert 키를 동시에 누르면

메시지박스의 내용이 클립보드로(텍스트)로 저장이 되네요?

아래는 메모장에서 미저장상태에서 X 를 눌러 닫으려고 하면 뜨는 메시지박스 창이 뜬 상태에서

Ctrl + Shift + Insert 키를 누른 겁니다.

아래와 같이 클립보드에 저장이 되네요....

---------------------------
메모장
---------------------------
제목 없음 파일의 내용이 변경되었습니다.

변경된 내용을 저장하시겠습니까?
---------------------------
예(Y)   아니오(N)   취소  
---------------------------

저만 몰라서 그런건지도 모르겠지만, 혹 모르시는 분들도 게시리라 생각해서 올려봅니다.

이게 쓸모 있는 팁일까 싶기도 하지만.....

뭐 알아서 나쁠건 없겠죠? ^^

☞  

Posted by 농부지기
,

[ 파워빌더.공통함수 - 문서파일 열기 ]

 

☞   

 

예를 들어 pdf을 지정했지만..원도우의 기본 연결작업으로 연결되어 있는 모든 화일에 대해 별도의 창으로  보여줍니다..

 

function ulong ShellExecuteA(ulong hwnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, long nShowCmd) library "shell32.dll" alias for "ShellExecuteA;Ansi"

 

String ls_Null
String ls_Pdf = 'C:\테스트 페이지.pdf'

SetNull (ls_Null)
ShellExecuteA (Handle (Parent), ls_Null, ls_PDF, ls_Null, ls_Null, 1)

 

☞  

 

이거 굿이 PDF 뿐만 아니라 모든 파일이 다 열립니다.
shellExecuteA(0,"Open",[파일전체경로], "","",1)
윈도의 확장자를 찾아서 열어줍니다.

☞  아크로벳 pdf reader OCX 윈도우에 넣고 열었다가...
이놈의 버젼 바뀔때 마다 힘들어서...
위와같이 하니... 속편하고 좋던데요

 

Shell은 등록되어 있지 않은 확장자는 실행 안되니 참고 하세요..

Posted by 농부지기
,