Zum Inhalt springen

OmniSeller:PlugIn Entwicklung: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Korrekturlauf Teil 2: Markup-Reste, abgebrochene Saetze und Doppelungen bereinigt
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:Omniseller plugin c.png|300px|thumb]]
<h1>OmniSeller PlugIn Entwicklung</h1>
<h1>OmniSeller PlugIn Entwicklung</h1>
<h2>Überblick</h2>
<h2>Überblick</h2>
<p>Der OmniSeller DataService bietet die Möglichkeit, externe Logik über PlugIns zu integrieren. PlugIns können entwickelt werden,
<p>Der OmniSeller DataService bietet die Möglichkeit, externe Logik über PlugIns zu integrieren. PlugIns können entwickelt werden, um spezifische Geschäftsanforderungen zu erfüllen, beispielsweise das Anpassen von Produktdaten vor dem Upload oder das Modifizieren von Preisen basierend auf bestimmten Kriterien.</p>
um spezifische Geschäftsanforderungen zu erfüllen, beispielsweise das Anpassen von Produktdaten vor dem Upload oder das
<p>OmniSeller PlugIns basieren auf <b>.NET Standard 2.0</b>, um sowohl mit alten (.NET Framework 4.7.2) als auch mit neuen (.NET 6.0) Service-Versionen kompatibel zu sein.</p>
Modifizieren von Preisen basierend auf bestimmten Kriterien.</p>
<p>OmniSeller PlugIns basieren auf <b>.NET Standard 2.0</b>, um sowohl mit alten (.NET Framework 4.7.2) als auch mit neuen
(.NET 6.0) Service-Versionen kompatibel zu sein.</p>
<h2>Voraussetzungen</h2>
<h2>Voraussetzungen</h2>
<ul>
<ul>
Zeile 15: Zeile 13:
     <li><b>Abhängigkeiten:</b>
     <li><b>Abhängigkeiten:</b>
         <ul>
         <ul>
             <li>OmniSeller.Common und OmniSeller.Enums aus dem HTK NuGet Repository: <code>https://htkpackages/repository/</code></li>
             <li>OmniSeller.Common und OmniSeller.Enums aus dem HTK NuGet Repository HTKPackages</li>
</ul></li>
</ul></li>
     <li><b>Nützliche Schnittstellen und Modelle:</b>
     <li><b>Nützliche Schnittstellen und Modelle:</b>
Zeile 81: Zeile 79:
<h3>1. Projekt einrichten</h3>
<h3>1. Projekt einrichten</h3>
<ul>
<ul>
     <li>Erstelle ein neues <b>.NET Standard 2.0</b> Class Library-Projekt in Visual Studio</li>
     <li>Erstellen Sie ein neues <b>.NET Standard 2.0</b> Class Library-Projekt in Visual Studio</li>
     <li>Füge die folgenden Pakete über das HTK NuGet Repository hinzu:</li>
     <li>Fügen Sie die folgenden Pakete über das HTK NuGet Repository hinzu:</li>
<pre>
<pre>
OmniSeller.Common
OmniSeller.Common
Zeile 89: Zeile 87:
<h3>2. PlugIn-Logik implementieren</h3>
<h3>2. PlugIn-Logik implementieren</h3>
<ul>
<ul>
     <li>Implementiere die Schnittstelle <code>IEntryPointPlugin</code>.</li>
     <li>Implementieren Sie die Schnittstelle <code>IEntryPointPlugin</code>.</li>
     <li>Definiere die unterstützten <code>EntryPoints</code> und <code>ShopTypes</code>.</li>
     <li>Definieren Sie die unterstützten <code>EntryPoints</code> und <code>ShopTypes</code>.</li>
     <li>Implementiere die Logik in der Methode <code>Call</code>.</li>
     <li>Implementieren Sie die Logik in der Methode <code>Call</code>.</li>
</ul>
</ul>
<h3>3. PlugIn erstellen und veröffentlichen</h3>
<h3>3. PlugIn erstellen und veröffentlichen</h3>
<ul>
<ul>
     <li>Kompiliere das Projekt.</li>
     <li>Kompilieren Sie das Projekt.</li>
     <li>Die resultierende <code>.dll</code>-Datei (zusammen mit ihren Abhängigkeiten) wird in das OmniSeller PlugIn-Verzeichnis kopiert:</li>
     <li>Die resultierende <code>.dll</code>-Datei (zusammen mit ihren Abhängigkeiten) wird in das OmniSeller PlugIn-Verzeichnis kopiert:</li>
