目前分類:PowerBuilder (63)

瀏覽方式: 標題列表 簡短摘要

「REF」在 CS版正常,轉換成網絡版過程中不報錯,但運行時會整句失效:

 

1. integer dwcontrol.GetChild (string name, REF DataWindowChild dwchildvariable ) 
2. f_to_uppser(ls_string, REF ls_result) 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

PB2019Appeon 轉成網絡版,EditMask
Mask: yyyy-mm
MaskDataType: datemask!


文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

PB 有 Debug 功能,它讓你可以看着系統一句一句的執行,也能看到每個變量的值,有助程序猿檢查問題,找到報錯的位置。

在Debug 前要先定位,在最接近報錯點的位置插入breakpoint:
image

然後點「Debug」進入 Debug mode,再點「Start」以啓動系統:

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

單雙行不同背景色能令數據看起來更清晰,如何做到呢?

image

建個如下的 function(), windowdatawindow 的祖先中加入執行的代碼,最好還加個開關,需要時執行一下就可以了。至於 rgb 值,放到數據庫或 ini 就可以了。

// f_set_rowback_color(red1, green1, blue1, red2, green2, blue2, dw)

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

剛把一個 CS 系統署部成網上版,報了個陌生的錯,記錄一下。

以下寫法不管在 PB9, PB12,還是 PB2019,在 CS 環境下都能正常運行,但經 Appeon 部署成網上版就會報「列名 PIG 無效」:

select *
from t_user

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

Untitled.png

繼承是 PB 其中一個賣點,繼承就是控件能從祖先繼承代碼,相同的代碼不必重複寫了又寫,圖中 w_public_code 往上就有三層,代碼會從第一層 pfc_w_master 開始,一層一層的往下執行,最後才會到 w_public_code 內你剛寫的,如果不想用祖先的代碼,只要右按,取消勾選「Extend AncestorScript」就可以了。如果只想要「部份」代碼就要把需要的拷貝到當前層去執行了。

另外要取得祖先的 return value 的話就要樣寫:

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

PowerBuilder
‘ABC~r~nDEF’:
ABC
DEF

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

image

這裏按字面理解就沒什麼差錯了,但有一點想提醒一下,「where clause」部份,如果你的系統是會多人同時使用的話,選「Key and Updatable Columns」或「Key and Modified Columns」會有點風險。因為 A B 兩個用戶同時打開同一條數據,先更新者勝,後更新者就會報 Row changed between retrieve and update 了。至於選哪一個比較好就要看系統對數據更新的嚴謹性了。


文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

ini 就是設定檔,在前面 Powerbuilder(11) 中有提過一下,在手機版中, ini 變得有點不一樣。

部署後的 ini 轉化成手機上 config 文件夾中的 aws$ini$.xml,雖然變成了 xml,但 ProfileString()SetProfileString() 依然可用


文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

每個 APP 都會有自己的路徑,所有在程式中下載的檔案都會儲存在該路徑的 plugin 文件夾中,你可以用 AppeonGetCacheDir() 取得它的路徑。

想在畫面中打開檔案的話,要先在畫面上加入個叫 uo_webview 的控件,然後把檔案這樣交給它就可以了:uo_webview.of_loadlocalfile(ls_path),但 Android 上不支援以 webview 打開 pdf,Android 上看 pdf 要交給瀏覽器
ls_full_path = 'file://' + ls_full_path
GetContextService("Internet", iinet_base)

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

類似於老 PB 時代的 pfc,Appeon Powerbuilder 也替大家準備了一些用於開發 APP 的功能及控件,建議把它們都加入的你的 target 中,那你就可以與手機溝通,取得手機的各種資訊,或調用相機、NFC、GPS 之類的硬件及數據:

  • appeon_workarounds.pbl
  • appeon_cordova.pbl

image

如果你的程式同時支援電腦、網頁或手機版的話,由於某些功能只支援手機,所以你在調用 API 要先以 appeongetclienttype() 去檢查當前的執行環境是什麼,看是 PB、WEB 還是Mobile,然後才判定是否繼續調用。

Mobile Device API 使用手冊

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

image

PB 內有很多內建的功能以方便大家使用,這裏抽取 Itemchanged event 為例,解釋一下 event 怎麼使用。

