Table of Contents

3.5.4. Webサービスを使ったDynamics NAVからのデータ取得方法

このガイドを利用してデータをインポートするには、NAV 開発ライセンスとMicrosoft Dynamics NAV 2013以上が必要です。そのようなライセンスがない場合や古いバージョンの場合、Dynamics NAV 接続を利用して、新規プロジェクトを作成できます。

メニューのファイル > 新規 > Dynamics NAV 接続を開き、Dynamics NAV 接続ダイアログを開きます。

認証 セクションにて、NAVを開始する権限のあるWindowsユーザー情報を入力します。

In the URLs セクションにて、4つのNAV WebサービスのURLをセットアップが必要です。最初の3つは、下記の次の情報を提供が必要です。:

さらに、上記の最後の項目は、NAV(購入オーダー作成 サービス)にて購入オーダーの作成が目的です。Webサービスの作成方法の説明は、次に記載してあります。

設定セクションでは、次から開始パラメータを利用して、インポートデータの集計やインポートの限定ができます。

最初の3つのサービスはNAVからデータを読み込みます。最後の1つのサービス(購入オーダー作成)は、NAVにデータを書き込みます。各読み込みサービスはSQLSQL クエリの結果を返し、アプリケーションがこれらのデータを読み込みます。GMDH Streamlineにデータをインポートするには、データベース 接続機能を利用します。そのため、インポート可能となるデータはデータベース 接続機能にて取得できるデータに制限されます。

読み込みサービスの作成を考えます。

読み込みサービスの作成

読み込みサービスを作成するには、次が必要です。:

  1. SQL クエリの結果を返すビューの作成
  2. SQL クエリの結果を保持するNAVテーブルの作成
  3. テーブルを表示するNAVページの作成
  4. ページをWebサービスとして公開

入荷オーダーサービスの作成を考えます。他のサービスは、同じ方法で作成できます。NAVに同梱されているCRONUS Company デモデータベースを利用し、説明します。

1 ビューの作成

最初に、 品目コード地点到着日数量 列を持つテーブルを返すSQLビューの作成が必要です。これを行うには、SQL Server Management Studioを起動し、ファイル > 新規 > 現在の接続でSQL クエリを選択し、SQL クエリを新規作成します。次のコードを新規に作成したSQL クエリファイルに貼り付けます。:

sales-orders.sql
USE [NAVDEMO]
GO
 
CREATE VIEW [dbo].[CRONUS International Ltd_$In Transition] AS
SELECT			
	i.No_ AS [Item Code],		
	'' AS Location,
	l.[Expected Receipt DATE] AS [Arrival DATE],		
	l.Quantity	
FROM dbo.[CRONUS International Ltd_$Purchase Line] l
INNER JOIN dbo.[CRONUS International Ltd_$Purchase Header] h
  ON h.[No_] = l.[Document No_]
INNER JOIN dbo.[CRONUS International Ltd_$Item] i
  ON l.No_ = i.No_
WHERE l.Quantity > 0 
  AND l.[Quantity Received] = 0
  AND l.Type = 2
  AND h.[Document TYPE] = 1 
GO

メニューのSQL クエリ > 実行をクリックし、オブジェクト エクスプローラにある ビューの中から、新規に作成されたビューを確認します。もし表示されていない場合、ビューを選択し、ビュー > 更新をクリックします。

2 Creating a table

2 テーブルの作成

ここでは、 入荷オーダービューに接続するNAV テーブルの作成が必要です。NAV 開発環境を起動し、ファイル > データベース > 開くを開き、サーバー名とデータベース名を入力し、認証にWindows 認証を設定します。OKをクリックします。

メニューのツール > オブジェクト デザイナーをクリックします。ウィンドウの左側にて、テーブル カテゴリを選択し、 新規ボタンをクリックします。

ここで、完全に同じ名前で、かつ入荷オーダービューのフィールドと互換性のあるデータタイプとして、新規テーブルの複数列の宣言が必要です。

次の空欄のフィールドにカーソルを設定後、メニューのビュー > プロパティをクリックします。テーブル プロパティ ウィンドウのリンクオブジェクトプロパティをはいに設定します。これは、入荷オーダービューとこのテーブルのリンクになります。