<pre>C:\OmniVersum\Apps\OmniSellerService2\PlugIns</pre></ul>
<pre>C:\OmniVersum\Apps\OmniSellerService2\PlugIns</pre></ul>
<h3>4. PlugIn testen</h3>
<h3>4. PlugIn testen</h3>
<ul>
<ul>
     <li>Starte den OmniSeller DataService und beobachte die Logs.</li>
     <li>Starten Sie den OmniSeller DataService und beobachten Sie die Logs.</li>
     <li>Das PlugIn wird automatisch geladen und ausgeführt, wenn der entsprechende <code>EntryPoint</code> erreicht wird.</li>
     <li>Das PlugIn wird automatisch geladen und ausgeführt, wenn der entsprechende <code>EntryPoint</code> erreicht wird.</li>
</ul>
</ul>
<h2>EntryPoints und deren Bedeutung</h2>
<h2>EntryPoints und deren Bedeutung</h2>


{| border="1"  
{| border="1"
|-  
|-  
! | EntryPoint
! | EntryPoint
! | Beschreibung
! | Beschreibung
|-  
|-  
| | PORTAL_STARTUP
| | PORTAL_STARTUP
| | Wird beim Start eines Portals ausgeführt.
| | Wird beim Start einer Portalwarteschlange ausgeführt (einmalig).
|-  
|-  
| | PRODUCT_BEFORE_UPLOAD
| | PRODUCT_BEFORE_UPLOAD
| | Vor dem Produkt-Upload.
| | Vor dem Produkt-Upload.
|-  
|-  
| | PRODUCT_AFTER_UPLOAD
| | PRODUCT_AFTER_UPLOAD
| | Nach dem Produkt-Upload.
| | Nach dem Produkt-Upload.
|-  
|-  
| | PRICE_BEFORE_UPLOAD
| | STOCK_BEFORE_UPLOAD
| | Vor dem Preis-Upload.
| | Vor dem Preis-Upload.
|-  
|-  
| | PRICE_AFTER_UPLOAD
| | STOCK_AFTER_UPLOAD
| | Nach dem Preis-Upload.
| | Nach dem Preis-Upload.
|-  
|-  
| | ORDER_AFTER_DOWNLOAD
| | ORDER_AFTER_DOWNLOAD
| | Nach dem Herunterladen einer Bestellung.
| | Nach dem Herunterladen einer Bestellung.
|}
|}


<h2>Best Practices für PlugIns</h2>
<h2>Best Practices für PlugIns</h2>
<ul>
<ul>
     <li><b>Vermeide lange Blockaden:</b>
     <li><b>Vermeiden Sie lange Blockaden:</b>
         <ul>
         <ul>
             <li>Die Methode <code>Call</code> sollte möglichst schnell ausgeführt werden, um Verzögerungen im DataService zu vermeiden.</li>
             <li>Die Methode <code>Call</code> sollte möglichst schnell ausgeführt werden, um Verzögerungen im DataService zu vermeiden.</li>
Zeile 137: Zeile 135:
     <li><b>Fehlerbehandlung:</b>
     <li><b>Fehlerbehandlung:</b>
         <ul>
         <ul>
             <li>Verwende <code>try-catch</code>, um Laufzeitfehler zu verhindern, die den gesamten Service beeinflussen könnten.</li>
             <li>Verwenden Sie <code>try-catch</code>, um Laufzeitfehler zu verhindern, die den gesamten Service beeinflussen könnten.</li>
</ul></li>
</ul></li>
     <li><b>Testumgebung nutzen:</b>
     <li><b>Testumgebung nutzen:</b>
         <ul>
         <ul>
             <li>Teste das PlugIn in einer Entwicklungs- oder Staging-Umgebung, bevor es in die Produktion übernommen wird.</li>
             <li>Testen Sie das PlugIn in einer Entwicklungs- oder Staging-Umgebung, bevor es in die Produktion übernommen wird.</li>
</ul></li>
</ul></li>
     <li><b>Log-Ausgaben:</b>
     <li><b>Log-Ausgaben:</b>
         <ul>
         <ul>
             <li>Nutze <code>Console.WriteLine</code>, um wichtige Informationen und Debug-Daten während der PlugIn-Ausführung zu loggen.</li>
             <li>Nutzen Sie <code>Console.WriteLine</code>, um wichtige Informationen und Debug-Daten während der PlugIn-Ausführung zu loggen.</li>
