diff --git a/plugin/kintone-addins/src/actions/insert-value.ts b/plugin/kintone-addins/src/actions/insert-value.ts index b7ae7a2..0ab1d03 100644 --- a/plugin/kintone-addins/src/actions/insert-value.ts +++ b/plugin/kintone-addins/src/actions/insert-value.ts @@ -88,7 +88,8 @@ export class InsertValueAction implements IAction{ let singleDigitMonthDay = inputValue.match(/(\d{4})-(\d{1})-(\d{1})$/);//4桁の数字-1桁の数字-2桁の数字 let singleDigitMonth = inputValue.match(/(\d{4})-(\d{1})-(\d{2})$/);//4桁の数字-1桁の数字-2桁の数字 let singleDigitDay = inputValue.match(/(\d{4})-(\d{2})-(\d{1})$/);//4桁の数字-2桁の数字-1桁の数字 - let dateTime = inputValue.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).000Z/);//時刻入りのUTCの日付形式 + let dateTimeMilliSecond = inputValue.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/);//時刻入りのUTCの日付形式(ミリ秒) + let dateTime = inputValue.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/);//時刻入りのUTCの日付形式 let date; //date型に変換 date = new Date(inputValue); @@ -96,7 +97,7 @@ export class InsertValueAction implements IAction{ //date型変換できたか確認 if(date !== undefined && !isNaN(date.getDate())){ //正規表現チェック確認 - if(twoDigitMonthDay === null && singleDigitMonth === null && singleDigitDay === null && singleDigitMonthDay === null && dateTime === null){ + if(twoDigitMonthDay === null && singleDigitMonth === null && singleDigitDay === null && singleDigitMonthDay === null && dateTime === null && dateTimeMilliSecond === null){ event.record[fieldCode]['error'] = "「"+fieldCode+"」"+"フィールドに入れようとした値は、無効な日付形式です。"; //レコードにエラーを表示 throw new Error("「"+fieldCode+"」"+"フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。"); } @@ -440,16 +441,51 @@ export class InsertValueAction implements IAction{ } } - //条件式の結果がtrueかつ挿入する値が変換できた場合、フィールド(ラジオボタン・ドロップダウン・チェックボックス・複数選択・文字列一行・文字列複数行・リッチエディタ・数値・日付・日時・時刻)にセット - if(conditionResult && (correctFormattedValue || correctValues)){ - //条件式の結果がtureかつ、値を正しい形式に変換できた場合、フィールドに値をセットする - if(correctFormattedValue){ - event.record[fieldCode].value = correctFormattedValue; - //条件式の結果がtureかつ、値を正しい形式(配列)に変換できた場合、フィールドに値(配列)をセットする - }else if(correctValues.length > 0){ - event.record[fieldCode].value = correctValues; + //保存成功イベントの場合、kintone async/await による非同期処理でフィールドに値を挿入する + if(!event.type.includes('success')){ + + //条件式の結果がtrueかつ挿入する値が変換できた場合、フィールド(ラジオボタン・ドロップダウン・チェックボックス・複数選択・文字列一行・文字列複数行・リッチエディタ・数値・日付・日時・時刻)にセット + if(conditionResult && (correctFormattedValue || correctValues)){ + //条件式の結果がtureかつ、値を正しい形式に変換できた場合、フィールドに値をセットする + if(correctFormattedValue){ + event.record[fieldCode].value = correctFormattedValue; + //条件式の結果がtureかつ、値を正しい形式(配列)に変換できた場合、フィールドに値(配列)をセットする + }else if(correctValues.length > 0){ + event.record[fieldCode].value = correctValues; + } } - } + + }else{ + //kintone async/await による非同期処理(保存成功時イベントREST API処理時) + async function updateRecord(fieldCode:string,event:any,insertValue:any) { + return new Promise((resolve, reject) => { + var updatedRecord = { + app: event.appId, + id: event.recordId, + record: {[fieldCode]:{"value":insertValue}} + }; + kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', updatedRecord, (resp) => { + resolve(resp); + }, (error) => { + reject(error); + }); + }); + } + + //条件式の結果がtrueかつ挿入する値が変換できた場合、フィールド(ラジオボタン・ドロップダウン・チェックボックス・複数選択・文字列一行・文字列複数行・リッチエディタ・数値・日付・日時・時刻)にセット + if(conditionResult && (correctFormattedValue || correctValues)){ + //条件式の結果がtureかつ、値を正しい形式に変換できた場合、フィールドに値をセットする + if(correctFormattedValue){ + event.record[fieldCode].value = correctFormattedValue; + //条件式の結果がtureかつ、値を正しい形式(配列)に変換できた場合、フィールドに値(配列)をセットする + }else if(correctValues.length > 0){ + event.record[fieldCode].value = correctValues; + } + } + + //kintone async/await による非同期処理(レコード更新) + await updateRecord(fieldCode,event,correctFormattedValue); + }; result= { canNext:true,