Skip to main content

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.

api-folder_thumb_480_0.png

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

NameTypBeschreibungAutomatisch gesetzt
TitlestringTitel laut Action-KonfigurationJa
ArgumentstringArgument laut Action-KonfigurationJa
SelectedComputersObservableCollection<IComputerItem>Hier werden alle zur Laufzeit ausgewählten Computer aufgelistetJa
IsSingletonboolSingleton laut Action-KonfigurationJa
ApplicationVariablesIApplicationVariablesPluginvariablen aus der Datenbank, hierüber können auch Werte modifiziert werdenJa
ActionPanelControlIActionPanelZugriff auf diverse Funktionen des SCCM Managers und auf den WebServiceJa
LanguageTranslaterILanguageTranslaterZugriff auf die Sprachenübersetzungen des PluginsJa
PluginContainerIPluginContainer
Ja
SelectedComputerTypeSelectedComputerType (Enum)
Nein
SingletonBehaviorSingletonBehavior (Enum)Verhalten, wenn das Plugin ein zweites Mal gestartet wird und dessen Singleton-Eigenschaft aktiviert istNein
PluginTypePluginTypes (Enum)Art des Plugins. Mögliche Werte:Nein
ContentControlUserControlUserControl, das im SCCM Manager als Oberfläche angezeigt werden soll, wenn es sich bei der Pluginart um ein UserControl-Plugin handeltNein
NameRückgabe-TypÜbergabeparameterBeschreibung
Initializebool
Initialisierung des Plugins.
OnApplicationExitvoid
Event wenn der SCCM Manager beendet wird.
UpdateArgumentvoidstring argument Wenn ein Plugin ein zweites Mal als Singleton gestartet wurde, wird diese Methode aufgerufen.
InvokeFunctionboolstring 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; }
    }
}