    

 ## On this page

  

 

 # Class AbstractScriptBasedBuilderUI&lt;RUNNER, MODEL&gt;

 Last update: 19.06.2026 

Namespace: [Phoenix.ComponentPlugInSDK](Phoenix.ComponentPlugInSDK.md)  
Assembly: Phoenix.ComponentPlugInSDK.dll

This class provides a common script editor UI for a script based HarnessBuilderUI component.

```csharp
public abstract class AbstractScriptBasedBuilderUI<RUNNER, MODEL> : AbstractModelBasedBuilderUI<RUNNER, MODEL>, IHarnessBuilderUI<RUNNER>, IHarnessBuilderUIBase, IDisposable where RUNNER : IHarnessRunner where MODEL : ScriptModel, new()


```

#### Type Parameters

`RUNNER`

The type of IHarnessRunner that this builder edits.

`MODEL`

The model type to be used. Usually `Phoenix.ComponentPlugInSDK.Models.ScriptModel`1`

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) ← AbstractDisposable ← [AbstractBuilderUI&lt;RUNNER&gt;](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.md) ← [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.md) ← [AbstractScriptBasedBuilderUI&lt;RUNNER, MODEL&gt;](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.md)

#### Implements

IHarnessBuilderUI&lt;RUNNER&gt;, IHarnessBuilderUIBase, [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

#### Inherited Members

[AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.LoadFromPaczAsync(IExtractedPacz)](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.LoadFromPaczAsync.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2_LoadFromPaczAsync_Phoenix_PaczAPI_IExtractedPacz_), [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.SaveToPaczAsync(IExtractedPacz)](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.SaveToPaczAsync.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2_SaveToPaczAsync_Phoenix_PaczAPI_IExtractedPacz_), [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.Model](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.Model.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2_Model), [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.ConstructAsync(IHarnessBuilderUIHost&lt;RUNNER&gt;)](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.ConstructAsync.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2_ConstructAsync_Phoenix_ComponentBuilderAPI_IHarnessBuilderUIHost__0__), [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.\_saveAsync(IBuilderUIModel)](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2._saveAsync.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2__saveAsync_Phoenix_ComponentPlugInSDK_Models_IBuilderUIModel_), [AbstractModelBasedBuilderUI&lt;RUNNER, MODEL&gt;.Dispose(bool)](Phoenix.ComponentPlugInSDK.AbstractModelBasedBuilderUI-2.Dispose.md#Phoenix_ComponentPlugInSDK_AbstractModelBasedBuilderUI_2_Dispose_System_Boolean_), [AbstractBuilderUI&lt;RUNNER&gt;.\_window](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1._window.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1__window), [AbstractBuilderUI&lt;RUNNER&gt;.Dispose(bool)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.Dispose.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_Dispose_System_Boolean_), [AbstractBuilderUI&lt;RUNNER&gt;.ComponentName](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.ComponentName.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_ComponentName), [AbstractBuilderUI&lt;RUNNER&gt;.ComponentIcon](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.ComponentIcon.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_ComponentIcon), [AbstractBuilderUI&lt;RUNNER&gt;.CreateWindow()](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.CreateWindow.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_CreateWindow), [AbstractBuilderUI&lt;RUNNER&gt;.AddMenuItem(ItemsControl, string, RoutedEventHandler)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddMenuItem_System_Windows_Controls_ItemsControl_System_String_System_Windows_RoutedEventHandler_), [AbstractBuilderUI&lt;RUNNER&gt;.AddAsyncMenuItem(ItemsControl, string, AbstractBuilderUI&lt;RUNNER&gt;.RoutedEventHandlerAsync)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddAsyncMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddAsyncMenuItem_System_Windows_Controls_ItemsControl_System_String_Phoenix_ComponentPlugInSDK_AbstractBuilderUI__0__RoutedEventHandlerAsync_), [AbstractBuilderUI&lt;RUNNER&gt;.AddMenuItem(ItemsControl, string, ImageType, bool, RoutedEventHandler)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddMenuItem_System_Windows_Controls_ItemsControl_System_String_Phoenix_ComponentPlugInSDK_Images_ImageType_System_Boolean_System_Windows_RoutedEventHandler_), [AbstractBuilderUI&lt;RUNNER&gt;.AddAsyncMenuItem(ItemsControl, string, ImageType, bool, AbstractBuilderUI&lt;RUNNER&gt;.RoutedEventHandlerAsync)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddAsyncMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddAsyncMenuItem_System_Windows_Controls_ItemsControl_System_String_Phoenix_ComponentPlugInSDK_Images_ImageType_System_Boolean_Phoenix_ComponentPlugInSDK_AbstractBuilderUI__0__RoutedEventHandlerAsync_), [AbstractBuilderUI&lt;RUNNER&gt;.AddMenuItem(ItemsControl, string, ImageSource, bool, RoutedEventHandler)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddMenuItem_System_Windows_Controls_ItemsControl_System_String_System_Windows_Media_ImageSource_System_Boolean_System_Windows_RoutedEventHandler_), [AbstractBuilderUI&lt;RUNNER&gt;.AddAsyncMenuItem(ItemsControl, string, ImageSource, bool, AbstractBuilderUI&lt;RUNNER&gt;.RoutedEventHandlerAsync)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.AddAsyncMenuItem.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_AddAsyncMenuItem_System_Windows_Controls_ItemsControl_System_String_System_Windows_Media_ImageSource_System_Boolean_Phoenix_ComponentPlugInSDK_AbstractBuilderUI__0__RoutedEventHandlerAsync_), [AbstractBuilderUI&lt;RUNNER&gt;.SelectVariables(IEnumerable&lt;IRuntimeVariable&gt;, IEnumerable&lt;IRuntimeVariable&gt;, IPlugInViewModel, string, string, string)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.SelectVariables.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_SelectVariables_System_Collections_Generic_IEnumerable_Phoenix_PaczAPI_IRuntimeVariable__System_Collections_Generic_IEnumerable_Phoenix_PaczAPI_IRuntimeVariable__Phoenix_ComponentPlugInSDK_ViewModels_IPlugInViewModel_System_String_System_String_System_String_), [AbstractBuilderUI&lt;RUNNER&gt;.SelectVariables(AbstractVariableProvider, IPlugInViewModel, string)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.SelectVariables.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_SelectVariables_Phoenix_ComponentPlugInSDK_AbstractVariableProvider_Phoenix_ComponentPlugInSDK_ViewModels_IPlugInViewModel_System_String_), [AbstractBuilderUI&lt;RUNNER&gt;.SetPaczIcon(Uri, string)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.SetPaczIcon.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_SetPaczIcon_System_Uri_System_String_), [AbstractBuilderUI&lt;RUNNER&gt;.HarnessType](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.HarnessType.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_HarnessType), [AbstractBuilderUI&lt;RUNNER&gt;.WindowClosed](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.WindowClosed.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_WindowClosed), [AbstractBuilderUI&lt;RUNNER&gt;.Host](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.Host.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_Host), [AbstractBuilderUI&lt;RUNNER&gt;.ConstructAsync(IHarnessBuilderUIHost&lt;RUNNER&gt;)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.ConstructAsync.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_ConstructAsync_Phoenix_ComponentBuilderAPI_IHarnessBuilderUIHost__0__), [AbstractBuilderUI&lt;RUNNER&gt;.ShowAsync()](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.ShowAsync.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_ShowAsync), [AbstractBuilderUI&lt;RUNNER&gt;.TrySaveAsync()](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.TrySaveAsync.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_TrySaveAsync), [AbstractBuilderUI&lt;RUNNER&gt;.DisplayException(Exception)](Phoenix.ComponentPlugInSDK.AbstractBuilderUI-1.DisplayException.md#Phoenix_ComponentPlugInSDK_AbstractBuilderUI_1_DisplayException_System_Exception_), AbstractDisposable.disposed, AbstractDisposable.Dispose(), AbstractDisposable.IsDisposed, AbstractDisposable.Dispose(bool), [object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring), [object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)), [object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)), [object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone)

## Properties

[ComponentIcon](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.ComponentIcon.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_ComponentIcon)

The URI of the icon to use for the builder UI. If null, the default Windows icon will be used.

[ComponentName](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.ComponentName.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_ComponentName)

The name of the builder to use in the UI.

[ScriptLanguage](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.ScriptLanguage.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_ScriptLanguage)

The ScriptLanguage that is being used.

## Methods

[CreateWindow()](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.CreateWindow.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_CreateWindow)

Creates the Main Window of the Builder UI. It is recommended that all implementations return a Window that implements `Phoenix.ComponentPlugInSDK.Views.ISaveableWindow`. If the window does not, then requests from the OEM to save the UI via `Phoenix.ComponentBuilderAPI.IHarnessBuilderUIBase.TrySaveAsync` will silently return true.

[GetTreeProperties()](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.GetTreeProperties.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_GetTreeProperties)

Gets the properties for configuring the VariableTree.

[SetupView(IExtractedPacz, ScriptEditorViewModel, Menu)](Phoenix.ComponentPlugInSDK.AbstractScriptBasedBuilderUI-2.SetupView.md#Phoenix_ComponentPlugInSDK_AbstractScriptBasedBuilderUI_2_SetupView_Phoenix_PaczAPI_IExtractedPacz_Phoenix_ComponentPlugInSDK_ViewModels_ScriptEditorViewModel_System_Windows_Controls_Menu_)

Called before the mainWindow is shown. This is where the view should be initialized. And Builder options loaded from the Pacz. Allows setup and customization of the mainMenu for windows that have them. This should be called by CreateWindow to allow derived classes to customize the menu.