このガイドを利用してデータをインポートするには、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にデータをインポートするには、データベース 接続機能を利用します。そのため、インポート可能となるデータはデータベース 接続機能にて取得できるデータに制限されます。
読み込みサービスの作成を考えます。
読み込みサービスを作成するには、次が必要です。:
入荷オーダーサービスの作成を考えます。他のサービスは、同じ方法で作成できます。NAVに同梱されているCRONUS Company デモデータベースを利用し、説明します。
最初に、 品目コード、地点、到着日、数量 列を持つテーブルを返すSQLビューの作成が必要です。これを行うには、SQL Server Management Studioを起動し、ファイル > 新規 > 現在の接続でSQL クエリを選択し、SQL クエリを新規作成します。次のコードを新規に作成した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 クエリ > 実行をクリックし、オブジェクト エクスプローラにある ビューの中から、新規に作成されたビューを確認します。もし表示されていない場合、ビューを選択し、ビュー > 更新をクリックします。
ここでは、 入荷オーダービューに接続するNAV テーブルの作成が必要です。NAV 開発環境を起動し、ファイル > データベース > 開くを開き、サーバー名とデータベース名を入力し、認証にWindows 認証を設定します。OKをクリックします。
メニューのツール > オブジェクト デザイナーをクリックします。ウィンドウの左側にて、テーブル カテゴリを選択し、 新規ボタンをクリックします。
ここで、完全に同じ名前で、かつ入荷オーダービューのフィールドと互換性のあるデータタイプとして、新規テーブルの複数列の宣言が必要です。
次の空欄のフィールドにカーソルを設定後、メニューのビュー > プロパティをクリックします。テーブル プロパティ ウィンドウのリンクオブジェクトプロパティをはいに設定します。これは、入荷オーダービューとこのテーブルのリンクになります。
ウィンドウを閉じ、テーブルデザイナーウィンドウも閉じます。NAVは変更の保存を確認するため、はいをクリックします。名前を付けて保存ダイアログにて、テーブル ID と 名前を入力します。NAV のドキュメントの説明ではユーザー定義IDの範囲は[50,000-99,999]のため、この範囲内で利用されていない数値を選択します。テーブル名は、入荷オーダービューと同じ名前の必要があり、私たちの場合では、“Orders to receive”です。
OKをクリックします。これで、入荷オーダーテーブルが一覧に表示されました。
検証には、実行ボタンをクリックします。Dynamics NAV クライアントが起動し、別ウィンドウにて結果が表示されます。
NAVでは、ページ、SQL クエリまたはCodeUnitオブジェクトをWebサービスとして公開できます。私たちの場合、ページは入荷オーダーと品目情報読み込みサービスの公開として利用し、SQL クエリは取引サービスとして利用します。それでは、入荷オーダーテーブルを表示するページを作成しましょう。
オブジェクト デザイナーウィンドウにて、 ページカテゴリを選択し、新規ボタンをクリックします。テーブルフィールドにて、新しいページにて表示したいテーブル名を入力します。私たちの場合、これは、Orders to receiveテーブルになります。ウィザードを利用してページを作成 オプションをクリックし、選択対象から一覧を選択します。OKをクリックします。
ページのすべてのフィールドを追加し、終了ボタンをクリックします。ページ デザイナーダイアログを閉じ、はいをクリックし、変更を保存します。ページIDを入力します(上記で説明した範囲から、利用されていないIDを選択します。)。名前を付けて保存ダイアログにて、ページ名を入力し、OKをクリックします。
すべてが完了すると、入荷オーダーページが一覧に表示されます。
最後に、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/"'32%3BUsMAAAF7MQA4ADkANgAtAFMAAAAAAA%3D%3D1%3B00%3B'""> <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/"'32%3BUsMAAAF7MQA5ADAANgAtAFMAAAAAAA%3D%3D1%3B00%3B'""> <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アドレスに置き換えが必要です。
GMDH Streamlineに読み込みサービスデータを正しく理解させるためには、サービスにて渡される各テーブル列の列タイプの正しい設定が必要です。設定には、NAV接続ダイアログの読み込みサービスリンクの近くのプレビューボタンをクリックします。SQL クエリ結果が下記のテーブルに表示されます。
各列ヘッダの下のコンボボックスをクリックし、ドロップダウンリストから最も適切なタイプを選択します。
品目情報サービスと入荷オーダーサービスについても、手順1から手順5を繰り返します。すべての 読み込みサービスにいてのSQLSQL クエリをダウンロードできます。: items.sql, transactions.sql, orders-to-receive.sql.
取引サービスについては、手順3では、ページを作成せず代わりに(下記で説明された)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 グローバルウィンドウの関数タブをクリックします。これらを、createPurchaseOrderとcreatePurchaseLineとして、名前を付けます。これら名前を一覧に入力します。
関数名のある行にカーソルを設定し、メニューのビュー > プロパティをクリックしたのち、ローカルプロパティをいいえにします。
ここで、入力パラメータと出力パラメータを追加し、関数の宣言を特定します。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をクリックします。