次の方法で共有


POS を新しいハードウェア デバイスと統合し、拡張機能インストーラーを生成

この記事では、POS (POS) を新しいハードウェア デバイスと統合し、Microsoft Dynamics 365 Commerce で拡張機能インストーラーを生成する方法について説明します。

Hardware Station の概要

最新の POS とクラウド POS では、ハードウェア ステーションを使用して、プリンター、キャッシュ ドロワー、スキャナー、支払いターミナルなどのハードウェア周辺機器に接続します。

ローカルハードウェアステーションアーキテクチャの図。

共有ハードウェア ステーション アーキテクチャの図。

Hardware Station 設定

開始する前に、「 リテール ハードウェア ステーションの構成とインストール 」の情報を使用して、ハードウェア ステーションをインストールします。 この記事は、ハードウェアの内容とインストール方法を理解するのにも役立ちます。

Hardware Station アーキテクチャ

ハードウェア ステーションは、ハードウェア ステーション アプリケーション プログラミング インターフェイス (API) 用の Web API を公開します。 ハードウェア ステーションを拡張するには、新しいデバイスの新しいコントローラー (キャッシュ ディスペンサーなど) を実装するか、既存のデバイスの種類 (たとえば、新しい Audio Jack 磁気ストライプ リーダー (MSR) 実装) の既存のコントローラーをオーバーライドします。

ハードウェア ステーションのアーキテクチャの図。

Hardware Station 拡張性シナリオ

.NET でサポートされている Managed Extensibility Framework (MEF) を使用して、ハードウェア ステーションを拡張できます。 拡張性の規定: 拡張機能は常に、自身の拡張機能アセンブリに記述します。 この方法を使用すると、真の拡張機能を作成し、アップグレードをはるかに簡単にします。 拡張機能には、次の 2 つの基本的なシナリオがあります。

  • 新しいデバイスを追加する - 最初から用意されているハードウェア ステーションはデバイス (現金自動支払機など) をまだサポートしていません。 したがって、ハードウェア ステーションで新しいデバイスのサポートを追加する必要があります。
  • 既存のデバイスに対する新しいデバイス タイプを追加する - 最初から用意されているハードウェア ステーションの実装ではすでにデバイス (MSR など) がサポートされていますが、特定のデバイス タイプ (オーディオ ジャック MSR 実装) のサポートを追加する必要があります。

POS からハードウェア ステーション API を呼び出すには、要求と応答を使用する必要があります。

  • HardwareStationDeviceActionRequest – POS がハードウェア ステーションに送信する要求。
  • HardwareStationDeviceActionResponse – ハードウェア ステーションから POS が受信した要求。

拡張するクラスは、使用している Retail ソフトウェア開発キット (SDK) のバージョンによって異なります。

  • Retail SDK バージョン 10.0.11 以降の場合は、 IController インターフェイスを拡張します。

HardwareStationDeviceActionRequest

次のコード例は、HardwareStationDeviceActionRequest の定義を示します。

class HardwareStationDeviceActionRequest<TResponse extends HardwareStationDeviceActionResponse> extends Request<TResponse> {
    readonly device: string;
    readonly action: string;
    readonly actionData: any;
    constructor(device: string, action: string, actionData: any, correlationId?: string);
}

次の表では、パラメーターについて説明します。

パラメーター データ タイプ 内容
デバイス 文字列 ハードウェア ステーション要求に渡すデバイス名は、ハードウェア ステーション デバイス拡張コントローラー クラスに追加する エクスポート 属性と一致する必要があります。
アクション 文字列 ハードウェア ステーション拡張機能で呼び出すメソッド。 メソッド名を文字列値として渡します。 コア POS ハードウェア ステーション レイヤーは、ハードウェア ステーション拡張コードから対応するメソッドを呼び出します。 このメソッドは、ハードウェア ステーション拡張機能のメソッド名と完全に一致する必要があります。 パラメーターとしてハードウェア ステーション拡張機能を渡します。
actionData いずれか 拡張機能を渡すためのカスタム パラメーター。

