顯示具有 programmer 標籤的文章。 顯示所有文章
顯示具有 programmer 標籤的文章。 顯示所有文章

2015年3月27日 星期五

Fwd: crystal report export excel data only

Crystal report 輸出Excel
ReportDocument1.ExportOptions.ExportFormatType = ExportFormatType.Excel; 

※若只要輸出 Data only
ReportDocument1.ExportOptions.ExportFormatType = ExportFormatType.ExcelRecord;

--
待事以直 是為君子

2011年7月21日 星期四

Oracle client參考要去哪裡找



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

2011年7月16日 星期六

看門貓∼

自動偵測指定目錄,當偵測到新增檔案時將檔案透過網際網路傳回中心主機上。

一、偵測檔案
>
> //偵測事件(觸發動作:備份、上傳、刪除)
>             FileSystemWatcher fsw = new FileSystemWatcher(fpath);
>             fsw.IncludeSubdirectories = false;//不監控指定目錄內的子目錄
>             //fsw.Filter = "fer.txt"; //不支援使用多個篩選器,例如 "* txt|*.doc"。
>             fsw.Created += new FileSystemEventHandler(fsw_Created);
>             //fsw.Changed += new FileSystemEventHandler(fsw_Changed);
>             fsw.EnableRaisingEvents = true;
>             Console.Read();
>
> static void fsw_Created(object sender, FileSystemEventArgs e)
>         {
>             Console.WriteLine(SaveLog(string.Format("偵測到新增檔案:{0}", e.Name)));
>             DoJob();
>         }

二、FTP傳輸
> /// <summary>
>         /// FTP上傳
>         /// </summary>
>         /// <param name="fName">檔名</param>
>         /// <returns>成功/失敗</returns>
>         private static bool PutFile(string fName)
>         {
>             SaveLog(string.Format("上傳檔案:{0}", fName));
>             string ftpstr = string.Format("ftp://{0}:{1}/{2}{3}", ftp_url, ftp_port, ftp_path, fName);
>             //Create FTP request            
>             FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpstr);
>             request.Method = WebRequestMethods.Ftp.UploadFile;
>             request.Credentials = new NetworkCredential(ftp_id, ftp_pw);
>             request.UsePassive = true;
>             request.UseBinary = true;
>             request.KeepAlive = false;
>
>             //讀入檔案
>             FileStream stream = File.OpenRead(string.Format("{0}{1}", fpath, fName));
>             byte[] buffer = new byte[stream.Length];
>
>             stream.Read(buffer, 0, buffer.Length);
>             stream.Close();
>
>             //上傳
>             try
>             {
>                 Stream reqStream = request.GetRequestStream();
>                 reqStream.Write(buffer, 0, buffer.Length);
>                 reqStream.Close();
>             }
>             catch (Exception ex)
>             {
>                 string exs = string.Format("例外狀況:{0}, Ftp string:{1}", ex.ToString(), ftpstr);
>                 Console.WriteLine(exs);
>                 SaveLog(exs);
>                 SendMail(exs);
>                 return false;
>             }
>             FtpWebResponse response = (FtpWebResponse)request.GetResponse();
>             Console.WriteLine(SaveLog(string.Format("傳輸狀態:{0}", response.StatusDescription)));
>             request.Abort();
>             return true;
>         }
>

三、Email發送
>
> /// <summary>
>         /// 發送通知
>         /// </summary>
>         /// <param name="users">收件人</param>
>         /// <param name="exmsg">例外訊息</param>
>         /// <returns></returns>
>         private static bool SendMail(string _body)
>         {
>             SmtpClient MySmtp = new SmtpClient(ssmtp, ssmtp_port);
>             MailMessage Mms = new MailMessage();
>             //MySmtp.Credentials = new NetworkCredential(mail_id, mail_pw);
>             //MySmtp.EnableSsl = true;
>
>             Mms.From = new MailAddress(mail_src);
>             foreach (string _ms in mail_rec.Split(','))
>             {
>                 if (!string.IsNullOrEmpty(_ms)) Mms.To.Add(_ms);
>             }
>             Mms.Subject = mail_sub;
>             Mms.Body = _body;
>
>             try
>             {
>                 MySmtp.Send(Mms);
>                 Console.WriteLine(SaveLog(string.Format("派送訊息通知:{0}", Mms.To.ToString())));
>             }
>             catch (Exception ex)
>             {
>                 Console.WriteLine(SaveLog(string.Format("SMTP發生例外狀況:{0}", ex.ToString())));
>                 return false;
>             }
>             return true;
>         }