Event 就是事件,由畫面上發生的事件來觸發,例如滑鼠的左按或右按、用戶點擊按鈕,或從下拉選值之類的。ItemChange 就是某欄位內容被改動過所觸發的事件。圖中Itemchanged( long row, dwobject, string data ) 是系統傳進來的變量,row 是常前行號,dwo 是控件,你可以用 dwo.name 取得它的名字來看看,而 data 則是該欄位裏最新的值,不管該欄位裏面的值是哪種類型,這裏的 data 都是 string,如果裏面的是數字或日期之類的,你就要手工把它從 string 轉換成你想要的類型。Returns long 就是它的返回值是 long 的意思,你可以在 itemchanged 裏 return 不同的值來告訴系統一下步要怎麼做,接不接受這個值,可不可以跳到下一格之類。如果希望按不同欄位做不同的事情,大概要這樣寫:

Choose case upper(dwo.anme)

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

不要被 PowerScript 的語法混淆,在存儲過程裏的 「return」是不會返回值到 PowerScript 的。不少人以為會返回到「sqlcode」,其實不然,「sqlcode」是給數據庫反映存儲過程有沒有成功執行的,寫 return 什麼值都沒有意義,它只會讓你退出而已,取值的話,要用「Fetch」。

-- Stored Procedure
create PROCEDURE usp_sample @input varchar(10), @rtn_int int output, @rtn_char varchar(50) output
AS

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

剛有同事問起,但這個又簡單到沒什麼好解釋,我直接放代碼好了。

 

Datetime    ldt_null

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

每個畫面都可以設「一個」的「Default」按鈕,意思就是當戶用在畫面中按下「Enter」時會觸發的按鈕。下面的「Request code」按鈕就是這種,在 Properties\General 裏勾上「Default」,它的樣子看起來就會不一樣,再按「Enter」就可以觸發它的 Clicked Event 了。

另一種需要配搭「Alt」按鍵使用,比如「Alt + l」,同時按下兩鍵時,下圖的「Login」按鈕就會被觸發,只要在該按鈕的Properties\Text 寫上「&Login」就可以了。

 

image

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

剛用戶求援,系統報錯,但報錯訊息不明,在查找報錯原因同時,也發現了一個編碼錯誤。這錯誤很常見,很多人未必有注意到這細節,我就在這裏提醒一下。

要知道 Sqlerrtext 裏面放的是「前一個動作」的執行結果,以下圖的代碼來說,按道理是要看 update 的錯誤訊息,但最終能看到的卻是「Rollback」的執行結果。由於訊息錯誤,這樣在排錯時就白白多花時間了。

要避免這情況,最簡單的方法就是把 rollback 放到顯示 sqlerrtext 之後,或者把 sqlerrtext 先放到變量,然後才rollback,這樣就能取得正確的訊息了。

 

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

為了提供更好的使用體驗,在有限的畫面中提供更多的數據,PB 提供了 ToolTip,以下就是Properities\Tooltip 頁裏面最常用到的 Icon、Title、Tip,在裏面輸好東西,或設好公式,當勾上「Enabled」,而 mouse pointer 又移到該 object 上面時,Tooltip 就會自動顯示了。另外 Mouse pointer 自動變成手手的設定在 Properities\Pointer 內。

 

下圖是個以 bmp 做底的模擬座位表系統。

image

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

如果你有某些畫面需要定時自動刷新,比方說股票價格,這時候就會用到 Timer Event

Window 入面都有 Timer Event,你可以把需要定時執行的代碼寫到 Timer Event 中,然後在 Window 的其他 event 中啓動它,可能是 Open event,也可能是某按鈕的 Clicked eventTimer(60) 就是每 60 秒執行一遍的意思。

image

Timer(0) 就是停止 Timer,執行過後,在再次啓動 Timer 前,Timer event 內的代碼都不會再執行。

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

整個表格都只有黑跟白,這不夠 user friendly,就好像交通燈有分紅黃綠一樣,系統可以把不同類型的數據顯示成不同顏色,哪個訂單未確認,哪個訂單已出貨,令用戶可以一目了然,省下人工分析的時間,提高工作效率。

設定顏色會用到  RGB(red, green, blue) ,裏面三個值都是從 0 到 255 ,最終顯示的顏色就是由這三個值調配而成的。

 

比方說,某個格子有ABC三個值:

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

Properties.Font.Escapement 內設就可以了,想翻 45 度就輸入 450,想翻 90 度就輸 900。
報表位置不足的時候就幫上忙了。

 

image

文章標籤

過時程式員 發表在 痞客邦 留言(0) 人氣()

1 234