2016-10-21 13 views
2

Dynamics NAV Odataフィードを使用するnode.jsスクリプトを作成しようとしています。ODataのDynamics NAVへの認証

Dynamics NAVセットアップのUserAccount/PWとWebサービスアクセスキーの両方があります。

ヘッダーに何かを追加するか、URLクエリに何かを追加することで、正しく認証する方法を見つけられなくなってしまいます。私は 'username:password @ server'形式を使ってみました。私はbase64としてエンコーディングを試み、ヘッダーに 'Authentication'値を追加しました。

documentation itselfは非常に特異的ではありません。私は鍵を生成する方法を知っていますが、鍵をNAVに正しく送信して認証する方法がわかりません。

私は任意のヘッダーキー:値のペアを追加できる 'options'引数をとる 'request-promise' npmパッケージを使用しています。誰かがNAVへの認証方法について私にある方向を教えてください。私はこれを何時間も続けてきました。

答えて

1

私は満足のいく答えを見つけました。私は形式に

http://username:[email protected]<server>/ODATA_table

を使用してURLにカールすることができたnode-libcurlを使用して

は、特に私のcURLモジュールは、次のようになります。

var Curl = require('node-libcurl').Curl; 

var curl = new Curl(), 
    close = curl.close.bind(curl); 

function getOData(url) { 
    return new Promise((resolve, reject) => { 
     curl.setOpt(Curl.option.URL, url); 
     curl.setOpt(Curl.option.HTTPAUTH, Curl.auth.NTLM); 
     curl.setOpt(Curl.option.SSL_VERIFYPEER, false); 
     curl.setOpt(Curl.option.SSL_VERIFYHOST, false); 
     curl.setOpt(Curl.option.POST, 0); 


     curl.on('end', function (statusCode, body, headers) { 

      var retObj = JSON.parse(body); 
      resolve(retObj); 

     }); 

     curl.on('error', function(e){ 
      reject(e); 
      this.close(); 
     }); 

     curl.perform(); 
    }) 
} 

module.exports = {getOData: getOData}; 

しかし、私は明示的にJSONをお願いしなければなりませんURLは​​のようになります。

+0

をすることを忘れないでください要求が成功した場合でもハンドルを閉じます。 – JCM

-1

Tkol、あなたは正しい、また、あなたがguzzleを使用することができ、それはそれは、顧客テーブルを照会サンプル関数ですが、非常に簡単です:

public function ReadCustomer($identifier=0) 
{ 
    try { 

     $client = new GuzzleHttpClient(); 

     $apiRequest = $client->request('GET', 'http://server:port/ServiceName/WS/CompanyName/Page/Customer?$filter=No eq \''.$identifier.'\'',[ 
      'auth' =>'username','password', 'NTLM' ],  //NTLM authentication required 
      'debug' => true         //If needed to debug 
     ]); 


     $content = json_decode($apiRequest->getBody()->getContents()); 
     return $content; 

    } catch (RequestException $re) { 
     //For handling exception 
    } 
} 

あなたは私のサンプルを確認することができます。 update/delete/get from Dynamics NAV OData webservice

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 18281439) – Aryan

+0

申し訳ありませんが、私の未経験の回答で、私はそれを排除します。 – colo

関連する問題