2010年2月12日 星期五

Xpage上要如何調用CGI變數

Notes傳統開發Web的時候,可以將欄位名稱設CGI變數名稱,以取得CGI變數資料。
例如使用者IP、HTTPS狀態、Server Name等。
但我們在Xpage上無法再用設定欄位名稱的方式來取得CGI變數資料。
而computeWithForm = both的方式只能用在@Formula上。
所幸我們有現成的程式庫可以達成這需求:
1.到Demo Discussion(討論區範本)中把程式庫:xpCGIVariables搬回來。
2.在程式中我們用Server端的JavaScript去呼叫並取用它:
facesContext.getExternalContext().getRequest().getRemoteAddr());
而我則是把它作成一個「自訂控制項」來方便取用這些CGI資訊
類似傳統上作成「子表單」的方式。


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月10日 星期三

Xpage_檔案上傳救星

從前Notes Web的檔案上傳真是一場惡夢!
現在Xpage來救你了!

在表單中準備好一個"有錢的"欄位檔作存放區。


然後把上傳元件、下載元件都繫結過去就OK啦!


如下:



--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月4日 星期四

Notes(NSF檔)中調用圖片及CSS




放在Notes中的圖片要調用
將一般路徑:images/img01.gif
改成: ./img01.gif


Xpage中的空白字元代碼: 


網路上寫好的CSS檔要拿到Notes裡面使用。由於使用Xpage的「自訂控制項」放入Xpage裡面後ID會被改掉,所以CSS檔裡面ID宣告法(用"#"做開頭的定義),必須改為Class(用"."做開頭的定義)的方式。而原本頁面中引用ID的地方,必須再去指定他的Class。
選擇器 {
屬性:設定值;
...
}
p.s.1.頁面中原先使用id宣告的部份若是有多層,則設定Class時也必須手動上層的Class定義加進來。
p.s.2.注意!在修改ID成Class時不要用「全部尋找/取代」的方式,不然會把色彩設定的#也改到。



當使用Xpage出現「未授權檢視此網頁」時,除了注意ACL中
Anonymous是否有加入並給予權限。
另外也檢查一下是否使用正確的ID建立Nsf檔!


--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月2日 星期二

關於C#讀取CSV檔以及顯示中文亂碼

1.關於C#讀取CSV檔

2.以及顯示中文亂碼∼
using (StreamReader sr = new StreamReader(ytcsv))
變:using (StreamReader sr = new StreamReader(ytcsv,System.Text.Encoding.Default))

string[,] aryResult;
                using (StreamReader sr = new StreamReader(ytcsv,System.Text.Encoding.Default))
                {
                    //讀取文字檔
                    string txt = sr.ReadToEnd().Trim();
                    string[] aryStr = txt.Split('\n');//有幾"列"
                    int hight = aryStr.Length;
                    int width = aryStr[0].Split(',').Length;//有幾"行"
                    aryResult = new string[hight, width];//確定後宣告陣列大小
                    //帶值進去
                    for (int h = 0; h < hight; h++)
                    {
                        string[] arySplit = aryStr[h].Split(',');
                        for (int w = 0; w < width; w++)
                        {
                            aryResult[h, w] = arySplit[w];
                            this.Text = "H:" + hight + "-W:" + width;
                        }
                    }
                }

                //印出結果
                for (int h = 0; h <= aryResult.GetUpperBound(0); h++)
                {
                    for (int w = 0; w <= aryResult.GetUpperBound(1); w++)
                    {
                        //Console.WriteLine("ary[{0},{1}]='{2}'", h, w, aryResult[h, w]);
                    }
                    //列印開始!
                    /*
                    ※96 DPI 時, 1 Inch = 96 Pixels , 1 CM = 1/2.54 Inch = 96/2.54 Pixels = 37.7953 Pixels
                     Sol.1:動態產生控制項,整體一起列印。
                     Sol.2:使用迴圈連續列印。
                     */
                    lbl_cus.Text = aryResult[h, 0];
                    lbl_item.Text = aryResult[h, 1];
                    lbl_content.Text = aryResult[h, 2];
                    lbl_date.Text = aryResult[h, 3];
                    //Print
                }
 

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月1日 星期一

RAMDisk配套措施


修改 Internet Explorer 的暫存目錄(
Temporary Internet Files )
開啟 IE→工具 網際網路選項 瀏覽歷程記錄設定移動資料夾
登出,然後再登入

修改 Firefox 快取資料夾
1.在網址列輸入「about:config
2.∼發誓!一定會小心。
3.新增→字串。
4.在新增字串的視窗中輸入「browser.cache.disk.parent_directory
5.雙擊「browser.cache.disk.parent_directory」輸入字串的值(例:R:\Temp\_fxTmp)
6.重新啟動 Firefox,設定即可生效。


開機∼
Set fs = CreateObject("Scripting.FileSystemObject")
fs.copyFolder "D:\Temp\_fxTmp\Cache", "R:\TEMP\_fxTmp\Cache"
fs.copyFolder "D:\TEMP\_ieTmp\Temporary Internet Files", "R:\TEMP\_ieTmp\Temporary Internet Files"
fs.copyFolder "D:\TEMP\_tmp", "R:\TEMP\_tmp"

關機∼
Set fs = CreateObject("Scripting.FileSystemObject")
fs.copyFolder "R:\TEMP\_fxTmp\Cache", "D:\Temp\_fxTmp\Cache"
fs.copyFolder "R:\TEMP\_ieTmp\Temporary Internet Files", "D:\TEMP\_ieTmp\Temporary Internet Files"
fs.copyFolder "R:\TEMP\_tmp", "D:\TEMP\_tmp"

--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言