This sample activity demonstrates how to setup a basic activity. It simply writes a job name and a known job attribute to disk. In this case, you may wish to signal some other third party application that something needs to be done with this information - for example, telling a bespoke system the job has reached the Completed status.
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Runtime.Serialization; using System.Text; using Contracts.Data; using Contracts.Databases; using System.Linq; namespace ScriptExample { /// <summary> /// A simple activity to run when we want to write some json to signal to some middleware something has been done, such as a job status update. /// This can be used to tell a third party service that some work could be done /// /// Other options might include sending this information to a webservice /// </summary> public class WriteJSONActivity : SynergyServerScripting.Workflows.ActivityInstance { private const string INPUT_LOCATION = "Output location"; private const string JOB_STATUS_ATTRIBUTE = "JobStatus"; [DataContract] public class Data { [DataMember] public string job_name; [DataMember] public string job_status; } /// <summary> /// Activity to contact a webservice /// </summary> public WriteJSONActivity() : base(Guid.Parse("{95BDDB3E-CBDD-44B7-8DFB-04CEC3F63880}")) { } /// <summary> /// Perform the activity /// </summary> /// <param name="workflow_definition">the definition of the workflow</param> /// <param name="details">details of the current workflow instance</param> /// <param name="script_inputs">the inputs</param> /// <param name="performer_id">who is performing the script</param> /// <param name="db">an active database connection</param> /// <param name="error">any errors that result from running the operation</param> /// <returns>whether the activity was successful</returns> public override bool Perform(Workflow workflow_definition, IWorkflowInstanceDetails details, Dictionary<string, ScriptInput> script_inputs, EntityID performer_id, IDatabase db, out string error) { error = null; // get our project info var project_id = details.GetProjectID(db); var project_info = SynergyServerScripting.Entities.Project.GetProjectInfo(project_id, true, db); if (project_info == null) { error = "Unable to retrieve job information!"; return (false); } // validate inputs var expression_engine = SynergyServerScripting.Entities.Workflow.CreateExpressionEngine(db); Dictionary<string, string> all_vals = new Dictionary<string, string>(); // make sure we have all our inputs, and they all have values var expected = GetInputs(); foreach (var exp in expected) { if (!exp.is_optional && !script_inputs.ContainsKey(exp.name)) { error = "Missing expected input - " + exp.name; return (false); } var val = script_inputs[exp.name] as PrimitiveScriptInput; if (!exp.is_optional) { if (val == null) { error = "Missing expected input - " + exp.name; return (false); } if (string.IsNullOrWhiteSpace(val.type_value)) { error = "Missing expected input - " + exp.name; return (false); } } else { if (val == null || string.IsNullOrWhiteSpace(val.type_value)) { all_vals[exp.name] = ""; continue; } } // process the input for any variables // this allows { } substitutions inside the path, if it's allowed all_vals[exp.name] = SynergyServerScripting.Entities.Workflow.ProcessInputForVariables(val.type_value, details, expression_engine, db); } var location = all_vals[INPUT_LOCATION]; string file_name = System.IO.Path.Combine(location, DateTime.UtcNow.ToFileTime().ToString()); // build our data object Data d = new Data(); d.job_name = project_info.name; // find the status attribute var job_status_attrib = project_info.attributes.FirstOrDefault(x => x.name == JOB_STATUS_ATTRIBUTE); if (job_status_attrib == null || job_status_attrib.value == null) { error = "No job status attribute found!"; return (false); } d.job_status = job_status_attrib.value.Value.ToString(); // convert to json and write to disk var json = this.ConvertToJson(d, db); System.IO.File.WriteAllText(file_name, json); return true; } /// <summary> /// Convert something to json /// </summary> /// <param name="data"></param> /// <param name="current_db"></param> /// <returns></returns> private string ConvertToJson(Data data, IDatabase current_db) { if (data == null) return ""; System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, data); return System.Text.Encoding.UTF8.GetString(ms.ToArray()); } } // Get inputs public override List<ScriptInput> GetInputs() { return new List<ScriptInput> { new PrimitiveScriptInput(INPUT_LOCATION, "The location to write files to", false, PrimitiveScriptInputType.String), }; } // Get general info - used in the UI public override WorkflowActivityInfo GetGeneralInfo() { return new WorkflowActivityInfo() { activity_category = "General", activity_description = "Write job status to disk for middleware", activity_name = "Export Job Status", target_type = WorkflowActivityTarget.Job, }; } } }
This language is not supported or no code example is available.