サンプル コード

次のコードの例は、HardwareStationDeviceActionRequest オブジェクトを作成します。

let hardwareStationDeviceActionRequest: HardwareStationDeviceActionRequest<HardwareStationDeviceActionResponse> =
    new HardwareStationDeviceActionRequest("Export attribute in Hardware station controller class",
        "extension method name in Hardware station", "Custom parameters/you can also pass custom object");
return this.extensionContextRuntime.executeAsync(hardwareStationDeviceActionRequest);

HardwareStationDeviceActionResponse

次のコード例は、HardwareStationDeviceActionResponse の定義を示します。

class HardwareStationDeviceActionResponse extends Response {
    readonly response: any;
    constructor(response: any);
}

次の表では、パラメーターについて説明します。

パラメーター データ タイプ 内容
応答 いずれか ハードウェア ステーション拡張コードが POS に送信する応答。

エンド ツー エンド フロー

次の図は、POS、ハードウェア ステーション、およびハードウェア デバイス間のフローを示しています。

POS、ハードウェア ステーション、ハードウェア デバイス間のエンド ツー エンド フローの図。

ハードウェア ステーション拡張機能

新しいハードウェア デバイスを呼び出すには、ハードウェア ステーション コードを実装する必要があります。 そのコードからハードウェア デバイスを呼び出します。

Retail SDK バージョン 10.0.11 以降のハードウェア ステーション拡張機能を実装するには、次の手順に従います。

  1. Microsoft .NET Framework バージョン 4.6.1を使用して、新しい C# クラス ライブラリ プロジェクトを作成します。 または、Retail SDK に含まれているサンプルのいずれかをテンプレートとして使用します。 (サンプルは ...\RetailSDK\SampleExtensions\HardwareStation\にあります)。テンプレートとしてサンプルを使用します。

  2. 拡張機能プロジェクトで、NuGet パッケージ マネージャーを使用して、Microsoft.Dynamics.Commerce.Hosting.Contracts パッケージを追加します。 NuGet パッケージは、RetailSDK\pkgs フォルダで見つけることができます。

  3. IController インターフェイスを拡張する新しいコントローラ クラスを追加します。

  4. コントローラ クラスをクライアントに公開するには、コントローラ クラスに RoutePrefix 属性を追加します。

    [RoutePrefix("ISVEXTENSIONDEVICE")]
    
  5. ハードウェア デバイスを呼び出すカスタム ロジックを実装するには、 HttpPost 属性を持つメソッドをコントローラー クラスに追加します。 このメソッドを 2 番目のパラメーター (アクション パラメーター) として POS HardwareStationDeviceActionRequest に渡します。 拡張機能メソッドから、この拡張機能では、印刷やキャッシュ ドロワー要求などの他の要求を呼び出すことができます。 Retail SDK から関連する NuGet パッケージのみを含めます。

    [HttpPost]
    public async Task<bool> IsReady(IEndpointContext context)
    {
    }
    
  6. プロジェクトを構築します。

バージョン 10.0.11 より前の Retail SDK バージョンのハードウェア ステーション拡張機能を実装するには、次の手順に従います。

  1. 新しい C# クラス ライブラリ プロジェクトの作成
  2. HardwareStationControllerIHardwareStationController を拡張する新しいコントローラー クラスを追加します。
  3. コントローラー クラスにエクスポート属性を追加します。 エクスポート属性は、すべて大文字で指定する必要があり、値をパラメーターとして POS 拡張機能から渡す必要があります。 POS HardwareStationDeviceActionRequest が渡すデバイス パラメーターは、この値と一致する必要があります。
  4. ハードウェア デバイスを呼び出すためのカスタム ロジックを実装するために、メソッドをコントローラ クラスに追加します。 このメソッドを 2 番目のパラメーター (アクション パラメーター) として POS HardwareStationDeviceActionRequest に渡します。
  5. プロジェクトを構築します。