四、引用
> using System.IO;
> using System.Net;
> using System.Net.Mail;
> using System.Net.NetworkInformation;


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

2011年7月3日 星期日

復古一下∼D2K

Oracle
首先確認把程式庫加入,這樣之後再開啟表單才會正常。





走走回頭路:D2K, ASP, ...

2011年3月18日 星期五

Jquery跟Silverlight打架!

最近工作上處理的系統中又有 silverlight又有 jQuery
結果兩個相處上有點小摩擦~銀光跟Jquery的遮罩互不相讓!
基本上調整 z-index沒有效果
後來找到一個解決方案~在嵌入SL的Object中加入兩個參數就完工!
<param name="background" value="Transparent" />    
                                <param name="windowless" value="true" />

高興了還沒三秒鐘!卻換 Drag and drop 的功能不能用了!昏 ...
Silverlight主要負責處理拖曳上傳。

後來發現最有影響的是<param name="windowless" value="true" />這一行
所以乾脆把它作成<Literal>控制項,由程式去控制他的true or false!
void SetWindowless(bool iswlmode)
    {
        StringBuilder sb = new StringBuilder();
        string wlmode = (iswlmode) ? "true" : "false";
        sb.AppendFormat("<param name=\"windowless\" value=\"{0}\" />",wlmode);
        Lit_windowless.Text = sb.ToString();
    }
--
<object data="data:application/x-silverlight-2," height="99%" type="application/x-silverlight-2"
                                width="350px" style="z-index:99999;">
                                <param name="source" value="/Service/xxx.xap" />
                                <param name="onError" value="onSilverlightError" />
                                <param name="minRuntimeVersion" value="4.0.50826.0" />
                                <%--<param name="background" value="Transparent" />    
                                <param name="windowless" value="true" />   --%>
                                <asp:Literal ID="Lit_windowless" runat="server" />               
                                <param name="autoUpgrade" value="true" />
                                <a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50826.0" style="text-decoration: none">
                                    <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"
                                        style="border-style: none" />
                                </a>
                            </object>
利用完了再一腳踢開 ccc

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

2010年11月11日 星期四

I'm PM ∼ 無止盡的需求變更

※既然無可避免會有的損失,就提早在專案執行前加以量化吧!

我們常常進行專案管理的時候會時常需要跟客戶拉扯
關於系統上線驗收後一些修修改改的項目、更有甚者還會有新增功能的要求出來
對於這種情況往往要耗費心力去跟客戶溝通、角力
要掌握好服務客戶跟維護自身利益的分寸常常是兩難
因此我在想是否何不當初一開始就將他量化,反而可以控制損失呢?
例如給予一定的修改時數或次數限制。



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

2010年6月13日 星期日

關於連線遠端桌面∼


微軟偷改 ∼ -__- #

/console改成/admin。
Vista SP1, 2008, XP SP3之後的mstsc都是這樣。



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

2010年6月12日 星期六

敵人∼日期時間


系統上線果然世什麼事都可能發生,前幾天就為了日期選擇器原的問題大傷腦筋∼由於客戶在自己的機器上安裝OS時將日期時間設為"月日年"導致我們的系統放上去後不太正常,用自製的日期選擇器「使用者控制項」時,會發生格式錯誤、數字亂跳!拜了一下大神後:
改了控制臺、登錄檔(HKEY_USERS\.DEFAULT\Control Panel\International)、ASP.Net全域組態...還是沒效!
(IIS這個死不悔改的傢伙!!)

最終只好先取消元件中的MSAK驗證、並將日期格式明確的下定義:

在Script裡這麼用:ToString("yyyy/MM/dd")
在Gridview裡這麼用DataFormatString="{0:yyyy/MM/dd}
在Bind或Eval裡這麼用:Bind("xxx","{0:yyyy/MM/dd}")



結論:開發程式時,養成好習慣是重要的~

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

2010年5月29日 星期六

預存程序呼叫預存程序?

一般在「預存程序」中呼叫預存程序,回傳的值是執行的狀態代碼,即 int 型態的值。
若是要取得計算的值,必須在預存程序中設定output 的參數,然後以下列方式得值。


EXECUTE @RC = [dbo].[ZGetFPR]
   @tp='MarketingPOShip'
  ,@d= @s output
