我從年的開始使用PowerBuilder 那時還沒有PFC實際上class library(類庫)的概念那時還是一個新名詞 我們不得不使用PowerBuilder本身來從頭開始創建每一個對象特別的是DataWindow使RAD(快速應用開發)變得真正的高效起來下面讓我們 從一些簡單有用的例子開始吧
將Tabular DataWindow轉換為Grid DataWindow
也許這是一個最有用的小竅門了它可以將tabular DataWindow轉換為grid DataWindow反之亦然在PowerBuilder x版本裡您可以右鍵單擊一個對象來編輯源文件(edit source)這比先前必須將教本導出再導入要簡單的多要將一個tabular DataWindow轉換為grid DataWindow只需要在library painter中右鍵單擊DataWindow對象在彈出菜單中選擇Edit Source打開script editor變量processing控制著DataWindow的顯示類型將值改為DataWindow會變成grid改為DataWindow就會變成tabular
將DataWindow數據源從Select語句改變為Stored Procedure(存儲過程)
這也是一個非常有用的技巧它涉及一些基本的技術首選創建或者確定一個合適的Stored Procedure然後用這個Stored Procedure作數據源創建一個新的DataWindow在library painter裡右鍵單擊這個DataWindow在彈出菜單中選擇Edit Source打開script editor定位到以Procedure開頭的行
確保整行都被選中將該行拷貝到剪貼板然後找到您希望將數據源更改成存儲過程的DataWindow同樣使用Edit Source打開script editor定位到以Retrueve開頭的行
仍須選中整個行(它也許不止一行)現在將整個Retrieve語句替換為剪貼板中的Procedure語句關閉script editor您現在就擁有了一個基於Stored Procedure的DataWindow
為什麼說這個技巧非常有用呢?這個技巧使您既可以保留DataWindow的設計又可以利用stored procedures尤其是在您有許多基於SQL語句的DataWindow在數據庫不斷增長直到面臨性能問題的時候這項技術不僅節省了開發人員的大量時間還能夠保留原有的DataWindow界面而用戶絲毫不會察覺
用stored procedure來更新DataWindow
當DataWindow的數據源變成stored procedureDatawindow的更新能力就丟失了這讓很多開發人員不願用stored procedure作為DataWindow的數據源很多年以來我一直避免使用stored procedure也是出於這個原因無論如何Stored Procedure Update功能是奇妙的首先確定或者創建一個用於更新插入刪除記錄的stored procedures打開DataWindow對象從菜單欄上選擇Rows > Stored Procedure Update
在Tab頁面上分別為insertdeleteupdate選擇選擇用於對應的存儲過程PowerBuilder會逐行列出stored procedure的參數您可以為每個參數配置對應的DataWindow Column
在stored procedure update配置完成後(可能需要保存並退出DataWindow Painter然後重新打開)選擇菜單 Rows>update properties您會發現Stored Procedure如同一個正常的表名一樣出現在Table to Update下拉列表中
如果您希望更新多張表stored procedure update是一個很好的選擇任何一個利用過重置update標記等方法來完成多表更新的開發人員無疑會發現這種方法的非常的有價值
在Powerscript中從stored procedure接收數據
隨著stored procedures的頻繁使用您肯定也希望能夠直接在Powerscript中直接通過stored procedures來獲取數據典型的在Powerscript中我們使用datastore來完成這個任務使用stored procedures的最終結果就是可以減少一些DataWindow對象的存在而且它允許更多的代碼復用相同的procedure既可以在後端完成一個Get的請求也可以用於前端的數據展示如需在Powerscript中利用stored procedure接收數據請參照以下腳本
OpenUserObjectWithParm
許多年前我曾在PowerSoft擔任技術顧問有一次在參加PowerSoft咨詢會議的時候無意中聽到一個客戶希望能夠得到一些有關使用OpenUserObjectWithParm函數的一些建議那個技術顧問從未聽說過這個函數我永遠難忘那次會談它使我確信OpenUserObjectWithParm這個函數在很大程度上被大家忽略了其實這個函數非常的有用它允許你向一個user object傳遞參數告訴它在Window上的什麼位置來自行創建它被存儲在userobjects數組中的位置(可在runtime進行操作windowcontrol[])還有開發人員能夠想到的任何其它的參數舉個簡單的例子我們打開一個DataWindow並允許用戶從一個calendar對象中選擇日期
下面這行代碼位於Window的Open事件中它將創建一個類型為uo_drop_down_calendar的userobjectxy座標分別為並且標題顯示為Begin Date
OpenUserObjectWithParm(iuo_begin Begin Date )
這個技巧還有很多其他的用處
SQL Tool
有很多次在作PowerBuilder應用的技術支持時我們需要檢測和定位一些關於數據的問題但我們並不總可以連接到產品的數據庫上這種情況下在前端的PowerBuilder應用中以系統管理員的身份執行SQL語句的方法就派上用場了我為此編寫了一個很有用的工具軟件
您可以從dropdown DataWindow中任意選擇數據庫表和字段名輕松的構建需要的SQL語句而不用擔心記不住那些字段的名字還可以將SQL語句保存起來以備日後使用例如您的用戶需要找出數據庫中所有的可用的address類型它很簡單您可以通過創建SQL語句來演示給他或她看
用戶將一條SQL語句輸入到DataWindow中然後點擊Execute(執行)檢索結果就會出現在下面的區域用戶還可以將數據結果另存為Excel等等
如果用戶需要更詳細的SQL語句您可以寫下來然後email給他用戶只需要拷貝粘貼到窗體裡就可以執行了這種方法可以用於清理數據庫問題創建或執行stored procedures創建特別的報告甚至授權您可以在enterprise manager作幾乎任何事情這個工具軟件非常的有用無論如何要小心的使用以免用戶創建笛卡兒積或者惡意的更新數據
保存動態創建的DataWindow
讓我們再深入討論這個工具(SQL Tool)倘若您的客戶急需一個定制的報表您可能想先飛速的的完成報表等回來以後再重新規劃集成到應用菜單中於是在您的手提電腦上寫一個stored procedureemail給您的系統管理員您的系統管理員在SQL Tool窗口打開腳本
用戶通過執行這段腳本來創建stored procedure您再告訴他們應該如何配置參數然後執行存儲過程結果被輸出到result set(結果集)窗口現在看看如何能把這個結果保存成一個DataWindow
打開DataWindow頁面然後點擊Create DataWindow
現在點擊Retrieve DataWindow剛才的結果集出現在DataWindow中如果您希望保存這個DataWindow以便以後使用點擊Save DataWindow就可以了您可以適當的修改格式並將它封裝為一個報表
結語
作為PowerBuilder的開發人員 我們總是被要求完成驚人數量的工作用戶或是項目經理可能會要求極其苛刻對一個開發人員來說儲備一個軍械庫的可依賴的技術和例子是非常重要的PowerBuilder的隊伍已經不像從前那麼壯大了在與那些大公司以及政府機構的IT經理們的接觸過程裡我經常被迫去反駁那些所謂的PowerBuilder早已是骨灰(原文用了legacy遺產) 過時貨 廢棄的甚至年代的技術的斷言事實上PowerBuilder仍舊是目前最棒的RAD開發工具它可以讓開發人員只需大約數小時的功夫就完成設計原型和產品級的代碼而非數天乃至數周這也顯示出開發環境是否以團隊為導向的區別
作為PowerBuilder的開發人員我們擁有一個優於我們的其他IT同行最強大的工具我真的希望以上這些技巧能夠幫助初學者以及那些中級的開發人員更加的信賴PowerBuilder
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
From:http://tw.wingwit.com/Article/program/PB/201311/24591.html