Modern POS でハードウェア ステーション拡張機能を展開し、ローカルのハードウェア ステーションを使用してテストするには、次の手順に従います。

  1. 出力ライブラリを C:\Program Files (x86)\Microsoft Dynamics 365\70\Retail Modern POS\ClientBroker\ext フォルダーにコピーします。

  2. HardwareStation.Extension.config ファイルを開きます。

  3. 合成 セクションで、拡張機能ライブラリの詳細を追加します。

    <add source="assembly" value="your extension library name" />
    
  4. ファイル保存します。

  5. 現在実行中の場合は、Modern POS を閉じます。

  6. タスク マネージャーを開いて、dllhost.exe タスクを終了します。

  7. Modern POS を開いて、ローカル ハードウェア ステーションを使用するように構成します。

  8. シナリオを検証します。

Cloud POS を使用してテストするには、ハードウェア ステーション拡張機能のダイナミクス リンク ライブラリ (DLL) を、共有ハードウェア ステーションの ext フォルダに配置します。 次に、共有ハードウェア ステーション フォルダのカスタム ライブラリを使用して、HardwareStation.Extension.config ファイルを更新します。

Retail SDK サンプル

Retail SDK には、参照に使用できるサンプルが含まれています。

  • POS: \RetailSDK\POS\Extensions\FiscalRegisterSample
  • ハードウェア ステーション: \RetailSDK\SampleExtensions\HardwareStation\Extension.FiscalRegisterSample

Retail SDK バージョン 10.0.11 以降のサンプル コード

namespace Contoso
{
    namespace Commerce.HardwareStation.ISVExtensionDevice
    {
        using Microsoft.Dynamics.Commerce.Runtime.Hosting.Contracts;
        using System;
        using System.Threading.Tasks;

        /// <summary>;
        /// Sample hardware station extension
        /// </summary>

        [RoutePrefix("ISVEXTENSIONDEVICE")]
        public class ISVExtensionDeviceController : IController
        {
            /// <summary>
            /// Sample.
            /// </summary>

            /// <param name="request">Custom request.<param>
            /// <returns>Result of Custom response.</returns>

            [HttpPost]
            public async Task<CustomResponse> Sample(CustomRequest request, IEndpointContext context)
            {
                CustomResponse response;
                try
                {
                    response = new CustomResponse();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return await Task.FromResult(response);
            }
        }
        public class CustomResponse
        {
            public string sampleProp { get; set; }
            public CustomResponse()
            {
                this.sampleProp = "sampleValue";
            }
        }
    }
}

ハードウェア ステーション拡張機能を呼び出すためのサンプル POS コード

POS 拡張機能から、次のパターンを使用してハードウェア ステーションを呼び出します。

let hardwareStationDeviceActionRequest: HardwareStationDeviceActionRequest<HardwareStationDeviceActionResponse> =
    new HardwareStationDeviceActionRequest("ISVEXTENSIONDEVICE",
        "Sample", "Custom parameters or custom object");
return this.extensionContextRuntime.executeAsync(hardwareStationDeviceActionRequest);

メモ

独立した POS パッケージ SDK または封印された HWS インストーラーを使用していない場合は、「 配置可能なパッケージを作成 する」の手順に従って、展開用のパッケージを生成します。

ローカル HWS を使用するには、HWS 拡張機能を Modern POS にパッケージ化する

メモ

このセクションは、バージョン 10.0.22 以降の財務および運用アプリで POS 独立パッケージ SDK を使用している場合に適用されます。

ローカル HWS を使用するように HWS 拡張機能を Modern POS にパッケージ化するには、HWS 拡張機能を POS と共にパッケージ化します。 Modern POS JavaScript プロジェクトで、HWS プロジェクトへの参照を追加します。 次に、POS インストーラー プロジェクトを使用して拡張機能インストーラーを作成します。 詳細については、Dynamics365Commerce.InStore/src/PosSample/ModernPos/ModernPos.jsproj GitHub リポジトリ で、サンプル JavaScript プロジェクトを参照してください。

HWS 拡張機能しかない場合は、サンプルから他の不要なプロジェクト参照をすべて削除してください。 ModernPos.jsproj プロジェクトは、msix インストーラーを作成し、インストーラ プロジェクトで消費して、exe インストーラーを作成します。 HWS 拡張機能は、UWP アプリ拡張機能として展開されます。

ハードウェア ステーションの拡張機能インストーラーの生成

Dynamics 365 Commerce 10.0.18 以降では、シールド インストーラーがサポートされます。 基本インストーラーとは別に拡張機能インストーラーを生成できます。 拡張機能インストーラーを個別にインストールしてサービスを提供できます。 この機能は、 封印されたセルフサービス インストーラーを使用する場合にのみ機能します。

ハードウェア ステーションのシールド拡張機能インストーラーを生成するには、次の手順に従います。

