今天的主題再回到Domino最新最熱門也是大家最關心的主題XPages的開發,要討論的是「XPages上不支援@WebDbName的函數的解決方案」是很實用的應用寫法希望大家都有收穫.
XPages上不支援@WebDbName的函數的解決方案
XPages剛發表時很多Domino Designer都很高興XPages在有SSJS(Server Side JavaScript)實現了@Formulas中的@Function函數,這樣的寫法有Domino Designer純正的血統,但是目前版本還是有一些@Function函數是不支援的,例如本主題介紹的「@WebDbName」在Web開發一定會用到的@Function函數就沒支援,希望在未來的版本可以支援所有好用的@Function函數並增加更多更好用的@Function函數.
目前沒有支援此@Function函數我們可以有兩種方式可以做替代如下方法一是用SSJS模擬出來的, 方法一是用@Function函數組合出@WebDbName的效果.
在原作者討論中怕原廠以後可能會支援此函數那客製函數可能會跟原廠函數衝突,所以故意在函數的呼叫用法改為「$WebDbName」,當然在很多的討論中也有改進方法一的討論我們就不一一介紹,我們就來看圖一的畫面有興趣的人在看看資料庫裡面的設計程式碼.
方法一:
/**
* provides functionality of the function with same name from @Formula
* @return the name of the current database in a websave format
* @author Michael Gollmick
* @version 1.2
* @date 20090127
*/
function @WebDbName() {
try {
if (typeof this.name === 'undefined') {
var path = database.getFilePath();
var re = new RegExp("\\\\", "g");
path = path.replace(re, "/");
var arr = path.split("/");
for (var a = 0; a < arr.length; a++) {
arr[a] = escape(arr[a]);
}
this.name = arr.join("/");
}
} catch (e) {
}
return this.name;
}
方法二:
@ReplaceSubstring(@ReplaceSubstring(@Subset(@DbName(), -1),"\\", "/"), " ", "%20");
資料來源: News on @WebDbName for XPages AND getWebDBName in XPages (@WebDBName in XPages)