//STEP 1:
//UNCOMMENT OUT THE VERSION YOU ARE USING, COMMENT OUT THE RESET
//#define VMS110
//#define VMS136
//#define VMS137
//#define VMS151
//#define VMS151
#define VMS155
using System.Diagnostics;
using System.Linq;
using System.Text;
using VMS.TPS.Common.Model.API;
namespace VMS.TPS
{
///
/// This script cs file should be in your plugin directory. The actual application can be a folder of your choice
/// (controlled by the appPath field)
///
public class Script
{
public Script()
{
}
public void Execute(ScriptContext context)
{
var args = ArgumentBuilder.Build(context);
//STEP 2
//Store the path to the standalone app you want to launch (*Needs to implement ESAPIX.Bootstrapper.AppBootstrapper)
var appPath = @"\\ariaimgprfil1\va_data$\ProgramData\Vision\PublishedScripts\MyAPPFolder\MyApp.esapi.exe";
//BOILERPLATE (same for everyone)
Process.Start(appPath, args);
}
#region ESAPIX.APPLAUNCHER PLUMBING
public class ArgumentBuilder
{
public static string Build(ScriptContext ctx)
{
var sb = new StringBuilder();
if (ctx.CurrentUser != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.CurrentUserId, ctx.CurrentUser.Id));
}
#if !VMS110
if (!string.IsNullOrEmpty(ctx.ApplicationName))
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.ApplicationName, ctx.ApplicationName));
}
if (ctx.BrachyPlansInScope != null && ctx.BrachyPlansInScope.Any())
{
var uids = ctx.BrachyPlansInScope.Select(p => p.UID).ToArray();
sb.Append(string.Format("{0} {1} ", ArgumentKey.BrachyPlansInScope, string.Join(" ", uids)));
}
if (ctx.ExternalPlansInScope != null && ctx.ExternalPlansInScope.Any())
{
var uids = ctx.ExternalPlansInScope.Select(p => p.UID).ToArray();
sb.Append(string.Format("{0} {1} ", ArgumentKey.ExternalPlansInScope, string.Join(" ", uids)));
}
if (ctx.BrachyPlanSetup != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.BrachyPlanSetup, ctx.BrachyPlanSetup.UID));
}
if (ctx.ExternalPlanSetup != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.ExternalPlanSetup, ctx.ExternalPlanSetup.UID));
}
#endif
if (ctx.Patient != null && !string.IsNullOrEmpty(ctx.Patient.Id))
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.PatientId, ctx.Patient.Id));
}
if (ctx.Image != null)
{
sb.Append(string.Format("{0} {1} {2} ", ArgumentKey.Image, ctx.Image.Id, ctx.Image.Series.UID));
}
if (ctx.StructureSet != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.StructureSet, ctx.StructureSet.UID));
}
if (ctx.PlanSetup != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.PlanSetup, ctx.PlanSetup.UID));
}
if (ctx.Course != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.Course, ctx.Course.Id));
}
if (ctx.PlansInScope != null && ctx.PlansInScope.Any())
{
var uids = ctx.PlansInScope.Select(p => p.UID).ToArray();
sb.Append(string.Format("{0} {1} ", ArgumentKey.PlansInScope, string.Join(" ", uids)));
}
if (ctx.PlanSumsInScope != null && ctx.PlanSumsInScope.Any())
{
var ids = ctx.PlanSumsInScope.Select(p => p.Id).ToArray();
sb.Append(string.Format("{0} {1} ", ArgumentKey.PlanSumsInScope, string.Join(" ", ids)));
}
#if (VMS151 || VMS150 || VMS155)
if (ctx.IonPlansInScope != null && ctx.IonPlansInScope.Any())
{
var ids = ctx.IonPlansInScope.Select(p => p.Id).ToArray();
sb.Append(string.Format("{0} {1} ", ArgumentKey.IonPlansInScope, string.Join(" ", ids)));
}
if (ctx.IonPlanSetup != null)
{
sb.Append(string.Format("{0} {1} ", ArgumentKey.IonPlanSetup, ctx.IonPlanSetup.UID));
}
#endif
return sb.ToString();
}
}
///
/// The prefix key to the cmd line arguments for ESAPIX to parse
///
public class ArgumentKey
{
public const string CurrentUserId = "-u";
public const string Course = "-c";
public const string Image = "-i";
public const string StructureSet = "-ss";
public const string ApplicationName = "-a";
public const string PatientId = "-id";
public const string PlanSetup = "-p";
public const string BrachyPlanSetup = "-bp";
public const string BrachyPlansInScope = "-bpsc";
public const string ExternalPlanSetup = "-ep";
public const string ExternalPlansInScope = "-epsc";
public const string PlansInScope = "-psc";
public const string PlanSumsInScope = "-pssc";
public const string IonPlansInScope = "-ipsc";
public const string IonPlanSetup = "-ip";
}
}
#endregion
}