  1. GitHub からサンプル ハードウェア ステーション インストーラー プロジェクトをダウンロードして、Visual Studio で HardwareStation.Installer.csproj プロジェクトを開きます。

  2. ハードウェア ステーション拡張機能プロジェクトを、プロジェクト参照として HardwareStation.Installer.csproj インストーラー プロジェクトに追加します。 既存のサンプルのプロジェクト参照を HardwareStation.Installer.csproj プロジェクトから削除します。

    インストーラー プロジェクトは、Microsoft.Dynamics.Commerce.Sdk.Installers.HardwareStation パッケージを使用して拡張機能インストーラーを生成します。 サンプル インストーラー プロジェクト クラスでは ExtensionPackageInstallerSetup クラスが拡張され、インストール手順が実装されます。

  3. インストーラー名を更新するには、サンプル コードの InstallerName 変数を設定します。

  4. インストール中に追加のロジックを実行するようにサンプル インストーラー プロジェクトを更新します。 たとえば、サーバーに対して ping を実行できます。 ロジックを追加するには、HardwareStation.Installer.csprojHardwareStationExtensionPackageInstallerSetup.cs ファイルを使用します。

  5. IExtensionInstallerStep インターフェイスを実装して、インストーラーに事前ステップと事後ステップを追加します。 TestExtensionInstallerPreInstallStep.cs ファイル、および HardwareStation.Installer.csproj サンプル インストーラー プロジェクトの TestExtensionInstallerPostInstallStep.cs を使用して、ステップを追加します。

  6. 拡張機能 HardwareStation.Installer.csproj プロジェクトを構築して、共有ハードウェア ステーション拡張機能インストーラーを生成します。 プロジェクトの出力は、拡張機能インストーラーです。 生成された拡張機能インストーラーのパスは、ビルドの完了後に Visual Studio の [出力] ウィンドウで確認できます。

  7. 販売時点管理 (POS) 用の共有ハードウェア ステーション拡張機能を配置し、シナリオでテストします。

    メモ

    拡張インストーラーを実行する前に、封印された共有ハードウェア サーバー インストーラーをインストールする必要があります。

  8. コマンド プロンプトを使用して拡張機能インストーラーを実行します。 管理者モードでコマンド プロンプトを開き、install パラメーターを指定してインストーラーを実行します。 アンインストールするには、uninstall パラメーターを使用して拡張機能インストーラーを実行します。 例:

    C:\HardwareStation.Installer\bin\Debug\net461> .\HardwareStation.Installer.exe install
    
  9. 現在実行中の場合は、POS を閉じます。

  10. POS を開いて、共有ハードウェア ステーションを使用するように構成します。

  11. 拡張機能ハードウェア ステーションのシナリオを検証します。