private string RunSASProgram(string sasCode) { StringBuilder logBuilder = new StringBuilder(); if (activeSession != null && activeSession.Workspace != null) { logBuilder.AppendLine("Running SAS ..."); activeSession.Workspace.LanguageService.Submit(sasCode); bool hasErrors = false, hasWarnings = false; Array carriage, lineTypes, lines; do { SAS.LanguageServiceCarriageControl CarriageControl = new SAS.LanguageServiceCarriageControl(); SAS.LanguageServiceLineType LineType = new SAS.LanguageServiceLineType(); activeSession.Workspace.LanguageService.FlushLogLines(1000, out carriage, out lineTypes, out lines); for (int i = 0; i < lines.GetLength(0); i++) { SAS.LanguageServiceLineType pre = (SAS.LanguageServiceLineType)lineTypes.GetValue(i); switch (pre) { case SAS.LanguageServiceLineType.LanguageServiceLineTypeError: hasErrors = true; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeNote: break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeWarning: hasWarnings = true; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeTitle: case SAS.LanguageServiceLineType.LanguageServiceLineTypeFootnote: break; default: break; } logBuilder.AppendLine(string.Format("{0}{1}", lines.GetValue(i) as string, Environment.NewLine)); } }while (lines != null && lines.Length > 0); if (hasWarnings && hasErrors) { logBuilder.AppendLine("Program complete - has ERRORS and WARNINGS"); } else if (hasErrors) { logBuilder.AppendLine("Program complete - has ERRORS"); } else if (hasWarnings) { logBuilder.AppendLine("Program complete - has WARNINGS"); } else { logBuilder.AppendLine("Program complete - no warnings or errors!"); } } return(logBuilder.ToString()); }
/// <summary> /// Collect the results of a job from the SAS server /// </summary> private void FetchResults() { bool hasErrors = false, hasWarnings = false; // when code is complete, update the log viewer Array carriage, lineTypes, lines; do { activeSession.Workspace.LanguageService.FlushLogLines(1000, out carriage, out lineTypes, out lines); for (int i = 0; i < lines.GetLength(0); i++) { SAS.LanguageServiceLineType pre = (SAS.LanguageServiceLineType)lineTypes.GetValue(i); switch (pre) { case SAS.LanguageServiceLineType.LanguageServiceLineTypeError: hasErrors = true; txtLog.SelectionColor = Color.Red; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeNote: txtLog.SelectionColor = Color.DarkGreen; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeWarning: hasWarnings = true; txtLog.SelectionColor = Color.DarkCyan; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeTitle: case SAS.LanguageServiceLineType.LanguageServiceLineTypeFootnote: txtLog.SelectionColor = Color.Blue; break; default: txtLog.SelectionColor = txtLog.ForeColor; break; } txtLog.AppendText(string.Format("{0}{1}", lines.GetValue(i) as string, Environment.NewLine)); } }while (lines != null && lines.Length > 0); // and update the Listing viewer do { activeSession.Workspace.LanguageService.FlushListLines(1000, out carriage, out lineTypes, out lines); for (int i = 0; i < lines.GetLength(0); i++) { SAS.LanguageServiceLineType pre = (SAS.LanguageServiceLineType)lineTypes.GetValue(i); switch (pre) { case SAS.LanguageServiceLineType.LanguageServiceLineTypeTitle: case SAS.LanguageServiceLineType.LanguageServiceLineTypeFootnote: case SAS.LanguageServiceLineType.LanguageServiceLineTypeByline: txtListing.SelectionColor = Color.Blue; break; default: txtListing.SelectionColor = txtListing.ForeColor; break; } txtListing.AppendText(string.Format("{0}{1}", lines.GetValue(i) as string, Environment.NewLine)); } }while (lines != null && lines.Length > 0); if (hasWarnings && hasErrors) { statusMsg.Text = "Program complete - has ERRORS and WARNINGS"; } else if (hasErrors) { statusMsg.Text = "Program complete - has ERRORS"; } else if (hasWarnings) { statusMsg.Text = "Program complete - has WARNINGS"; } else { statusMsg.Text = "Program complete - no warnings or errors!"; } }
static int Main(string[] args) { int exitcode = 0; SasServer activeSession = new SasServer(); //string code = ReadFileFromAssembly(""); string path = args[0]; string readCode = "proc setinit; run;"; // This text is added only once to the file. if (File.Exists(path)) { readCode = File.ReadAllText(path); } //connect to sas server try { activeSession.Connect(); } catch (Exception ex) { Console.WriteLine(ex.Message); } //run sas code if (activeSession != null && activeSession.Workspace != null) { activeSession.Workspace.LanguageService.Submit(readCode); } PopulateDatasetList(activeSession, "work"); // when code is complete, check error/warning bool hasErrors = false, hasWarnings = false; StringBuilder log = new StringBuilder(); Array carriage, lineTypes, lines; do { activeSession.Workspace.LanguageService.FlushLogLines(1000, out carriage, out lineTypes, out lines); for (int i = 0; i < lines.GetLength(0); i++) { SAS.LanguageServiceLineType pre = (SAS.LanguageServiceLineType)lineTypes.GetValue(i); Console.WriteLine(lines.GetValue(i)); switch (pre) { case SAS.LanguageServiceLineType.LanguageServiceLineTypeError: hasErrors = true; break; case SAS.LanguageServiceLineType.LanguageServiceLineTypeWarning: hasWarnings = true; break; default: break; } log.Append(string.Format("{0}{1}", lines.GetValue(i) as string, Environment.NewLine)); } }while (lines != null && lines.Length > 0); using (StreamWriter outfile = new StreamWriter("log.txt")) { outfile.Write(log.ToString()); } if (hasWarnings && hasErrors) { Console.WriteLine("Program complete - has ERRORS and WARNINGS"); exitcode = 4; } else if (hasErrors) { Console.WriteLine("Program complete - has ERRORS"); exitcode = 4; } else if (hasWarnings) { Console.WriteLine("Program complete - has WARNINGS"); exitcode = 0; } else { Console.WriteLine("Program complete - no warnings or errors!"); exitcode = 0; } return(exitcode); }