
kintone: レコード追加
この工程は、kintone アプリにレコードを1件追加します。
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);
}
}