</ul></li>
</ul></li>
</ul>
</ul>
Zeile 161: Zeile 159:
     <li><b>PlugIn wird nicht geladen:</b>
     <li><b>PlugIn wird nicht geladen:</b>
         <ul>
         <ul>
             <li>Überprüfe, ob die <code>IEntryPointPlugin</code>-Schnittstelle korrekt implementiert wurde.</li>
             <li>Überprüfen Sie, ob die <code>IEntryPointPlugin</code>-Schnittstelle korrekt implementiert wurde.</li>
             <li>Stelle sicher, dass alle Abhängigkeiten (z. B. <code>OmniSeller.Common</code>) verfügbar sind.</li>
             <li>Stellen Sie sicher, dass alle Abhängigkeiten (z. B. <code>OmniSeller.Common</code>) verfügbar sind.</li>
</ul></li>
</ul></li>
     <li><b>Assembly-Version inkompatibel:</b>
     <li><b>Assembly-Version inkompatibel:</b>
         <ul>
         <ul>
             <li>Stelle sicher, dass die Hauptanwendung und das PlugIn dieselben Versionen von <code>OmniSeller.Common</code> verwenden.</li>
             <li>Stellen Sie sicher, dass die Hauptanwendung und das PlugIn dieselben Versionen von <code>OmniSeller.Common</code> verwenden.</li>
</ul></li>
</ul></li>
     <li><b>Kein <code>EntryPoint</code> aktiviert:</b>
     <li><b>Kein <code>EntryPoint</code> aktiviert:</b>
         <ul>
         <ul>
             <li>Prüfe, ob der EntryPoint des PlugIns (<code>SupportedEntryPoints</code>) mit dem vom Service ausgelösten EntryPoint übereinstimmt.</li>
             <li>Prüfen Sie, ob der EntryPoint des PlugIns (<code>SupportedEntryPoints</code>) mit dem vom Service ausgelösten EntryPoint übereinstimmt.<br><br><br></li>
</ul></li>
</ul></li>
</ul>
</ul>
<h1>Hinweis zur PlugIn-Entwicklung</h1>
<p>Die Möglichkeit, individuelle PlugIns für den OmniSeller DataService zu erstellen, bietet eine flexible und maßgeschneiderte Lösung für spezifische Kundenanforderungen. Bitte beachten Sie jedoch:</p>
<ul>
    <li><b>Die Entwicklung von PlugIns ist nicht Bestandteil unserer regulären Pakete, einschließlich des Enterprise-Pakets.</b></li>
    <li><b>Eine PlugIn-Entwicklung erfordert immer eine gesonderte Absprache mit HTK.</b></li>
</ul>
<p>PlugIns ermöglichen Anpassungen, die über den Standardumfang hinausgehen. Sie sind ideal, um individuelle Geschäftsprozesse oder spezielle Anforderungen abzubilden, erfordern jedoch eine präzise Abstimmung zwischen Ihnen und unserem Entwicklungsteam.</p>
<h2>Was bedeutet das für Sie?</h2>
<ul>
    <li><b>Keine Standardfunktion:</b> Die PlugIn-Entwicklung ist eine Zusatzleistung und nicht automatisch im Lieferumfang unserer OmniSeller-Pakete enthalten (auch nicht im Enterprise Paket).</li>
    <li><b>Gesonderte Kosten:</b> Jede PlugIn-Entwicklung wird individuell kalkuliert und als separate Leistung abgerechnet.</li>
    <li><b>Kundenspezifische Lösung:</b> PlugIns werden speziell für Ihre Anforderungen erstellt und sind nicht universell einsetzbar.</li>
</ul>
<p>Wenn Sie Interesse an der Entwicklung eines PlugIns haben, kontaktieren Sie bitte Ihren Ansprechpartner bei HTK. Wir freuen uns darauf, Ihre Anforderungen zu besprechen und Ihnen eine passende Lösung anzubieten.</p>
<p>
    <i>HTK behält sich das Recht vor, PlugIn-Anfragen zu prüfen und gegebenenfalls abzulehnen, falls diese nicht mit den technischen oder geschäftlichen Rahmenbedingungen vereinbar sind.</i></p>