httpClient.Post
概要¶
サーバスクリプトでhttpClientを使用してPOSTメソッドを発行する際に使用します。
構文¶
パラメータ¶
パラメータはありません。
戻り値¶
string型の戻り値
使用例¶
以下の例では、外部のAPIサーバにPOSTメソッドを発行し、結果をログに出力します。
JavaScript¶
MediaType: application/json の例
let data = {
data1: 'abc',
data2: '123'
}
httpClient.RequestUri = 'https://servername/api/.....';
httpClient.Content = JSON.stringify(data);
let response = httpClient.Post();
if(httpClient.IsSuccess) {
context.Log('Success: ' + response);
}else{
context.Log('Error: (' + httpClient.StatusCode + ')' + response);
}
MediaType: application/x-www-form-urlencoded の例
let data = {
data1: 'abc',
data2: '123'
}
httpClient.RequestUri = 'https://servername/api/.....';
httpClient.MediaType = 'application/x-www-form-urlencoded';
httpClient.Content = createParameters(data);
let response = httpClient.Post();
if(httpClient.IsSuccess) {
context.Log('Success: ' + response);
}else{
context.Log('Error: (' + httpClient.StatusCode + ')' + response);
}
//オブジェクトをURLエンコードしたパラメータ形式に変換する関数
function createParameters(obj) {
let result =[];
for(var key in obj) {
result.push(encodeURIComponent(key) + '=' +encodeURIComponent(obj[key]));
}
return result.join('&');
}
サンプルコード¶
Note
コード内の【 ... 】は適宜修正してください。
1. 発注済みにしたとき、外部の発注システムへ送り、受付番号を記録する
発注管理のテーブルで状況を「発注済み」にして更新したとき、発注の内容をJSONで外部の発注システムへPOSTし、返ってきた受付番号をレコードに記録します。送信に失敗したときは、更新を止めて状況を「発注済み」にしません。
実務での使いどころ¶
プリザンターで承認した発注を別の業務システムへ渡し、相手の受付番号を控えておく連携に使えます。通知の機能でも外部に知らせることはできますが、相手のAPIが決める形のJSONを送ったり、返った値をレコードに書き戻したり、失敗したときに更新を止めたりはできません。サーバスクリプトから送るため、トークンがブラウザから見えることもありません。
事前準備¶
1:「発注管理」テーブル(期限付きテーブル)で、以下の項目を有効化してください。
| 項目コード | 内容 |
|---|---|
| 状況(Status) | 選択肢一覧に「300,発注済み」を追加 |
| 分類A(ClassA) | 仕入先 |
| 数値A(NumA) | 数量 |
| 数値B(NumB) | 金額 |
| 分類C(ClassC) | 受付番号 |
2:スクリプトを登録します。
2-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
2-2:タイトル: 任意の名前(例:sendOrderToSupplier)
2-3:スクリプト: 下記サンプルコードを貼り付け、ORDER_API_URL・ORDER_API_TOKENを書き替える
2-4:条件: 「更新前」にチェック
JavaScript¶
// 発注システムの受付API(URL)と、認証に使うトークン
const ORDER_API_URL = '【発注システムのURL】';
const ORDER_API_TOKEN = '【発注システムのトークン】';
// 「発注済み」の状況の値
const ORDERED_STATUS = 300;
const LOG_TAG = '[sendOrderToSupplier]';
// 状況が「発注済み」に変わる更新のとき、発注の内容を発注システムへ送り、受付番号を記録する
function sendOrder() {
// saved は更新前の値。発注済みのレコードを保存し直したときは送らない
if (model.Status !== ORDERED_STATUS || Number(saved.Status) === ORDERED_STATUS) {
return;
}
const order = {
requestId: model.IssueId,
title: model.Title,
supplier: model.ClassA,
quantity: model.NumA,
amount: model.NumB,
};
httpClient.RequestHeaders.Clear();
httpClient.RequestHeaders.Add('Authorization', 'Bearer ' + ORDER_API_TOKEN);
httpClient.RequestUri = ORDER_API_URL;
httpClient.Content = JSON.stringify(order);
const response = httpClient.Post();
if (!httpClient.IsSuccess) {
const reason = httpClient.IsTimeOut ? 'タイムアウト' : `HTTP ${httpClient.StatusCode}`;
logs.LogUserError(`${LOG_TAG} 送信に失敗(${reason}):${response}`, 'sendOrder');
// 更新を止める(状況は「発注済み」にならない)
context.Error(`発注システムへの送信に失敗しました(${reason})。時間をおいて、もう一度「発注済み」にしてください。`);
return;
}
// 発注システムが返した受付番号を記録する
model.ClassC = JSON.parse(response).orderNo;
logs.LogInfo(`${LOG_TAG} 受付番号 ${model.ClassC}`, 'sendOrder');
}
sendOrder();
注記¶
- 送る内容(
order)と、受付番号を取り出す箇所(orderNo)は、連携先のAPIの仕様に合わせて変えてください。 - 状況が「発注済み」に変わる更新のときのみ送ります。発注済みのレコードを保存し直しても、送りません。
- 送信に失敗すると、画面に赤いメッセージが出て、更新は止まります。時間をおいて、もう一度「発注済み」にしてください。
- トークンはサーバスクリプトに書くため、テーブルの管理の権限がある人には見えます。
