private static void BuildAlerts(WidgetBase widget) { widget.Alerts.Add(new AlertElement { MinValue = 0, MaxValue = 75, Action = AlertActionKind.PlaySound, Param = WebTool.GetScriptPath("~/alerts/Waterloo.mp3") }); widget.Alerts.Add(new AlertElement { MinValue = 0, MaxValue = 75, Action = AlertActionKind.ShowAnnotation, Param = "GrpRED" }); widget.Alerts.Add(new AlertElement { MinValue = 75, MaxValue = 90, Action = AlertActionKind.ShowAnnotation, Param = "GrpYELLOW" }); widget.Alerts.Add(new AlertElement { MinValue = 90, MaxValue = 100, Action = AlertActionKind.ShowAnnotation, Param = "GrpGREEN" }); }
private static void FillData(DataSetElement dataSet, int factoryId) { // // Build Data // var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId); var num = 0; foreach (var output in outputs) { var set = new ValueSetElement { //Label = output.DatePro.Value.ToShortDateString(), Value = output.Quantity ?? 0 }; if ((num++ % 2) == 0) { set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');"); } // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다. else { set.Link.SetLink(FusionLinkMethod.PopUp, WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId); set.Link.Width = 600; set.Link.Height = 400; } dataSet.AddSet(set); } }
private static void FillData(SingleSeriesChart chart, int factoryId) { // // Build Data // var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId); var num = 0; foreach (var output in outputs) { var set = new ValueSetElement { Label = output.DatePro.Value.ToShortDateString(), Value = output.Quantity ?? 0 }; switch (num % 4) { case 0: set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April')"); break; case 1: set.Link.SetLink(FusionLinkMethod.PopUp, WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId); break; case 2: set.Link.SetFameLink(WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId, "_blank"); break; case 3: set.Link.SetJavascriptLink("PopUp", "April"); break; default: set.Link.SetLink(FusionLinkMethod.Local, "http://www.realweb21.com"); break; } num++; //if ((num++ % 2) == 0) // set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');"); // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다. //else //{ // set.Link.SetLink(FusionLinkMethod.PopUp, WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId.ToString()); // set.Link.Width = 600; // set.Link.Height = 400; //} chart.SetElements.Add(set); } }
/// <summary> /// Fusion Chart 에 대한 HTML 을 Response에 씁니다. /// </summary> /// <param name="output">Rendering 대상 HtmlTextWriter</param> protected override void RenderContents(HtmlTextWriter output) { if (IsDebugEnabled) { log.Debug(@"FusionChart Control을 HTML로 Rending을 시작합니다... ChartId={0}, FileName={1}", ChartId, FileName); } output.WriteLine(FusionCharts_Javascript); output.WriteLine(FusionChartsExportComponent_Javascript); var filename = FileName; if (filename.StartsWith("~") || filename.Contains("/") || filename.Contains(@"\")) { filename = WebTool.GetScriptPath(filename); } else { filename = HandlerSettings.ResourceFileHandler + "?File=" + filename; } if (IsDebugEnabled) { log.Debug(@"Render FusionChart WebControl. " + @"Chart Filename={0}, DataUrl={1}, DataXml={2}, ChartId={3}, Width={4}, Height={5}, DebugMode={6}, RegisterWithJS={7}, Transparent={8}", filename, DataUrl, DataXml, ChartId, Width, Height, DebugMode, RegisterWithJS, Transparent); } var html = ChartUtil.RenderChartHtml(filename, DataUrl, DataXml, ChartId, Width.ToString(), Height.ToString(), DebugMode, RegisterWithJS, Transparent); if (IsDebugEnabled) { log.Debug("Rendering Html= " + html); } output.WriteLine(); output.WriteLine(html); output.WriteLine(); if (IsDebugEnabled) { log.Debug(@"FusionChart Control을 HTML로 Rending을 완료했습니다!!! ChartId={0}, FileName={1}", ChartId, FileName); } }
/// <summary> /// Chart를 HTML Code로 Rendering을 수행합니다. /// 이 함수를 수행하려면, ASP.NET Page에 FunsionChart JavaScript class를 포함하고 있어야 합니다. /// </summary> /// <param name="chartSwf">Chart에 해당하는 SWF 파일명 (전체경로)</param> /// <param name="dataUrl">Data 제공을 URL을 통해서 할 경우, dataXml로 할 경우에는 빈 문자열을 지정하면 된다.</param> /// <param name="dataXml">Data 제공을 XML로 제공할 경우, Data정보를 나타낸다. dataUrl 방식이라면, 빈문자열을 지정</param> /// <param name="chartId">HTML Code 상에서 Chart의 고유 ID</param> /// <param name="width">Chart 폭 (pixel 단위 또는 %)</param> /// <param name="height">Chart 높이 (pixel 단위 또는 %)</param> /// <param name="debugMode">디버그 모드</param> /// <param name="registerWithJS">JavaScript에 Chart를 자체적으로 등록할 것인가 여부</param> /// <param name="transparent">Chart 투명화 여부</param> /// <returns>Chart를 보이기 위한 JavaScript + HTML Code</returns> private static string RenderChartHtmlInternal(string chartSwf, string dataUrl, string dataXml, string chartId, string width, string height, bool debugMode, bool registerWithJS, bool transparent) { var chartSwfPath = WebTool.GetScriptPath(chartSwf); if (IsDebugEnabled) { log.Debug("Render Chart Starting..."); log.Debug("SWF={0}, dataUrl={1}, dataXml={2}", chartSwfPath, dataUrl, dataXml.EllipsisChar(100)); log.Debug("charId={0}, width={1}, height={2}, debugMode={3}, registerWithJS={4}, transparent={5}", chartId, width, height, debugMode, registerWithJS, transparent); } var flashVariables = string.Format("&chartWidth={0}&chartHeight={1}&debugMode={2}®isterWithJS={3}&DOMId={4}", width, height, debugMode.GetHashCode(), registerWithJS.GetHashCode(), chartId); flashVariables += dataUrl.IsWhiteSpace() ? "&dataXml=" + dataXml : "&dataUrl=" + WebTool.GetScriptPath(dataUrl).UrlEncode(); var builder = new StringBuilder(); builder.AppendFormat("<!-- START Code Block for Chart {0} -->", chartId).AppendLine(); builder.AppendFormat("<div id='{0}Div'>", chartId).AppendLine(); builder.AppendFormat("<object classid=\"clsid:{0}\" ", CHART_CLASS_ID); builder.AppendFormat("codebase=\"{0}\" ", CHART_CODE_BASE); builder.AppendFormat(" width=\"{0}\" height=\"{1}\" name=\"{2}\" id=\"{2}\" >", width, height, chartId).AppendLine(); builder.AddParamLine("allowScriptAccess", "always"); builder.AddParamLine("movie", chartSwfPath); builder.AddParamLine("FlashVars", flashVariables); builder.AddParamLine("quality", "high"); var wmode = string.Empty; if (transparent) { builder.AppendFormat(CHART_PARAM_FMT, "wmode", "transparent").AppendLine(); wmode = "wmode=\"transparent\""; } builder.AppendFormat( "<embed src=\"{0}\" FlashVars=\"{1}\" quality=\"high\" width=\"{2}\" height=\"{3}\" name=\"{4}\" id=\"{4}\" allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" {5} />", chartSwfPath, flashVariables, width, height, chartId, wmode); builder.AppendLine("</object>"); builder.AppendLine("</div>"); builder.AppendFormat("<!-- END Code Block for Chart {0} -->", chartId).AppendLine(); return(builder.ToString()); }
/// <summary> /// Chart를 HTML Code로 Rendering을 수행합니다. /// 이 함수를 수행하려면, ASP.NET Page에 FunsionChart JavaScript class를 포함하고 있어야 합니다. /// </summary> /// <param name="chartSwf">Chart에 해당하는 SWF 파일명 (전체경로)</param> /// <param name="dataUrl">Data 제공을 URL을 통해서 할 경우, dataXml로 할 경우에는 빈 문자열을 지정하면 된다.</param> /// <param name="dataXml">Data 제공을 XML로 제공할 경우, Data정보를 나타낸다. dataUrl 방식이라면, 빈문자열을 지정</param> /// <param name="chartId">HTML Code 상에서 Chart의 고유 ID</param> /// <param name="width">Chart 폭 (pixel 단위 또는 %)</param> /// <param name="height">Chart 높이 (pixel 단위 또는 %)</param> /// <param name="debugMode">디버그 모드</param> /// <param name="registerWithJS">JavaScript에 Chart를 자체적으로 등록할 것인가 여부</param> /// <param name="transparent">Chart 투명화 여부</param> /// <returns>Chart를 보이기 위한 JavaScript + HTML Code</returns> private static string RenderChartInternal(string chartSwf, string dataUrl, string dataXml, string chartId, string width, string height, bool debugMode, bool registerWithJS, bool transparent) { if (IsDebugEnabled) { log.Debug("Render Chart Starting..."); log.Debug("SWF={0}, dataUrl={1}, dataXml={2}", chartSwf, dataUrl, dataXml.EllipsisChar(100)); log.Debug("charId={0}, width={1}, height={2}, debugMode={3}, registerWithJS={4}, transparent={5}", chartId, width, height, debugMode, registerWithJS, transparent); } chartSwf.ShouldNotBeWhiteSpace("chartSwf"); chartId.ShouldNotBeWhiteSpace("chartId"); var chartSwfPath = WebTool.GetScriptPath(chartSwf); string chartName = "chart_" + chartId; var builder = new StringBuilder(); builder.AppendFormat("<!-- Start Script Block for Chart : {0} -->", chartId).AppendLine(); builder.AppendFormat("<div id='{0}Div' align='center'>", chartId).AppendLine(); builder.AppendLine("Chart."); builder.AppendLine("</div>"); builder.AppendLine("<script type=\"text/javascript\">"); builder.AppendFormat(" var chart_{0} = new FusionCharts(\"{1}\", \"{0}\", \"{2}\", \"{3}\", \"{4}\", \"{5}\" );", chartId, chartSwfPath, width, height, debugMode.GetHashCode(), registerWithJS.GetHashCode()). AppendLine(); if (dataXml.IsWhiteSpace()) { builder.AppendFormat(" {0}.setDataURL(\"{1}\");", chartName, EncodeDataUrl(dataUrl, true)).AppendLine(); } else { builder.AppendFormat(" {0}.setDataXML(\"{1}\");", chartName, dataXml).AppendLine(); } if (transparent) { builder.AppendFormat(" {0}.setTransparent(\"{1}\");", chartName, true).AppendLine(); } builder.AppendFormat("{0}.render(\"{1}Div\");", chartName, chartId).AppendLine(); builder.AppendLine("</script>"); builder.AppendFormat("<!-- End script block for Chart {0} -->", chartId).AppendLine(); return(builder.ToString()); }
/// <summary> /// Chart에 제공할 Data의 URL을 인코딩합니다. /// </summary> /// <param name="dataUrl">Chart에게 Data를 제공해 줄 URL</param> /// <param name="noCacheStr">캐시 사용 여부, True면 캐시를 하지 않도록 한다.</param> /// <returns>Encoding된 DataUrl</returns> public static string EncodeDataUrl(string dataUrl, bool noCacheStr) { dataUrl.ShouldNotBeWhiteSpace("dataUrl"); if (IsDebugEnabled) { log.Debug("Encode dataUrl. dataUrl=[{0}], noCacheStr=[{1}]", dataUrl, noCacheStr); } string encoded = WebTool.GetScriptPath(dataUrl); if (noCacheStr) { encoded += (dataUrl.IndexOf("?") >= 0) ? "&" : "?"; encoded += "NfwChartID=" + Guid.NewGuid(); } return(System.Web.HttpUtility.UrlEncode(encoded)); }
private static void FillData(DataSetElement dataSet, int factoryId, string chartName) { // // Build Data // var outputs = FactoryRepository.FindAllFactoryOutputByFactoryId(factoryId); var num = 0; foreach (var output in outputs) { SetElementBase set; if (chartName == "Scatter") { set = new XYSetElement(output.DatePro.Value.DayOfYear, output.Quantity ?? 0); } else { set = new XYSetElement(output.DatePro.Value.DayOfYear, output.DatePro.Value.DayOfYear, output.Quantity ?? 0); } if ((num++ % 2) == 0) { set.Link.SetLink(FusionLinkMethod.Local, "javascript:PopUp('April');"); } // 실제 Javascript 메소드를 쓰려면 "PopUp-April" 로만 쓰면 된다. else { set.Link.SetLink(FusionLinkMethod.PopUp, WebTool.GetScriptPath("~/Charts/Ajax/Default.aspx?FactoryId=") + factoryId.ToString()); set.Link.Width = 600; set.Link.Height = 400; } dataSet.AddSet(set); } }
/// <summary> /// Server-side에서 Chart의 Image/PDF를 export 하도록 설정을 합니다. /// </summary> /// <param name="chart">export 할 chart</param> /// <param name="exportHandler">ExportHandler 경로. <see cref="HandlerSettings.ExportHandler"/></param> /// <param name="filename">Export할 image/pdf 파일의 이름</param> public static void SetExportInServer(this IChart chart, string exportHandler, string filename) { if (IsDebugEnabled) { log.Debug(@"Chart Exporting이 가능하도록 설정합니다. Server-side exporting 후 download를 수행하도록 합니다." + @" exportHander={0}, filename={1}", exportHandler, filename); } // Server-side Export 후 download 하도록 합니다. // chart.ExportAttr.Enabled = true; chart.ExportAttr.AtClient = false; chart.ExportAttr.Action = "download"; chart.ExportAttr.ShowDialog = true; // chart.ExportAttr.TargetWindow = "_blank"; // default is _self chart.ExportAttr.Handler = exportHandler.IsNotWhiteSpace() ? WebTool.GetScriptPath(exportHandler) : HandlerSettings.ExportHandler; chart.ExportAttr.FileName = filename.IsNotWhiteSpace() ? filename : "RealWeb_RealCharts_" + Guid.NewGuid().ToString("D"); }
/// <summary> /// HttpHandler의 작업의 메인 메소드입니다. 재정의 하여 원하는 기능을 수행하되, 제일 첫번째에 부모 클래스의 메소들를 호출해주어야 합니다. /// </summary> /// <param name="context"></param> protected override void DoProcessRequest(HttpContext context) { base.DoProcessRequest(context); if (IsDebugEnabled) { log.Debug("정적 파일 (Static File) 요청 처리를 시작합니다..."); } ParseRequestParams(context); // file not found!!! var physicalPath = context.Server.MapPath(WebTool.GetScriptPath(_virtualPath)); if (physicalPath.FileExists() == false) { ResponseFileNotFound(context, _virtualPath); // context.Response.End(); return; } // if requested file already exist in cache, send file from cache // if (WriteFromCache(context, _cacheKey, CacheDuration, CompressionKind) == false) { _contentType = WebTool.GetMime(physicalPath); var readTask = ReadFile(context, physicalPath); _isCompressed = CanCompression; var fileExt = physicalPath.ExtractFileExt(); // 이미지 파일이거나, 압축이 필요없는 파일은 압축하지 않습니다. if (_contentType.Contains("image") || WebTool.NoCompressionFileExtensions.Any(fileExt.Contains)) { if (IsDebugEnabled) { log.Debug("이미지 파일등 이미 압축된 상태의 파일은 압축하지 않습니다.... physicalFile=[{0}]", physicalPath); } _isCompressed = false; } byte[] readBytes = readTask.Result; if (_isCompressed && readBytes.Length < CompressionThreshold) { if (IsDebugEnabled) { log.Debug("전송할 데이타의 크기가 기본 Threadhold [{0}] bytes 보다 작아 압축을 하지 않습니다. Content-Length=[{1}] bytes", CompressionThreshold, readBytes.Length); } _isCompressed = false; } // 결론적으로 압축이 필요하다면 압축을 합니다. // if (_isCompressed) { readBytes = Compressor.Compress(readBytes); } var cacheItem = new CacheItem(readBytes, _isCompressed, _contentType); SaveToCache(context, _cacheKey, cacheItem, CacheDuration); WriteBytes(context, cacheItem, CacheDuration, CompressionKind); } // context.Response.End(); if (IsDebugEnabled) { log.Debug("정적 파일 (Static File) 요청 처리를 완료했습니다!!! file=[{0}]", _virtualPath); } }
protected void Page_Load(object sender, EventArgs e) { lblUrl.Text = WebTool.GetScriptPath("~/Utils/WebUtilsTestPage.aspx"); lblUrl.Text += "<BR/>ServerName=" + WebTool.ServerName; }