關于PB11的Webform方式下客戶端代碼的深入編程
PB11為了不致使在客戶端瀏覽器上修改DW的資料時產生過多的服務器端的回呼請求(PostBack,現象是螢屏閃爍厲害,特別是慢機器),提供了客戶端事件腳本JavaScript語言來解決,一般是這樣的方式呼叫:
1. 首先使用任何文本工具撰寫自己的js腳本,假設命名為:myscripts.js
2. 在含有DW的視窗OPEN事件中書寫如下形式的代碼:
#IF DEFINED PBWEBFORM THEN
dw_1.JavaScriptFile = "myscripts.js"
dw_1.OnClientItemChanged = "bmbh_ItemChanged"
#END IF
上面的意思是說:如果是發布為WebForm應用,則給DW_1設定一個腳本處理函式,當client端的專案值發生改變時,呼叫JS檔案中的“bmbh_ItemChanged”函式(來處理有關檢查、計算等需求)
如下是JS中該函式的具體代碼:
function requ_bmbh_ItemChanged(sender, rowNumber, columnName, newValue)
{
if(columnName == "bmbh")
{
// The default function is invoked
return PBDataWindow_ItemChangedReject(sender, rowNumber, columnName, newValue);
}
else
{
//do nothing
}
}
意思是:當欄位“bmbh”的值改變時會自動執行PBDataWindow_ItemChangedReject(會產生回呼),因此當你在DW中撰寫了 PB的PowerScript腳本時,實際上就會執行你的代碼,你可以在ItemChanged事件中撰寫你的處理BMBH改變的代碼,例如處理一個 DDDW來篩選指定部門的職工。
同時,當DW上其他的欄位發生改變時,瀏覽器上不會產生服務器回呼,否則如果沒有這個JS和其中的函式,則任何欄位值的改變都會引起POSTBACK,這樣看螢屏就會難受。
上面這些在SYBASE的手冊檔案pbman110.chm中均有介紹。 但是,關于更深的介紹只字未提,例如我不想在ItemChanged事件中撰寫PB腳本,我想在JS中實作,當然目的也很直接,就是不產生任何POSTBACK,
諸如此類,怎么實作呢?
本人在NEWSGROUP上看到,很多人都提出過類似問題,但好象都沒有明確和直接的回答,所以,本人經過近2個星期的摸索,解決了此類問題,如下是我發表在NEWSGROUP上的一段話,為了省卻輸入問題,我不再進行詳細解釋了,看官仔細理會吧(sorry for poor english )。
I have realized this function at last spent two weeks
please look my code for example :
function dw_ERec_ItemChanged(sender, rowNumber, columnName, newValue)
{
if(columnName == "bmbh")
{
// The default function is invoked
return PBDataWindow_ItemChangedReject(sender, rowNumber,
columnName, newValue);
}
else
{
var dept, doctor ;
if ( columnName == "dept" )
dept = newValue;
else
dept = sender.GetItem ( rowNumber,"dept" );
if ( columnName == "doctor")
doctor = newValue;
else
doctor = sender.GetItem(rowNumber,"doctor");
sender.SetItem(rowNumber, "comp" ,dept + "---" + doctor);
}
}
!!!!!!! Note: HTDW_SetItem and HTDW_GetItem function in dwcommon.js
are function of the matching type, "HTDW" string must be replaced by
yourself datawindow name !!!!!!!!!!!!!!!!!
so, replacing it with "sender" .
Here, I have walked in a lot of detours.
關鍵是GetItem / SetItem 函式的應用,注意這2個函式不是PB的哦,是JS的哦,但遍查dwcommon.js檔案,找不到他們,只有 HTDW_SetItem / HTDW_GetItem , 后來查看了其他很多函式后才恍然大悟,原來這里的HTDW是一種通配描述,不是實際的函式名稱,必須被物件屬主來執行。期間按newsgroup的提示一直在DW所謂的對應了一個二唯陣列rows上找問題,所以一直被之蒙騙。
uj5u.com熱心網友回復:
頂一個,呵呵uj5u.com熱心網友回復:
LZ 似乎一直在研究 Webform ...寫博客吧。
uj5u.com熱心網友回復:
現在不怎么寫程式的,因為寫程式沒錢。
只是上網關注一下,反倒pb用來開發webservice與java,c#做介面比什么都方便。
uj5u.com熱心網友回復:
支持,這方面的資料真是少啊!!轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/78035.html
標籤:Web 應用
