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

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; }
    }
}