コンテンツにスキップ

httpClient.Post

概要

サーバスクリプトで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の仕様に合わせて変えてください。
  • 状況が「発注済み」に変わる更新のときのみ送ります。発注済みのレコードを保存し直しても、送りません。
  • 送信に失敗すると、画面に赤いメッセージが出て、更新は止まります。時間をおいて、もう一度「発注済み」にしてください。
  • トークンはサーバスクリプトに書くため、テーブルの管理の権限がある人には見えます。

関連情報