ウィンドウを閉じ、テーブルデザイナーウィンドウも閉じます。NAVは変更の保存を確認するため、はいをクリックします。名前を付けて保存ダイアログにて、テーブル ID名前を入力します。NAV のドキュメントの説明ではユーザー定義IDの範囲は[50,000-99,999]のため、この範囲内で利用されていない数値を選択します。テーブル名は、入荷オーダービューと同じ名前の必要があり、私たちの場合では、“Orders to receive”です。

OKをクリックします。これで、入荷オーダーテーブルが一覧に表示されました。

検証には、実行ボタンをクリックします。Dynamics NAV クライアントが起動し、別ウィンドウにて結果が表示されます。

3 ページの作成

NAVでは、ページSQL クエリまたはCodeUnitオブジェクトをWebサービスとして公開できます。私たちの場合、ページ入荷オーダー品目情報読み込みサービスの公開として利用し、SQL クエリ取引サービスとして利用します。それでは、入荷オーダーテーブルを表示するページを作成しましょう。

オブジェクト デザイナーウィンドウにて、 ページカテゴリを選択し、新規ボタンをクリックします。テーブルフィールドにて、新しいページにて表示したいテーブル名を入力します。私たちの場合、これは、Orders to receiveテーブルになります。ウィザードを利用してページを作成 オプションをクリックし、選択対象から一覧を選択します。OKをクリックします。

ページのすべてのフィールドを追加し、終了ボタンをクリックします。ページ デザイナーダイアログを閉じ、はいをクリックし、変更を保存します。ページIDを入力します(上記で説明した範囲から、利用されていないIDを選択します。)。名前を付けて保存ダイアログにて、ページ名を入力し、OKをクリックします。

すべてが完了すると、入荷オーダーページが一覧に表示されます。

4 Webサービスの公開

最後に、Webサービスとして作成したページを公開します。

NAV クライアントを実行し、部門 > 管理 > IT 管理 > 一般に進みます。Webサービス をクリックし、一覧 セクションにリンクします。

ツールバーの新規ボタンをクリックします。 新規 - Webサービス ウィンドウ内にて、最初の空の行にカーソルを合わせます。オブジェクト タイプ列のページを選択し、 オブジェクト ID列にページIDを入力します(私たちの場合、‘50002’)。サービス名列にサービス名を入力します(この名前は、WebサービスのURLの一部となります。)。公開済みチェックボックスにチェックを入れて、サービスを公開します。

Webサービスをテストするには、WebサービスとOData URL列のリンクを選択します。デフォルトブラウザで、URLを開きます。以下と似た結果が必要です。

<?xml version="1.0" encoding="utf-8"?>
<feed xml:base="http://localhost:7048/DynamicsNAV80/OData/"
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <id>http://localhost:7048/DynamicsNAV80/OData/Company('CRONUS%20International%20Ltd.')/InTransition</id>
  <title type="text">InTransition</title>
  <updated>2016-11-08T15:50:03Z</updated>
  <link rel="self" title="InTransition" href="InTransition" />
  <entry m:etag="W/&quot;'32%3BUsMAAAF7MQA4ADkANgAtAFMAAAAAAA%3D%3D1%3B00%3B'&quot;">
    <id>http://localhost:7048/DynamicsNAV80/OData/Company('CRONUS%20International%20Ltd.')/InTransition('1896-S')</id>
    <category term="NAV.InTransition" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <link rel="edit" title="InTransition" href="Company('CRONUS%20International%20Ltd.')/InTransition('1896-S')" />
    <title />
    <updated>2016-11-08T15:50:03Z</updated>
    <author>
      <name />
    </author>
    <content type="application/xml">
      <m:properties>
        <d:Item_Code>1896-S</d:Item_Code>
        <d:Location></d:Location>
        <d:Arrival_Date m:type="Edm.DateTime">2016-01-06T00:00:00</d:Arrival_Date>
        <d:Quantity m:type="Edm.Decimal">100</d:Quantity>
        <d:ETag>32;UsMAAAF7MQA4ADkANgAtAFMAAAAAAA==1;00;</d:ETag>
      </m:properties>
    </content>
  </entry>
  <entry m:etag="W/&quot;'32%3BUsMAAAF7MQA5ADAANgAtAFMAAAAAAA%3D%3D1%3B00%3B'&quot;">
    <id>http://localhost:7048/DynamicsNAV80/OData/Company('CRONUS%20International%20Ltd.')/InTransition('1906-S')</id>
    <category term="NAV.InTransition" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <link rel="edit" title="InTransition" href="Company('CRONUS%20International%20Ltd.')/InTransition('1906-S')" />
    <title />
    <updated>2016-11-08T15:50:03Z</updated>
    <author>
      <name />
    </author>
    <content type="application/xml">
      <m:properties>
        <d:Item_Code>1906-S</d:Item_Code>
        <d:Location></d:Location>
        <d:Arrival_Date m:type="Edm.DateTime">2016-02-03T00:00:00</d:Arrival_Date>
        <d:Quantity m:type="Edm.Decimal">50</d:Quantity>
        <d:ETag>32;UsMAAAF7MQA5ADAANgAtAFMAAAAAAA==1;00;</d:ETag>
      </m:properties>
    </content>
  </entry>

