Plugin API
Die Serverinstallation des SCCM Managers liefert eine Schnittstelle zur Eigenentwicklung von Plugins mit. Dazu wird eine IDE (z.B. Visual Studio) zur Entwicklung von C-Sharp-Anwendungen mit dem Grafikframework WPF benötigt. Des weiteren wird .NET Framework 4.6.1 vorausgesetzt.
Entwicklung
Ein neu erstelltes Plugin muss als Klassenbibliothek (DLL-Datei) kompiliert werden und das Interface IActionPlugin implementieren. Das Interface befindet sich in der Klassenbibliothek ActionPanel.PluginBase.dll. Zusätzlich wird noch die Klassenbibliothek ActionPanel.Common.dll mitgeliefert. Darin sind einige nützliche Helferklassen enthalten.
Zur Einbindung des neu entwickelten Plugins muss lediglich die entsprechende DLL-Datei in das Pluginverzeichnis des SCCM Managers kopiert werden:
{Installationsverzechnis}\Web\SCCMManager\Resources\Assemblies\
Danach muss die Startmenüverknüpfung "Update Plugin Versions" ausgeführt werden, damit das neue Plugin, zur Konfiguration in der Administrationsoberfläche des SCCM Managers, zur Verfügung steht.
Interface IActionPlugin
Folgend wird das Interface IActionPlugin erläutert.
Eigenschaften
Name | Typ | Beschreibung | Automatisch gesetzt |
Title | string | Titel laut Action-Konfiguration | Ja |
Argument | string | Argument laut Action-Konfiguration | Ja |
SelectedComputers | ObservableCollection<IComputerItem> | Hier werden alle zur Laufzeit ausgewählten Computer aufgelistet | Ja |
IsSingleton | bool | Singleton laut Action-Konfiguration | Ja |
ApplicationVariables | IApplicationVariables | Pluginvariablen aus der Datenbank, hierüber können auch Werte modifiziert werden | Ja |
ActionPanelControl | IActionPanel | Zugriff auf diverse Funktionen des SCCM Managers und auf den WebService | Ja |
LanguageTranslater | ILanguageTranslater | Zugriff auf die Sprachenübersetzungen des Plugins | Ja |
PluginContainer | IPluginContainer | Ja | |
SelectedComputerType | SelectedComputerType (Enum) | Nein | |
SingletonBehavior | SingletonBehavior (Enum) | Verhalten, wenn das Plugin ein zweites Mal gestartet wird und dessen Singleton-Eigenschaft aktiviert ist | Nein |
PluginType | PluginTypes (Enum) | Art des Plugins. Mögliche Werte: | Nein |
ContentControl | UserControl | UserControl, das im SCCM Manager als Oberfläche angezeigt werden soll, wenn es sich bei der Pluginart um ein UserControl-Plugin handelt | Nein |
Name | Rückgabe-Typ | Übergabeparameter | Beschreibung |
Initialize | bool | Initialisierung des Plugins. | |
OnApplicationExit | void | Event wenn der SCCM Manager beendet wird. | |
UpdateArgument | void | string argument | Wenn ein Plugin ein zweites Mal als Singleton gestartet wurde, wird diese Methode aufgerufen. |
InvokeFunction | bool | string function, string[] parameters | Übergabe der konfigurierten Funktion und Parameter. |
Implementierung
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Controls;
using ActionPanel.PluginBase;
using ActionPanel.PluginBase.Enums;
using ActionPanel.PluginBase.Interfaces;
using ClientActionsPlugin.View;
using FuncLib;
namespace ClientActionsPlugin
{
class ActionPanelPlugin : IActionPlugin
{
private ActionUserControl m_control;
public string Title { get; set; }
public bool IsSingleton { get; set; }
public string Argument { get; set; }
public ObservableCollection<IComputerItem> SelectedComputers { get; set; }
public SelectedComputersType SelectedComputerType { get; set; } = SelectedComputersType.Single;
public SingletonBehavior SingletonBehavior { get; } = SingletonBehavior.UpdateArgument;
public PluginTypes PluginType { get; } = PluginTypes.ExecuterUserControl;
public UserControl ContentControl => m_control;
public bool Initialize()
{
m_control = new ActionUserControl(this);
if (m_control != null)
{
m_control.Title = Title;
m_control.SelectedComputer = SelectedComputers?.FirstOrDefault()?.Name;
m_control.Init();
}
return true;
}
public void OnApplicationExit()
{
}
public void UpdateArgument(string argument)
{
Argument = argument;
m_control.SelectedComputer = SelectedComputers?.FirstOrDefault()?.Name;
m_control.Init();
}
public bool InvokeFunction(string function, string[] parameters)
{
bool force = (parameters != null && FLibCMD.CheckForCommandLineKey(parameters, "force", false));
if (function == Functions.SHUTDOWN)
{
return m_control.ShutdownComputer(force);
}
else if (function == Functions.RESTART)
{
return m_control.RestartComputer(force);
}
else if (function == Functions.WAKEUP)
{
return m_control.WakeUpComputer();
}
else
{
return false;
}
}
public IApplicationVariables ApplicationVariables { get; set; }
public IActionPanel ActionPanelControl { get; set; }
public ILanguageTranslater LanguageTranslater { get; set; }
public IPluginContainer PluginContainer { get; set; }
}
}