kintone: レコード追加

kintone: レコード追加

kintone: Add New Record

この工程は、kintone アプリにレコードを1件追加します。

Auto Step icon
Basic Configs
工程名
メモ
Configs for this Auto Step
conf_auth
C1: API トークンを設定した認証設定 *
conf_basic
C2: Basic 認証設定(kintone で設定されている場合のみ)
conf_domain
C3: ドメイン(xxxxx.kintone.com または xxxxx.cybozu.com) *
conf_guestSpaceId
C4: ゲストスペース ID(ゲストスペース内のアプリの場合のみ)
conf_appId
C5: アプリ ID *
conf_recordId
C6: レコード ID を保存する文字型データ項目
conf_fieldCode1
C7F: フィールドコード_1
conf_fieldValue1
C7V: 値_1#{EL}
conf_fieldCode2
C8F: フィールドコード_2
conf_fieldValue2
C8V: 値_2#{EL}
conf_fieldCode3
C9F: フィールドコード_3
conf_fieldValue3
C9V: 値_3#{EL}
conf_fieldCode4
C10F: フィールドコード_4
conf_fieldValue4
C10V: 値_4#{EL}
conf_fieldCode5
C11F: フィールドコード_5
conf_fieldValue5
C11V: 値_5#{EL}
conf_fieldCode6
C12F: フィールドコード_6
conf_fieldValue6
C12V: 値_6#{EL}
conf_fieldCode7
C13F: フィールドコード_7
conf_fieldValue7
C13V: 値_7#{EL}

Notes

  • kintone アプリの API トークンを取得するには、アプリの設定画面の「設定(App Settings)」のタブを開き、「API トークン(API Token)」へと進みます。

    「生成する(Generate)」をクリックし、権限(Permissions)を選択(「レコード追加(Add records)」権限が必要です)したあと、「保存(Save)」をクリックします。

    「アプリを更新(Update App)」をクリックして変更を適用するのも忘れないようにしてください。
  • kintone アプリのゲストスペース ID(アプリがゲストスペースにある場合)とアプリ ID は、API トークンの設定画面で確認することができます。
  • このモデリング要素がサポートするフィールド型は、文字列(1行)数値文字列(複数行)リッチエディターラジオボタンドロップダウンリンク日付時刻日時です。作成日時更新日時に値を登録するには、「アプリ管理(Manage app)」権限が必要です。
  • 値はフィールド型に一致するデータ形式で入力する必要があります。例えば日時型のフィールドであれば、2015-03-17T10:20:00Z のように入力します。詳細は kintone のリファレンスを参照してください。

Capture

See also

Script (click to open)
  • 次のスクリプトが記述されている XML ファイルをダウンロードできます
    • kintone-record-add.xml (C) Questetra, Inc. (MIT License)
    • Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます


const FIELD_NUM = 7; // 扱えるフィールドの数

function main() {
    //// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
    const auth = configs.getObject("conf_auth");
    const basic = configs.getObject("conf_basic");
    const domain = configs.get("conf_domain");
    const guestSpaceId = configs.get("conf_guestSpaceId");
    const appId = configs.get("conf_appId");
    const recordIdDef = configs.getObject("conf_recordId");
    const apiToken = auth.getToken();
    const recordObj = retrieveRecordContent();

    //// == 演算 / Calculating ==
    const apiUri = determineApiUri(domain, guestSpaceId);
    const recordId = addRecord(apiUri, apiToken, basic, appId, recordObj);

    //// == ワークフローデータへの代入 / Data Updating ==
    setData(recordIdDef, recordId);
}

/**
  * configからレコード情報(フィールドコードとフィールドの値)を読み出し、JSON オブジェクトを返す
  * @return {Object} recordObj  レコード情報の JSON オブジェクト
  */