OKをクリックして、新規 - Webサービスウィンドウを閉じます。

私たちの例では、Dynamics NAV 接続ダイアログの入荷オーダー フィールドへのURLは、次となります。: http://localhost:7048/DynamicsNAV80/OData/Company('CRONUS%20International%20Ltd.')/OrdersToReceive

一般的には、localhostをNAV serverが稼働中のサーバーのIPアドレスに置き換えが必要です。

5 読み込みサービスのテーブル列の関連付け設定

GMDH Streamlineに読み込みサービスデータを正しく理解させるためには、サービスにて渡される各テーブル列の列タイプの正しい設定が必要です。設定には、NAV接続ダイアログの読み込みサービスリンクの近くのプレビューボタンをクリックします。SQL クエリ結果が下記のテーブルに表示されます。

各列ヘッダの下のコンボボックスをクリックし、ドロップダウンリストから最も適切なタイプを選択します。

品目情報サービスと入荷オーダーサービスについても、手順1から手順5を繰り返します。すべての 読み込みサービスにいてのSQLSQL クエリをダウンロードできます。: items.sql, transactions.sql, orders-to-receive.sql.

取引サービスについては、手順3では、ページを作成せず代わりに(下記で説明された)SQL クエリを作成します。

SQL クエリの作成

GMDH Streamlineでは、取引サービスは日付でソートされたのレコードが必要です。したがって、取引テーブルを日付でソートするSQL クエリを作成し、作成されたSQL クエリをWebサービスとして公開します。

オブジェクト デザイナーウィンドウのSQL クエリカテゴリに進み、新規ボタンをクリックします。品目タイプは、デフォルト(DataItem)のままにします。データソース列の許可をクリックし、表示された一覧から、取引テーブルを選択します。ここで、SQL クエリ内のテーブルのすべての列を追加します。追加するには、次の行のカーソルを次の行に設定し(品目タイプは自動的に‘‘に設定されます)、データソース列ないの矢印をクリックします。テーブルフィールドの1つを選択します。この作業を、SQL クエリで追加されたすべてのフィールドに繰り返します。

SQL クエリプロパティを開くには、SQL クエリダイアログの最終行にカーソルを合わせ、ビュー > プロパティを選択します。ここで並び替えプロパティの設定が必要です。列の右のボタンをクリックします。並び替えダイアログの方向を降順に設定します。その後、内の矢印をクリックします。一覧内から、日付フィールドを選択します。

OKをクリックして、並び替えダイアログを閉じます。クエリプロパティダイアログを閉じます。新規クエリダイアログを閉じます。ユーザー範囲内からIDを選択し入力します、さらに、‘Transactions’などの名前を入力し、最後にSQL クエリを保存します。

ここで、作成したSQL クエリが一覧に表示されます。検証するには、作成したSQL クエリを選択し、実行ボタンをクリックします。日付で並べられた取引テーブルが、別ウィンドウに表示されます。

Dynamics NAV 接続ダイアログの取引サービスへのリンクは、orderby パラメータが必要です。: "http://localhost:7048/DynamicsNAV80/OData/Company('CRONUS%20International%20Ltd.')/SalesHistory?&$orderby=Date desc"

書き込みサービスの作成

ここでは、NAVで新規購入オーダーを作成するWebサービスを作成します。2つの関数の作成が必要です。:1つ目は、指定されたベンダーコードにて並べられたオーダーを作成し、その数値を返す関数です。2つ目は、与えられたオーダー番号を利用して、購入オーダーに購入行を追加する関数です。購入行は、品目コードと品目数量にて記載されます。

