PowerBuilder
vnsoft
從2001年開始PB Oracle程式開發,
在公司主要負責PB技術研發以及程式開發框架的建立.
后學習Oracle管理,了解有關DBA作業內容.
喜歡IT新技術,對腳本語言有一定的了解,
目前专职于Odoo项目实施、开发。
展开
-
程式開發質量檢查(四)
<br />某次在檢查開發人員的PB源碼時,發現有如下代碼:<br /> <br /> <!-- @page { margin: 2cm } --><br />CHOOSECASE ls_query_kind <br /> CASE'1' <br /> ls_SqlText= ls_SqlText + "AND M_DISCM.CHK_ID IN (21,26,178)AND M_DISCM.FROM_MK = '0'" <br />原创 2010-08-13 09:23:00 · 602 阅读 · 0 评论 -
通過PB函數取得windows的環境變量
<br />在PB腳本中可能有時候需要取得OS的環境變量,網上也有文章介紹通過winAPI可以達到.但實際上PB有提供自已的函數可以完成,腳本如下:<br />String ls_keyword,ls_values[]<br />Integer li_count, li_return<br />ContextKeyword lcx_key<br />li_return = this.GetContextService("ContextKeyword", lcx_key)<br />ls_keywor原创 2010-09-02 14:49:00 · 1305 阅读 · 0 评论 -
取得easerver屬性問題
在Easerver中,有服務器級別的一些屬性設定,也有元件級別的屬性設定,如何通過pb腳本來取得這些屬性值呢?其實在pb也有提供此類的函數.首先建立一個EAServer元件n_eas_base.在其中定義一個函數of_get(),語法如下:string ls_value[]long ll_rccontextkeyword l_keyll_rc = THIS.getcontextservice('ContextKeyword',l_key)IF ll_rc=1 THEN l_rc =原创 2010-09-02 14:51:00 · 660 阅读 · 0 评论 -
將數組內容排序
<br />PB沒有提供數組的排序功能,實際上我們可以通過利用DataStore來實現.<br />datastore lds_temp<br />string ls_err<br />integer i<br />long ll_array[] = { 2 , 3, 6, 5 }<br />string ls_dsdef = &<br /> 'release 8; datawindow() table(column=(type=long name=a<br />dbname="a"原创 2010-09-03 08:39:00 · 781 阅读 · 0 评论 -
使用PowerScript取得DW的Arguments值
<br />最近在做一個報表時,有使用到一些參數去提取資料,這個參數值只有在 SQL的WHERE部分存在,資料取出來以后,在后續的作業中需要從DW中取得這<br />個參數值是多少?以便進行一些判斷,但因為這個值在DW中沒有欄位顯示,所以也不能用GetItem...()取得,幾經測試,發現這類情況可以使用另<br />外一種方式取得,如:dw_1.Describe("evaluate('參數名稱',0)").原创 2010-09-20 10:45:00 · 701 阅读 · 1 评论 -
读取Internet数据
<br />如果你需要通过PB来从Internet中读取一个数据,可以使用如下方法;<br /> 1.继承自internetresult建一个自定义物件,假设名称为 n_cst_internet,<br /> 2.在此新建的物件中,定义一个实例变量 string is_data,<br /> 3.重载此物件的internetdata函数,在其中使用如下语法:<br /> [integer internetdata(blob data)]<br /> is_data原创 2010-09-20 13:04:00 · 2008 阅读 · 0 评论 -
在PB中如何打开一个非執行文件
<br />大家知道在PB中,有一个RUN()函数,可以运行一个指定的执行文件,如.EXE,.COM,.BAT等.但如果我们想打开一个非执行文件,<br /> 如.TXT,.DOC,.XLS等,就不能用RUN()函数了.如果我们希望打开这类文件时,系统能自动调用对应的应用程序,就可以使用如下方法:<br /> 在应用程序的Global External Functions中定义:<br /> Function long ShellExecuteA (ulong hwnd, strin原创 2010-09-20 13:05:00 · 3531 阅读 · 0 评论 -
PB未公開函數:__get_attribute()
<br />大家知道在DW Control中有一個Event:ItemChanged.平時對於使用者的一些輸入內容判斷,我們都會在此Event中進行檢查.<br /> 但我們平時很少使用Trigger event 的方式來由系統觸發這個事件,因為這個事件的一個參數(DWO)沒有辦法得到.<br /> 后來在網上瞎逛時,發現有人舉報了一個PB未公開的函數__get_attribute,可以取得一個DWO對象.<br /> dwobject ldwo<br /> //"aa" i原创 2010-09-20 13:08:00 · 3223 阅读 · 0 评论 -
在PowerScript中使用WSH
<br />WSH(Windows Scripting Host)作為一種簡單的動態腳本作業方式,為一些簡單的問題處理提供了很好的支持,其能實現的很多功能<br /> 在PB中都沒有,那我們是否可以通過PB來使用這些WSH的腳本呢?經過測試是可行的.<br /> 如下腳本即可使用WSH的網絡功能.<br /> integer li_rc<br /> OleObject ole_wsh<br /> ole_wsh = CREATE OleObject<br />原创 2010-09-20 13:34:00 · 918 阅读 · 0 评论 -
禁止通過Title來移動DW
<br />我們有時候需要將DW的Title顯示出來,但不希望操作人員通過Title來移動DW,這樣在PB中使用就有難度.<br />其實我們就可以在DW中定義一個event,如ue_systemcommand,設定此event的ID為:pbm_syscommand,在此<br />event中定入如下script:if CommandType = 61458 then Return 1,就可以禁止DW的移動.原创 2010-09-02 14:47:00 · 1006 阅读 · 1 评论 -
關於全局自定義函數的重載現象
<br />最近在上網看些實例的時候,發現我們自已自定義的全局函數一個好玩的重載現象.<br />一般我們如果要對函數進行重載,則會定義多個相同名稱的函數,只是參數定義會不一樣,如果是全局函數,因為名稱都相同,而在一個PBL中不允許有同名的<br />對象存在,所以不能定義.而實際上PB提供了另一個未公開的方法可以實現.<br />如先定義一個全局函數,名稱為of_tt,無返回值,腳本為:messagebox('a','ok').<br />存檔后,使用Edit Source功能查看其原碼:原创 2010-09-03 08:52:00 · 621 阅读 · 0 评论 -
取得Easerver中的Connection Cache清單
<br />最近在使用PB+Easerver做些開發,需要程式動態取得所有的Connection Cache,幾經周轉未果,今翻書偶得一代碼,雖不是順手<br />拿來可用,但其中思想正是所求,稍作修改后一試,果不其然......<br />現在此作個記錄,以便日后查詢.<br />//此功能需要使用到Jaguar/Repository接口.<br />repository px_repos<br />properties px_cacheprops<br />view px_cache原创 2010-09-03 08:50:00 · 936 阅读 · 0 评论 -
程式開發質量檢查(六)
在一段PB源碼中,有看到一個檢查日期的窗口函數如下:publicfunction integerwf_chk_due_day(string as_due_day);//檢察傳入的票期是否合法返回0表示檢察通過,返回1表示票期的後兩碼不合法//票期供4碼,前兩碼為月份數,後兩碼為某一天(必須為1-31之前的某個數字)INT li_daySELECTTO_NUMBER(SUBSTR(LPAD(TRIM(:as_due_day),4,'0'),3)) INTO :li_原创 2010-08-16 14:07:00 · 101 阅读 · 0 评论 -
程式開發質量檢查(五)
<br />在一段PB源碼中,有看到如下一段代碼:<br /> <!-- @page { margin: 2cm } --><br /> <br />IFil_flow = 1 THEN<br /> dw_3.SetTransObject(Sqlca)<br /> dw_3.Retrieve(ls_no)<br />ELSE<br /> dw_3.SetTransObject(Sqlca)<br /> dw_3.Retrieve()<br />ENDIF<原创 2010-08-16 08:29:00 · 585 阅读 · 0 评论 -
PB中使用WEB Browser的異常問題
<br />在我們的一個系統中,有通過OLE方式嵌入WEB Browser控件,<br />今天一個用戶反應打開系統時無法作業,不知道什麼原因.<br /> <br />經維護人員初步檢查,認為是IE的問題,IE的主頁沒辦法自定義,<br />每次打開IE時,都會重定向到一個類似http://go.microsoft.com/fwlink/?LinkId=142710的網站.<br />因為該電腦不能上網,所以在打開網站時,IE會有一段時間的延時,造成系統無法使用的假象.<br /> <br /原创 2010-08-19 09:51:00 · 1526 阅读 · 0 评论 -
程式開發質量檢查(十一)
<br />在開發的一個報表轉Excel程式中,開發人員使用如下語法來設置表頭部分.<br />invo_excel.uf_setvalue(2,1,'供應商代號') <br />invo_excel.uf_setvalue(2,2,'供應商簡稱')<br />invo_excel.uf_setvalue(2,3,'供應商全稱')<br />invo_excel.uf_setvalue(2,4,'公司代號')<br />invo_excel.uf_setvalue(2,5,'銀行代號')<b原创 2010-08-20 09:01:00 · 532 阅读 · 0 评论 -
程式開發質量檢查(七)
<br />在一段PB源碼中,有如下一個函數定義:<br /> <br /> <!-- @page { margin: 2cm } --><br />publicfunction integer wf_temp_accp (string ws_work_id);<br />LONG ll_row<br />LONGll_count<br />STRING ls_mk<br />STRING ls_bill_no<br />LONG ll_next =0<br /原创 2010-08-17 09:54:00 · 517 阅读 · 0 评论 -
程式開發質量檢查(十二)
<br />今天看一個PB使用的多重分支情況.<br />IF ls_as_chack = '1' OR ls_as_chack = '7' OR ls_as_chack = '9' THEN <br /> ls_type_id = ls_as_chack<br /> dw_single.Retrieve(ls_fact_no,ls_type_id,ls_comp_no) <br />ELSEIF ls_as_chack = '3' THEN <br /> ls_type_原创 2010-08-24 13:33:00 · 533 阅读 · 0 评论 -
關於PB文檔中沒有公佈的INDIRECT關鍵字
<br />在pb中有一個沒有公佈的關鍵字INDIRECT,其功能是將變量與方法進行綁定,可以在對變量進行賦值或取值時執行相應的函式.<br />[instance variable]<br />public:<br /> INDIRECT string i_username {of_SetUsername(*value),of_GetUsername()}<br />private:<br /> string zis_username<br />[Powerscript functions]<原创 2010-09-03 08:44:00 · 815 阅读 · 0 评论 -
com.sybase.jaguar.component.tx_outcome屬性問題
<br />在EAServer中,組件在執行過程中,如果更新資料庫或資料庫的連線發生錯誤,有可能就會拋出一個異常<br />CORBA::TRANSACTION_ROLLEDBACK,這個異常會中斷組件中的執行邏輯,不便於程式開發人員管理錯誤.<br />要阻止這個異常的拋出,只需將組件的com.sybase.jaguar.component.tx_outcome屬性改為failed即可.此屬性<br />就是指定組件發生錯誤時,是否由系統拋出異常.其值有always和failed兩種.原创 2010-09-03 08:48:00 · 108 阅读 · 0 评论 -
CrossTab類型報表取得動態欄位值.
在PB中製作CrossTab類型的數據窗口風格時,也有可能需要再從Script中取得各個動態欄位的值.如設定的動態欄位為@fact,則在代碼中取欄位的值就分別是fact,fact_1,fact_2,fact_3,....在測試時發現如果是取fact_1,fact_2,...的值都是正常的,但是取fact欄位的text時就會是"@fact",並不是實際需要的值.本著有問題,找Google原创 2012-05-29 09:43:29 · 1662 阅读 · 0 评论