function retrieveRecordContent() {
    const recordObj = {};
    for (let i = 0; i < FIELD_NUM; i++) {
        const fieldCodeConfigName = `conf_fieldCode${i + 1}`;
        const fieldValueConfigName = `conf_fieldValue${i + 1}`;

        const fieldCode = configs.get(fieldCodeConfigName);
        if (fieldCode === "" || fieldCode === null) { // フィールドコードが空
            continue;
        }
        if (recordObj[fieldCode] !== undefined) { // フィールドコードの指定が重複
            throw new Error("The same Field Code is set multiple times.");
        }

        let fieldValue = configs.get(fieldValueConfigName);
        if (fieldValue === "" || fieldValue === null) { // 値が空
            fieldValue = null;
        }
        recordObj[fieldCode] = {
            "value": fieldValue
        };
    }
    return recordObj;
}

/**
  * kintone REST API のレコード追加の URI を決定する
  * ドメインが空、または kintone のドメインとして不正な文字列であればエラーとする
  * ゲストスペース ID が不正な文字列であればエラーとする
  * @param {String} domain  ドメイン
  * @param {String} guestSpaceId  ゲストスペース ID
  * @return {String} apiUri  API の URI
  */
function determineApiUri(domain, guestSpaceId) {
    if (domain === "" || domain === null) {
        throw new Error("Domain is empty.");
    }
    const domainReg = new RegExp('^[0-9a-zA-Z-]{3,32}.(?:kintone.com|cybozu.com)$');
    if (!domainReg.test(domain)) {
        throw new Error("Invalid Kintone domain.");
    }
    let apiUri = "";
    if (guestSpaceId === "" || guestSpaceId === null) {
        apiUri = `https://${domain}/k/v1/record.json`;
    } else {
        if (!isValidId(guestSpaceId)) {
            throw new Error("Invalid Guest Space ID.");
        }
        apiUri = `https://${domain}/k/guest/${guestSpaceId}/v1/record.json`;
    }
    return apiUri;
}

/**
  * kintone REST API にレコード追加の POST リクエストを送信する
  * アプリ ID が空、または不正な文字列であればエラーとする
  * @param {String} apiUri  API の URI
  * @param {String} apiToken  API トークン
  * @param {AuthSettingWrapper} basic  Basic 認証設定
  * @param {String} appId  アプリ ID
  * @param {Object} recordObj  レコード情報の JSON オブジェクト
  * @return {String} recordId  レコード ID
  */
function addRecord(apiUri, apiToken, basic, appId, recordObj) {
    if (appId === "" || appId === null) {
        throw new Error("App ID is empty.");
    }
    if (!isValidId(appId)) {
        throw new Error("Invalid App ID.");
    }
    const body = {
        "app": appId,
        "record": recordObj
    };
    engine.log(`API URI: ${apiUri}`);
    engine.log(`Request Body: ${JSON.stringify(body)}`);
    let request = httpClient.begin()
        .header("X-Cybozu-API-Token", apiToken)
        .body(JSON.stringify(body), "application/json; charset=UTF-8");
    if (basic !== "" && basic !== null) {
        request = request.authSetting(basic);
    }
    const response = request.post(apiUri);
    const responseStr = response.getResponseAsString();
    const status = response.getStatusCode();
    if (status >= 300) { // when error thrown
        engine.log(`---POST request--- ${status}\n${responseStr}`);
        throw new Error(`Failed to add record. status: ${status}`);
    }
    const json = JSON.parse(responseStr);
    return json.id;
}

/**
  * ID が有効か(自然数か)を判定する
  * @param {String} idString  ID の文字列
  * @return {Boolean}  有効な ID かどうか
  */
function isValidId(idString) {
    const idReg = new RegExp('^[1-9][0-9]*$');
    return idReg.test(idString);
}

/**
  * データ項目に出力する
  * @param {ProcessDataDefinitionView} dataDef  データ項目の ProcessDataDefinitionView
  * @param {String} dataString  出力する文字列
  */
function setData(dataDef, dataString) {
    if (dataDef !== null) {
        engine.setData(dataDef, dataString);
    }
}

  
上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む