NAV Codeunitsを利用して、作成します。NAV 開発環境を開き、左側のメニューよりCodeunitsを選択し、新規ボタンをクリックします。

最初に、これらの関数をCodeunitsとする宣言が必要です。宣言には、ビュー > C/AL グローバルをクリックします。C/AL グローバルウィンドウの関数タブをクリックします。これらを、createPurchaseOrdercreatePurchaseLineとして、名前を付けます。これら名前を一覧に入力します。

関数名のある行にカーソルを設定し、メニューのビュー > プロパティをクリックしたのち、ローカルプロパティをいいえにします。

ここで、入力パラメータと出力パラメータを追加し、関数の宣言を特定します。createPurchaseOrder関数の行にカーソルを合わせ、ローカルボタンをクリックします。

入力パラメータがパラメータ タブにて宣言されました。名前がVendorNoのパラメータを追加します。このデータタイプは、Codeです。

関数の戻り値は、OrderNoであり、データタイプは、Codeです。

関数の本体部分では、NAV PurchaseHeaderテーブルの行とリンクしたローカル変数を利用します。関数のローカル変数は、変数タブにて宣言します。名前をPurchaseHeaderとし、データタイプを、Recordにします。サブタイプを設定するには、フィールドの右端の矢印をクリックし、Purchase Headerの38行を選択します。

createPurchaseLineでも、同じ作業をします。変数の情報は、次のテーブルに記載されています。

名前 データタイプ サブタイプ 長さ
入力変数
OrderNo Code 10
ItemNo Code 20
Quantity Integer
ローカル変数
PurchaseLine Record Purchase Line
PurchaseHeader Record Purchase Header
NextLineNo Integer

すべての作業完了後、C/AL エディタウィンドウにて、次の関数宣言が必要です。

ここで、関数の本体部分を記述します。カーソルを、createPurchaseOrder関数の宣言部分の次の空行に設定し、下記のコードをコピー、貼り付けします。

PurchaseHeader.INIT;
PurchaseHeader.VALIDATE("Document Type",PurchaseHeader."Document Type"::Order);
PurchaseHeader.VALIDATE("Buy-from Vendor No.",VendorNo);
PurchaseHeader.INSERT(TRUE);
EXIT(PurchaseHeader."No.");

createPurchaseLine関数について、次の本体部分を貼り付けます。:

PurchaseLine.RESET;
PurchaseLine.SETRANGE("Document Type",PurchaseHeader."Document Type"::Order);
PurchaseLine.SETRANGE("Document No.",OrderNo);
IF PurchaseLine.FIND('+') THEN
  NextLineNo := PurchaseLine."Line No." + 10000
ELSE
  NextLineNo := 10000;
IF NextLineNo = 10000 THEN

CLEAR(PurchaseLine);
PurchaseLine.INIT;
PurchaseLine."Document Type" := PurchaseHeader."Document Type"::Order;
PurchaseLine."Document No." := OrderNo;
PurchaseLine."Line No." := NextLineNo;
PurchaseLine.INSERT(TRUE);
PurchaseLine.VALIDATE(Type,PurchaseLine.Type::Item);
PurchaseLine.VALIDATE("No.", ItemNo);
PurchaseLine.VALIDATE(Quantity,Quantity);
PurchaseLine.MODIFY(TRUE);

CodeUnitを閉じ、コンパイル オプションにチェック設定し、OKをクリックします。

パフォーマンス チップ: 接続のデータロードを高速化するには、最大ページサイズパラメータを、取引SQL クエリのサイズ以上に、十分大きく設定します。パラメータ設定は、NAV Server 管理ツールを開き、左ペインのツリーを展開し、DynamicsNAV80インスタンスを選択し、OData サービス タブを展開し、底部の編集ボタンをクリックし、最大ページサイズ フィールドに値を設定します。例えば、SQL クエリが130万行以上の行を返す時、1,400,000を設定します。保存ボタンをクリックします。NAV serverを再起動します。


次へ: Fishbowl

Download PDF

1)
翻訳者注釈: 取引は、Transactionの翻訳です。
2)
翻訳者注釈: 品目情報は、Item infoの翻訳です。
3)
翻訳者注釈: 入荷オーダーは、Orders to receiveの翻訳です。