This sample shows a report that outputs the results of a job search.
This could be used to report on all Active Jobs of a particular type.
using Contracts; using Contracts.Data; using Contracts.Databases; using Contracts.Responses; using SynergyServerScripting; using System; using System.Collections.Generic; namespace OutOfTheBoxReports.EntityReporting.Projects { public class SearchProjectListReport : IReport, IReportCategoriser { private EntityID _user_id; private const string INPUT_SEARCH_QUERY = "Search query"; private const string INPUT_ATTRIBUTE_LIST = "Attribute list"; /// <summary> /// Get the name of the report /// </summary> /// <returns></returns> public string GetName() => "Job List Report"; /// <summary> /// Get the description of the report /// </summary> /// <returns></returns> public string GetDescription() => "A report contains a table with rows for the jobs found."; /// <summary> /// Get the fixed GUID /// </summary> /// <returns></returns> public Guid GetGuid() => Guid.Parse("{EC24DBB0-02A5-4D56-AE4A-7E40F74474C6}"); /// <summary> /// Get the available extensions /// </summary> /// <returns></returns> public List<string> GetExtensions() => new List<string> { ".html", ".csv" }; /// <summary> /// Get all inputs /// </summary> /// <returns></returns> public IEnumerable<ScriptInput> GetInputs() { List<ScriptInput> inputs = new List<ScriptInput>(); inputs.Add(new QueryScriptInput(INPUT_SEARCH_QUERY, "Job search query", false, EntityType.Project)); inputs.Add(new AttributeListScriptInput(INPUT_ATTRIBUTE_LIST, "List of attributes to be displayed in the report", true, AttributeSearchContext.ProjectAttribute)); return inputs; } /// <summary> /// Can the user access this report? In this case, yes - what the report returns is permission checked /// </summary> /// <param name="user_id"></param> /// <param name="database"></param> /// <returns></returns> public bool CanUserAccess(EntityID user_id, IDatabase database) { _user_id = user_id; return true; } /// <summary> /// Generate the report /// </summary> /// <param name="inputs"></param> /// <param name="output_file"></param> /// <param name="db"></param> /// <returns></returns> public OperationResponse GenerateReport(Dictionary<string, ScriptInput> inputs, string output_file, IDatabase db) { try { var stored_query = ((QueryScriptInput) inputs[INPUT_SEARCH_QUERY]).query; var attribute_id_list = new List<EntityID>(); ScriptInput attribute_list_input; if (inputs.TryGetValue(INPUT_ATTRIBUTE_LIST, out attribute_list_input)) { attribute_id_list = ((AttributeListScriptInput) attribute_list_input).attribute_ids; } // resolve attribute names var attribute_id_name_dic = new Dictionary<EntityID, string>(); foreach (EntityID id in attribute_id_list) { var info = SynergyServerScripting.Entities.Attribute.GetAttributeInfo(id, db); if (info == null) continue; attribute_id_name_dic[id] = info.name; } // perform job search List<ProjectInfo> job_list = SynergyServerScripting.Entities.Project.SearchProjects(stored_query.query, _user_id, db); // basic template string header = GlobalReportHelper.GetHTMLHeader("Job List Report", db); string footer = GlobalReportHelper.GetHTMLFooter(); // generate table SimpleTable project_table = new SimpleTable(); project_table.AddColumn("Job Name", "JobName"); foreach (KeyValuePair<EntityID, string> pair in attribute_id_name_dic) { project_table.AddColumn(pair.Value, pair.Key.ToString()); } // add rows to the table foreach (ProjectInfo p_info in job_list) { SimpleTable.Row row = project_table.NewRow(); row[project_table.GetColumnIndexByVariable("JobName")] = p_info.name; // attributes foreach (KeyValuePair<EntityID, string> pair in attribute_id_name_dic) { // find the attibute string value = ""; var attribute = p_info.attributes.Find(a => a.id == pair.Key); if (attribute != null && attribute.value != null && attribute.value.Value != null) value = attribute.value.Value.ToString(); row[project_table.GetColumnIndexByVariable(pair.Key.ToString())] = value; } project_table.AddRow(row); } // output to a file using (var w = new System.IO.StreamWriter(output_file)) { if (string.Compare(Contracts.IO.Path.GetExtension(output_file), ".html", StringComparison.OrdinalIgnoreCase) == 0) { w.Write(header); w.WriteLine(GlobalReportHelper.GetReportGadgetStart("Search Results")); w.Write(project_table.ToString()); w.WriteLine(GlobalReportHelper.GetReportGadgetEnd()); w.Write(footer); } else if (string.Compare(Contracts.IO.Path.GetExtension(output_file), ".csv", StringComparison.OrdinalIgnoreCase) == 0) { w.Write(project_table.ToCSV()); } } } catch (Exception ex) { return OperationResponse.Error(0, ex.Message); } return new OperationResponse(); } /// <summary> /// The category of the report - useful for UI purposes /// </summary> public string Category => "Jobs"; } }
This language is not supported or no code example is available.