using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using Wellan.Web.UI;
using Wellan.Web.View;
using Wellan.Common;
using System.Text;
using Wellan.Service;
using System.Net.Mail;
public partial class _Default : System.Web.UI.Page
{
protected string FuserLang = "";
private string CurrPage = "";
private string FReportDataPath = "";
private string CurrPageKey = "__CURRPAGE__";
private string ParamListKey = "__PARAMLIST__";
///
/// 頁面的初始化之前事件
///
protected void Page_PreInit(object sender, EventArgs e)
{
// 設定頁面主題
//Page.Theme = "DefaultTheme";
lbSystemCaption.Text = WConfig.GetCompanyName() + " " + WConfig.GetSystemName();
if (Request.ServerVariables["http_user_agent"].IndexOf("Safari", StringComparison.CurrentCultureIgnoreCase) != -1)
Page.ClientTarget = "uplevel";
//if (Request.UserAgent.Contains("AppleWebKit"))
// Request.Browser.Adapters.Clear();
}
/*
public override string StyleSheetTheme
{
get
{
return "DefaultTheme";
}
set
{
base.StyleSheetTheme = value;
}
}
*/
protected void Page_Init(object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptInclude(Page, Page.GetType(), "vue",
ConfigurationManager.AppSettings["DEBUG"].ToUpper() == "Y" ? "utility/vue_dev.js" : "utility/vue.js");
/*
Hashtable ParamList;
if (Session[ParamListKey] != null)
ParamList = Session[ParamListKey] as Hashtable;
else
ParamList = new Hashtable();
// 需要直接載入某功能
if (!IsPostBack && Request[WConstants.LoadForm] != null)
{
CurrPage = Request[WConstants.LoadForm].ToString();
// 取出 Request 的各參數,放入準備傳入 user control 的參數列表中
foreach (string key in Request.QueryString.AllKeys)
{
ParamList.Add(key, Request[key]);
}
Session.Remove(CurrPageKey);
}
// 載入目前選到的功能
else if (Session[CurrPageKey] != null)
{
CurrPage = Session[CurrPageKey].ToString();
// 移除目前頁的 Session 儲存,以免被誤用
Session.Remove(CurrPageKey);
}
ParamList[WConstants.ReportDataPath] = FReportDataPath;
LoadForm(ParamList);
*/
}
/*
///
/// 樣式表主題
///
public override string StyleSheetTheme
{
get
{
return "Default";
}
set
{
base.StyleSheetTheme = value;
}
}
*/
protected void Page_Load(object sender, EventArgs e)
{
// 若 session 已消失,則登出
if (Session[WConstants.UserId] == null)
{
btnLogout_Click(sender, e);
return;
}
// 擷取瀏覽器語言設定
GetBrowserLanguage();
// 取得報表實體目錄
FReportDataPath = Server.MapPath(@"~\reportData\");
// 建立主功能表
WMenuGenerator menuGen = new WMenuGenerator();
menuGen.menu = MainMenu;
menuGen.UserLang = FuserLang;
menuGen.UserId = Session[WConstants.UserId].ToString();
menuGen.MenuConfigFile = WConfig.GetMenuConfig();
menuGen.GenerateMenu(WConfig.GetMenuTree());
// 取出之前儲存的 ParamList
Hashtable ParamList;
if (Session[ParamListKey] != null)
ParamList = Session[ParamListKey] as Hashtable;
else
ParamList = new Hashtable();
// 需要直接載入某功能
if (!IsPostBack && Request[WConstants.LoadForm] != null)
{
CurrPage = Request[WConstants.LoadForm].ToString();
// 取出 Request 的各參數,放入準備傳入 user control 的參數列表中
foreach (string key in Request.QueryString.AllKeys)
{
if (!ParamList.ContainsKey(key))
ParamList.Add(key, Request[key]);
else
ParamList[key] = Request[key];
}
Session.Remove(CurrPageKey);
}
// 載入目前選到的功能
else if (Session[CurrPageKey] != null)
{
CurrPage = Session[CurrPageKey].ToString();
// 移除目前頁的 Session 儲存,以免被誤用
Session.Remove(CurrPageKey);
}
ParamList[WConstants.ReportDataPath] = FReportDataPath;
LoadForm(ParamList);
// 顯示使用者名稱
lbCUSRNAME.Text = Session[WConstants.UserName] != null ? Session[WConstants.UserName].ToString() : "";
//lbCCUSTNAME.Text = Session[WConstants.CustName] != null ? Session[WConstants.CustName].ToString() : "";
// 如果沒有密碼,顯示無密碼提示訊息
if (Session["NOPASSWORD"] != null && Session["NOPASSWORD"].ToString() == "TRUE")
lbNOPassword.Style[HtmlTextWriterStyle.Display] = "inline";
else
lbNOPassword.Style[HtmlTextWriterStyle.Display] = "none";
/*
* 移至 Global.asax
*
// 啟動檔案定時清除
// 要停止檔案定時清除,必須停止網站應用程式,或是設定 Enabled = false
WDeleteFileService dfs = WDeleteFileService.GetInstance();
if (!dfs.Enabled)
{
dfs.DeletePatterns.Clear();
dfs.DeletePatterns.Add(FReportDataPath + "*.mdb");
dfs.DeletePatterns.Add(FReportDataPath + "*.rpp");
dfs.Interval = 600; // 每幾秒清除一次檔案
dfs.FileAgeToDelete = 600; // 要清除最後寫入時間是幾秒之前的檔案
dfs.Enabled = true;
}
// 啟動郵件傳送服務
// 郵件伺服器相關設定,在 Web.Config 中的 System.Net 節
WMailSender mailSender = WMailSender.GetInstance();
if (!mailSender.Enabled)
{
mailSender.Interval = 10;
mailSender.Enabled = true;
}
*/
// 輸出 CR Viewer 標籤
ltCRX.Text = CRAX.CRAXHelper.GetCRAXViewerDeclaration(Context);
//Page.ClientScript.RegisterStartupScript(Page.GetType(),
// "FixMenu",
// // "if (typeof(FixMenu) !== \"undefined\") { FixMenu(document.getElementById(\"" + MainMenu.ClientID + "\")); }", true);
// "FixMenu(document.getElementById(\"" + MainMenu.ClientID + "\");", true);
}
///
/// 將瀏覽器語言設定與應用程式提供的語言設定作比對
/// 選出最適合的語系設定
///
private void GetBrowserLanguage()
{
FuserLang = "";
// 取得應用程式提供之語言設定
string[] MyLanguages = WConfig.GetLanguages();
if (Request != null && Request.UserLanguages != null)
{
foreach (string s1 in Request.UserLanguages)
{
foreach (string s2 in MyLanguages)
{
if (s1.ToLower().CompareTo(s2.ToLower()) == 0)
{
FuserLang = s1;
}
}
}
}
// 如果找不到,則設定為繁體中文
if (FuserLang == "")
FuserLang = "zh-tw";
//設定台灣日曆
if (WConfig.GetCY11() == 1911)
{
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("zh-TW");
ci.DateTimeFormat.Calendar = new System.Globalization.TaiwanCalendar();
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
}
// 將 Javascript 中使用的訊息變數及內容輸出至網頁
StringBuilder sb = new StringBuilder();
sb.Append(WConstants.JavaScriptStart);
sb.Append("\n\n");
sb.Append(WConstants.JavaScriptEnd);
ClientScript.RegisterStartupScript(Page.GetType(), "__LANGJS__", sb.ToString());
}
///
/// 載入功能
///
/// 要傳入的參數
private void LoadForm(Hashtable ParamList)
{
WUserControlBase wctrl = null;
if (CurrPage != "")
{
WWebFormController controller = WWebFormController.GetInstance();
Control ctrl1 = null;
try
{
ctrl1 = LoadControl(controller.FindWebPart(CurrPage));
ctrl1.ID = CurrPage;
}
catch (Exception ex)
{
Session.Remove(CurrPageKey);
FormPlace.Controls.Clear();
lbFuncNotExist.Visible = true;
lbFuncNotExist.Text = ex.Message;
return;
}
/* 轉型 WUserControlbase,轉型不成功時,會回傳 null
* 當轉型成功後,作以下事情:
* 1. 傳入參數
* 2. 設定使用者選擇的瀏覽器語言
* 3. 執行 DoInit() 自訂方法
* 4. 將主程式的 AfterCommand 事件處理器掛上去
*/
try
{
wctrl = (WUserControlBase)ctrl1;
}
catch
{
wctrl = null;
}
/* 清除原來放在 PlaceHolder 中的控制項
* 並將剛才載入的控制項放進去
*/
try
{
FormPlace.Controls.Clear();
if (wctrl != null)
{
wctrl.FunctionName = CurrPage;
wctrl.ParamList = ParamList;
wctrl.userLang = FuserLang;
wctrl.MainMenuId = MainMenu.ClientID;
wctrl.AfterCommand += new Wellan.Web.UI.AfterCommandDelegate(AfterCommand);
}
FormPlace.Controls.Add(ctrl1);
lbFuncNotExist.Visible = false;
lbFuncNotExist.Text = "";
}
catch (Exception ex)
{
FormPlace.Controls.Clear();
lbFuncNotExist.Visible = true;
lbFuncNotExist.Text = ex.Message;
}
Session[CurrPageKey] = CurrPage;
Session[ParamListKey] = ParamList;
// 從主功能表中找出 MenuItem
// 還有問題,先不用
// lbSiteMap.Text = GetMenuItemPath(MainMenu.Items);
}
else
{
Session.Remove(CurrPageKey);
FormPlace.Controls.Clear();
}
}
private string GetMenuItemPath(MenuItemCollection Items)
{
string result = "";
if (Items == null)
return result;
foreach (MenuItem item in Items)
{
if (item.Value.Contains("webPart=" + CurrPage))
{
result = item.Text;
return result;
}
result += GetMenuItemPath(item.ChildItems);
}
return result;
}
///
/// 處理 WUserControlBase 的 AfterCommand 事件
///
/// 觸發此事件的 User Control
/// 觸發者自訂的命令識別字
/// 下一個 web part 在 PageDefine 配置檔中的名稱
/// 觸發此事件的 User Control 要傳給下一步的參數
private void AfterCommand(
WUserControlBase Sender,
string CommandName,
ref Hashtable ParamList)
{
WWebFormController controller = WWebFormController.GetInstance();
try
{
WWebFormForward forward = controller.FindForward(CurrPage, CommandName);
CurrPage = forward.DestinationName;
ParamList[WConstants.ForwardSource] = CurrPage;
ParamList[WConstants.ForwardCommand] = CommandName;
LoadForm(ParamList);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
protected void MainMenu_MenuItemClick(object sender, MenuEventArgs e)
{
if (e.Item.Value != "")
{
if (e.Item.Value.StartsWith("webPart="))
{
FormPlace.Controls.Clear();
// 取出 webpart 的名字
string[] menuInfos = e.Item.Value.Split(',');
CurrPage = menuInfos[0].Substring(8);
// 取出要帶進去的參數列
Hashtable paramList = new Hashtable();
paramList[WConstants.ForwardSource] = "";
if (menuInfos.Length > 1)
{
string[] menuItemParams = menuInfos[1].Split('|');
for (int i = 0; i < menuItemParams.Length; i++)
{
if (!menuItemParams[i].StartsWith("parameters="))
continue;
string[] s1 = menuItemParams[i].Substring(11).Split('&');
string aName = "";
string aType = "";
string aValue = "";
for (int j = 0; j < s1.Length; j++)
{
if (s1[j].StartsWith("name:"))
aName = s1[j].Substring(5);
if (s1[j].StartsWith("type:"))
aType = s1[j].Substring(5);
if (s1[j].StartsWith("value:"))
aValue = s1[j].Substring(6);
}
if (aName != "" && aType != "" && aValue != "")
{
switch (aType)
{
case "string":
paramList.Add(aName, aValue);
break;
case "int":
paramList.Add(aName, Convert.ToInt32(aValue));
break;
case "double":
paramList.Add(aName, Convert.ToDouble(aValue));
break;
case "datetime":
paramList.Add(aName, Convert.ToDateTime(aValue));
break;
}
}
}
}
e.Item.Selected = false;
LoadForm(paramList);
}
}
}
public string UserLang
{
get { return FuserLang; }
}
protected void btnLogout_Click(object sender, EventArgs e)
{
Session.Remove(CurrPageKey);
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
}