select @s

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

2010年5月21日 星期五

好東西∼如何將SQL子查詢的多筆結果放到同一個欄位

請把這行放到子查詢後面吧: FOR XML PATH('')

例句:
SELECT
*,(select [ChName]+',' from user_data where [id] <> '' FOR XML PATH('')) as EXp2
FROM [TABLE]
 
 --
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年3月11日 星期四

ASP.Net匯出PDF~Bt iTextSharp

Part.1
首先當然是將iTextSharp載回來加入參考,然後引用:
<%@ Import Namespace=" iTextSharp.text" %>
<%@ Import Namespace=" iTextSharp.text.pdf" %>
<%@ Import Namespace="iTextSharp.text.html.simpleparser" %>
程式:
//--輸出PDF
Response.ContentType = "application/pdf";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("content-disposition", "attachment;filename=CusInvNo.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
System.IO.StringWriter stringWrite = new StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

GridView1.DataBind();
StringReader reader = new StringReader(stringWrite.ToString());
Document doc = new Document(PageSize.A4);
PdfWriter.GetInstance(doc, Response.OutputStream);

/*若要將檔案放在Server上
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(HttpContext.Current.Server.MapPath("TEST.pdf"), FileMode.Create));
*/

//0.處理中文~設定中文字型
string fontPath = Environment.GetFolderPath(Environment.SpecialFolder.System) +@"\..\Fonts\kaiu.ttf";
BaseFont BaseF = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font fontCh = new Font(BaseF, 12);

doc.Open();
//1.將GridView轉為PdfPTable
PdfPTable ptb = new PdfPTable(GridView1.Columns.Count);

//表格標題
for (int h = 0; h < GridView1.Columns.Count; h++)
{
ptb.AddCell(new Phrase(GridView1.HeaderRow.Cells[h].Text, fontCh));
}
ptb.HeaderRows = 1;
//表格內文
for (int i = 0; i < GridView1.Rows.Count; i++)
{
for (int j = 0; j < GridView1.Columns.Count; j++)
{
ptb.AddCell(new Phrase(GridView1.Rows[i].Cells[j].Text, fontCh));
}
}
//2.輸出
doc.Add(ptb);
doc.Close();
後來中文問題~將GridView轉成PDFPTable來解決。

2010年3月10日 星期三

ASP.Net錯誤訊息導頁

Web開發的系統導入後,有時候還是有可能被「厲害的User」弄出錯誤訊息!
以ASP.Net而言就是經典的黃底紅字啦!所以這時候最好做一下錯誤訊息導頁。

一、Web.config設定:

在Web.config的<system.web>中加入
<customErrors defaultRedirect="GenericErrorPage.aspx" mode="On" />

二、攔截網頁設定:
GenericErrorPage.aspx 裡面我是用DBMail來做通知工具,頁面如下:

<%@ Page Language="C#" %>

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{
if (Server.GetLastError() != null)
{
//使用asp.net 傳送MAIL
//MailMessage mm = new MailMessage("admin@asp.net","signally@yutian.com.tw","DCM網站錯誤訊息",Server.GetLastError().GetBaseException().Message);

string s = "",ShowMsg="",mm;
mm = (Server.GetLastError().GetBaseException().Message).Trim().Replace("'", "#");

//將錯誤清除
Server.ClearError();

//傳送紀錄錯誤的訊息給管理員。
try
{
//針對已經的錯誤(如:Send Mail)做處理
//SmtpClient sc = new SmtpClient("localhost");
//sc.Send(mm);

//改用DB mail
if (File.Exists(Server.MapPath("~/IsRD")))
{
Response.Write(mm);
}
else
{
ShowMsg = "系統忙碌中、或程式暫時無法執行,已通知系統管理員處理,請稍後再試。";
s = "Exec ZSendErrMsg @tp = 1,@em= '',@mm = '" + mm + "'";
Class1.ExecSQL(s);
Response.Write(ShowMsg);
//Server.Transfer("~/ErrorPage.aspx");
}
}
catch (Exception ex)
{
Response.Write(ex.Message );
}

}
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>伺服器忙碌</title>
</head>
<body>
</body>
</html>
三、利用在跟目錄下放一個叫"IsRD的檔案"來區別是否要攔截訊息∼

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

2010年3月9日 星期二

Xpage-計算欄位使用HTML

Xpage對於計算欄位控制項中的HTML標記,會當作普通文字。若要使其顯示為HTML則要將「內容」→「基本」→「escape」屬性設為"false".

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

2010年3月8日 星期一

[MS SQL Server] - 安裝PDF IFilter

安裝完SQL server預設支援的過濾器沒有PDF,所以要另外下載安裝。
目前Adobe的 IFilter 是出到6版。
http://www.adobe.com/support/downloads/detail.jsp?ftpID=2611

在server上安裝完之後要進入SQL執行指令,它才會被啟用。
sp_fulltext_service 'load_os_resources',1.
This command tells the Microsoft Search Service to load OS specific wordbreakers, stemmers, and such.
sp_fulltext_service 'verify_signature', 0.
Do not verify that the binaries are signed.

重新啟動SQL Server、Index service ... 乾脆重開機 ∼
查一下[sys.fulltext_document_types],看PDF有沒有確實被吃進去。

重建索引。

完工…

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

2010年3月5日 星期五

MSSQL建立全文檢索

幸好當初規劃文件管理系統時是把檔案存在DB的image欄位裡面

現在要做全文檢索方便多了!

0.首先啟用 fulltxt
1.建立全文檢索目錄:
2.建立檢索索引:
3.查詢檢索:

一、啟用 fulltxt指令:sp_fulltext_database enable

建立Fulltext目錄

[資料庫]→儲存體…如下


建立全文檢索

選擇要被檢索的欄位,並指定該欄位的檔案類型。




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

2010年3月2日 星期二

Xpage-網頁間的資料傳遞?

網頁間傳遞資料最常用的就是Post或者Get,但今天卻突然發現自己不知道Xpage裡面要怎麼做!趕緊查了一下Xpage wiki。
總是有好心人會提供範例:

q = facesContext.getExternalContext().getRequest().getQueryString();
k="UXID";
v=0;
if (q.indexOf(k+"=")>-1) {
    v = q.substring(q.indexOf(k+"=")+k.length()+1, q.length());
    v = (v.indexOf("&")>-1?v.substring(0,v.indexOf("&")):v2);
}
if (v == "insert") return '1';

利用" facesContext"來取得QueryString
然後再用程式去解析字串∼上例是取出"UXID="後面到"&"之前的字串。
因為我是用來做隱藏條件,所以再加一行判斷式若是"insert"則傳回1,表示「可見的!」
 
--
看到、想到、說到、做到 
能夠填平大海的誓言,也比不上邁出一步的價值 
是以吾輩此生,再無任何誓言

2010年2月26日 星期五

C#還是比較好用∼補零原來很簡單!

XXX.ToString("00")
XXX如果是月份函數:則原本1,2,3 ... 12
會變成:01,02,03 ... 12

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

2010年2月24日 星期三

Notes-Web化的苦痛:時間選擇器

在Notes還沒有Xpage的時代裡,要將應用程式Web化有幾個特別痛苦的地方。
1.人員名錄選擇器
2.時間選擇器
3.日期選擇器

(↑依照痛苦指數排名)
日期、時間網路上到還有JavaScript的解決方案可以選。
只是要放在Nsf裡面需要一些技巧。而人員名錄就真的只能硬Code了。
自己做子表單、嵌入視界、用JS抓勾選欄位的UNID、再用代理程式撈資料回來…
十分麻煩。雖然之前已經有前輩所作的模組,不過要搬過來要遷就它反而麻煩。
這一部份有空再來整理。先講一下「時間選擇器」搬進Notes裡面的方法。

引用:暗黑執行緒的這篇
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/09/04/code-javascript-time-picker.aspx
以及所使用的Timepicker模組。

Timepicker模組有兩部份:圖片、JS檔
1.JS檔的部份把程式碼Copy出來,放到Script程式庫然後再於表單的JS表頭引用即可
2.圖片的話必須注意配合放置的路徑。放到NSF檔中的"資源/圖片"裡要引用實在是很
痛苦,而且各AP之間無法共用。所以我是放到"data\domino\icons"下面。
將ImagesPath目錄設為:"/icons/"即可被抓到。
3.在表單中加入這行:
<script type="text/javascript">afa_ExtendTimePicker("AwayTime");</script>
並選取文字~透過HTML即可。

p.s.AwayTime是欄位名稱
完成後如下:

p.s.2
Web開發時,ID不要漏掉。JavaScript很依賴他的!

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

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啦!


如下:



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