Table of Contents

Projekt, Manifest und Paket

Ein Modul besteht aus einer .NET-Klassenbibliothek und einer manifest.json. Seine Funktionen definieren Sie über Modulklassen, Actions, Trigger und UI-Bausteine.

Projektdatei konfigurieren

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- net10.0 ist der Normalfall; net10.0-windows nur, wenn die COM-Verbindung genutzt wird -->
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="BpNexT.Actions.Sdk" Version="*" />
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

  <ItemGroup>
    <None Include="manifest.json" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

</Project>

Version="*" übernimmt die jeweils verfügbare SDK-Version. Für reproduzierbare Builds können Sie eine konkrete, mit Ihrer Runtime kompatible Version festlegen.

Die Frameworkreferenz stellt unter anderem Logging- und DI-Typen bereit. Wenn Sie generierte COM-Datensatztypen wie Artikel verwenden, benötigen Sie zusätzlich die zur Runtime passende, separat bereitgestellte BpNexT.NET.Models.dll. Für eine Kopie im Projektordner lib ergänzen Sie:

<ItemGroup>
  <Reference Include="BpNexT.NET.Models">
    <HintPath>lib/BpNexT.NET.Models.dll</HintPath>
    <Private>false</Private>
  </Reference>
</ItemGroup>

Die Runtime stellt die Modellassembly zur Ausführung zentral bereit; Private=false verhindert das Kopieren als private Modulabhängigkeit. GraphQL-Datensatztypen stammen entsprechend aus BpNexT.NET.Models.GraphQL.dll.

Behalten Sie im Vorlagenprojekt den Build-Target zur Erzeugung des Debugprofils bei.

Verwenden Sie net10.0-windows für COM-Module mit IBpSession und net10.0 für plattformunabhängige GraphQL-Module mit IBpQlSession. Bestehende Module mit net8.0 oder net8.0-windows laufen unverändert weiter. Ändern Sie das Zielframework in Projektdatei und Manifest gemeinsam.

Manifest definieren

Die Datei manifest.json liegt neben der Projektdatei und enthält die Identität sowie die technischen Eckdaten des Moduls:

{
  "id": "meinefirma.lagerbuchung",
  "name": "Lagerbuchung",
  "version": "1.0.0",
  "author": "Meine Firma",
  "description": "Bucht Bestände in Lager ein.",
  "entryAssembly": "Meinefirma.Lagerbuchung.dll",
  "targetFramework": "net10.0"
}
Feld Bedeutung
id Dauerhafte Kennung im Format hersteller.modulname
name Anzeigename in Studio und Portal. Muss ModuleName der Modulklasse entsprechen.
version Paketversion. Muss ModuleVersion der Modulklasse entsprechen.
entryAssembly Dateiname der gebauten Assembly.
targetFramework Zielframework der Assembly.

Halten Sie Name und Version im Manifest und in der Modulklasse übereinstimmend. Erhöhen Sie bei einer Veröffentlichung die Version an beiden Stellen.

Behalten Sie die id bei Updates bei. Eine andere ID bezeichnet ein neues Modul.

Modulmetadaten im Code definieren

Definieren Sie die Metadaten der BpModule-Klasse als konstante Property-Overrides:

public sealed class LagerModule(
    IBpSession session,
    AutomationContext context,
    ILogger<LagerModule> logger) : BpModule
{
    public override string ModuleName => "Lagerbuchung";

    public override string ModuleVersion => "1.0.1";

    public override string ModuleAuthor => "Meine Firma";

    public override string ModuleDescription => "Bucht Bestände in Lager ein, zwischen Lagern um und aus Lagern aus.";
}

Modul mit F5 debuggen

Die Projektvorlage erzeugt beim ersten Build ein Launchprofil, das die installierte Runtime startet und das Projekt aus seinem Build-Ausgabeverzeichnis als Dev-Modul lädt. Ein entsprechendes Profil sieht so aus:

{
  "profiles": {
    "BpNexT.NET Runtime (debug this module)": {
      "commandName": "Executable",
      "executablePath": "C:/Program Files/BpNexT/Runtime/BpNexT.Runtime.Host.exe",
      "commandLineArgs": "run --dev-module \"C:/Projekte/Meinefirma.Lagerbuchung\"",
      "workingDirectory": "C:/Program Files/BpNexT/Runtime"
    }
  }
}

Studio zeigt das Entwicklungsmodul unter Pakete mit dem Kennzeichen dev.

Installationspaket erstellen

Erstellen Sie mit dotnet build -c Release einen Release-Build. Laden Sie die Moduldateien in Studio unter Builder hoch, erzeugen Sie das .bpnpkg-Paket und installieren Sie es unter Pakete in Studio.

Optionale .pdb-Dateien ergänzen Stacktraces um Dateinamen und Zeilennummern. Updates mit derselben Modul-ID ersetzen die vorherige Version; die Historie bleibt erhalten.

Ladeprüfungen verstehen

Prüfen Sie bei einem Ladefehler die Meldung in Studio. Häufige Ursachen sind:

Bereich Prüfen
Metadaten Stimmen Name und Version in Manifest und Modulklasse überein?
Action-IDs Hat jede Action eine eigene ID?
Webhook-Namen Sind die Namen eindeutig und ohne Großbuchstaben oder Leerzeichen?
Änderungstrigger Sind [OnChanged] und ChangedSet<T> gemeinsam angegeben?
Dependency Injection Passen die Lebensdauern der registrierten Dienste zusammen?
Lizenz Ist für HTTP-Endpunkte das Addon Integrationen vorhanden?

Die letzten beiden Punkte sind ausführlicher beschrieben in Dependency Injection und Integrationen.