kintone: レコード削除

kintone: Delete Record

この工程は、kintone アプリのレコードを削除します。一度に複数の削除が可能です。1行につき1つのレコード IDが含まれている必要があります。

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 *

Notes

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

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

    「アプリを更新(Update App)」をクリックして変更を適用するのも忘れないようにしてください
  • kintone アプリのゲストスペース ID(アプリがゲストスペースにある場合)とアプリ ID は、API トークンの設定画面で確認することができます
  • kintone REST API の制約により、一度に削除できるレコード件数の上限は100件です

Capture

See also

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


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

    const apiToken = httpClient.getOAuth2Token(auth);

    //// == 演算 / Calculating ==
    const apiUri = determineApiUri(domain, guestSpaceId);
    deleteRecords(apiUri, apiToken, basic, appId, recordIds);
}

/**
  * config からレコード ID の配列を読み出す
  * レコード ID が空または不正な文字列を含む場合はエラーとする
  * @return {Array<String>} idStrArray  レコード ID の配列
  */
function retrieveRecordIds() {
    const recordIdDef = configs.getObject("conf_recordId");
    let recordIds = configs.get("conf_recordId");
    if (recordIdDef !== null) {
        recordIds = engine.findData(recordIdDef);
    }
    if (recordIds === "" || recordIds === null) {
        throw "Record IDs aren't set.";
    }
    const idStrArray = recordIds.split("\n").filter(id => id !== ""); // 空文字列を削除
    if (idStrArray.length === 0) {
        throw "Record IDs aren't set.";
    }
    const isValid = idStrArray.every(id => isValidId(id)); // すべての ID をチェック
    if (!isValid) {
        throw "Includes invalid Record ID.";
    }
    return idStrArray;
}

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

/**
  * 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 "Domain is empty.";
    }
    const domainReg = new RegExp('^[0-9a-zA-Z-]{3,32}.(?:kintone.com|cybozu.com)$');
    if (!domainReg.test(domain)) {
        throw "Invalid Kintone domain.";
    }
    let apiUri = "";
    if (guestSpaceId === "" || guestSpaceId === null) {
        apiUri = `https://${domain}/k/v1/records.json`;
    } else {
        if (!isValidId(guestSpaceId)) {
            throw "Invalid Guest Space ID.";
        }
        apiUri = `https://${domain}/k/guest/${guestSpaceId}/v1/records.json`;
    }
    return apiUri;
}

/**
  * kintone REST API にレコード削除の DELETE リクエストを送信する
  * アプリ ID が空または不正な文字列であればエラーとする
  * @param {String} apiUri  API の URI
  * @param {String} apiToken  API トークン
  * @param {String} basic  Basic 認証設定
  * @param {String} appId  アプリ ID
  * @param {Array<String>} recordIds  レコード ID の配列
  */
function deleteRecords(apiUri, apiToken, basic, appId, recordIds) {
    if (appId === "" || appId === null) {
        throw "App ID is empty.";
    }
    if (!isValidId(appId)) {
        throw "Invalid App ID.";
    }
    let request = httpClient.begin()
        .header("X-Cybozu-API-Token", apiToken)
        .queryParam("app", appId);
    if (basic !== "" && basic !== null) {
        request = request.authSetting(basic);
    }
    recordIds.forEach((id, index) => request = request.queryParam(`ids[${index}]`, id));
    const response = request.delete(apiUri);
    // when error thrown
    const status = response.getStatusCode();
    if (status !== 200) {
        engine.log(`API URI: ${apiUri}`);
        engine.log(`Record IDs: ${recordIds}`);
        const responseStr = response.getResponseAsString();
        const accessLog = `---DELETE request--- ${status}\n${responseStr}\n`;
        engine.log(accessLog);
        throw `Failed to delete records. status: ${status}`;
    }
}

  
%d人のブロガーが「いいね」をつけました。