From dfaa77f2b907939017f383792882dd336422135f Mon Sep 17 00:00:00 2001 From: Moriyukina2 Date: Wed, 7 Aug 2024 14:39:33 +0900 Subject: [PATCH] =?UTF-8?q?bug540=20550=20=E5=A4=89=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E5=80=A4=E6=8C=BF=E5=85=A5=E3=80=81=E6=9D=A1=E4=BB=B6=E5=BC=8F?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/actions/insert-value.ts | 106 +++++++++++------- 1 file changed, 66 insertions(+), 40 deletions(-) diff --git a/plugin/kintone-addins/src/actions/insert-value.ts b/plugin/kintone-addins/src/actions/insert-value.ts index 7c8cafa..f84fcab 100644 --- a/plugin/kintone-addins/src/actions/insert-value.ts +++ b/plugin/kintone-addins/src/actions/insert-value.ts @@ -46,15 +46,16 @@ export class InsertValueAction implements IAction{ let valueHasBlank; //正規表現チェック - valueHasBlank = inputValue.match(/(\s|\u3000)/);//半角スペース・タブ文字・改行・改ページ・全角スペースが1つ以上あるとマッチする + valueHasBlank = inputValue.match(/^(\s| )*$/);//値が半角スペース・タブ文字・改行・改ページ・全角スペースのみであるか + //値に空白文字が入っている、nullのときは、エラーチェックする if(valueHasBlank !== null || inputValue === null || inputValue === ''){ //空白文字を空白文字が非対応のフィールドに挿入しようとしている場合、例外を発生させる if(fieldType === "NUMBER" || fieldType === "DATE" || fieldType === "DATETIME" || fieldType === "TIME" || fieldType === "USER_SELECT" || fieldType === "ORGANIZATION_SELECT" || fieldType === "GROUP_SELECT" || fieldType === "RADIO_BUTTON" || fieldType === "DROP_DOWN" || fieldType === "CHECK_BOX" || fieldType === "MULTI_SELECT"){ - event.record[fieldCode]['error'] = "「"+fieldCode+"」"+"に挿入しようとした、値に空白文字が含まれています。"; //レコードにエラーを表示 - throw new Error("「"+fieldCode+"」"+"に挿入しようとした、値に空白文字が含まれています。「値を挿入する」コンポーネントの処理を中断しました。"); + event.record[fieldCode]['error'] = "「"+fieldCode+"」"+"に挿入しようとした、値は空白文字です。"; //レコードにエラーを表示 + throw new Error("「"+fieldCode+"」"+"に挿入しようとした、値は空白文字です。「値を挿入する」コンポーネントの処理を中断しました。"); //空白文字を必須項目フィールドに挿入しようとしている場合、例外を発生させる }else if(fieldRequired){ @@ -78,8 +79,8 @@ export class InsertValueAction implements IAction{ //正規表現チェック for(let i =0;i { return path.split(".").reduce((o, k) => (o || {})[k], obj); }; - //オブジェクト変数で、値の指定がある場合は、変数名のみ取得 - var variablesName = fieldValue.substr(0, fieldValue.indexOf('.')); - if(variablesName){ - //変数の値取得 - objectValue = getContextVarByPath(context.variables,variablesName) - }else{ - //変数の値取得 - objectValue = getContextVarByPath(context.variables,fieldValue) + + //contextに存在する変数名を全て取得する + contextHasVariablesNames = Object.keys(context.variables); + //contextに変数が1つも存在しない場合、エラーを出す + if(contextHasVariablesNames.length === 0){ + throw new Error("「"+fieldCode+"」"+"フィールドに挿入しようとした変数は、存在しないため、処理を中断しました。"); + } + + let inputVariablesName; + //入力値がオブジェクト変数の変数名であり、プロパティの指定がある場合、変数名のみ取得 + if (fieldValue.includes('.')) { + // '.'より前の文字を抽出 + inputVariablesName = fieldValue.split('.')[0]; + } else { + // '.'が含まれていない場合、そのまま返す + inputVariablesName = fieldValue; + } + + //入力された変数名が、contextに不存在の場合、エラーを表示する + for(let i=0;i< contextHasVariablesNames.length;i++){ + let inputVariablesExist; + if(inputVariablesName === contextHasVariablesNames[i]){ + inputVariablesExist = true; + } + + if(!inputVariablesExist){ + throw new Error("「"+fieldCode+"」"+"フィールドに挿入しようとした変数は、存在しないため、処理を中断しました。"); + } + } + + if(inputVariablesName){ + //入力された変数名の値を取得 + variableValue = getContextVarByPath(context.variables,inputVariablesName) } //文字列型のフィールド以外に、空白文字の変数の値を挿入する場合、エラーを出す - if(objectValue === "" || objectValue === null){ + if(variableValue === "" || variableValue === null){ if(fieldType === "NUMBER" || fieldType === "DATE" || fieldType === "DATETIME" || fieldType === "TIME" || fieldType === "USER_SELECT" || fieldType === "ORGANIZATION_SELECT" || fieldType === "GROUP_SELECT" || fieldType === "RADIO_BUTTON" || fieldType === "DROP_DOWN" || fieldType === "CHECK_BOX" || fieldType === "MULTI_SELECT"){ throw new Error("「"+fieldCode+"」"+"フィールドに挿入しようとした変数は、値がnullのため、処理を中断しました。"); } } - //オブジェクト変数の場合、プロパティを取得し、何のオブジェクト変数か判断する - if(objectValue !== null && typeof objectValue === 'object'){ + + //変数がオブジェクトの場合、プロパティを取得し、何のオブジェクトか判断する + if(typeof variableValue === 'object'){ let objectProperties=[] - if(objectValue.length > 0){ - objectProperties=Object.keys(objectValue[0]); + if(variableValue.length > 0){ + objectProperties=Object.keys(variableValue[0]); }else{ - objectProperties = Object.keys(objectValue); + objectProperties = Object.keys(variableValue); } + //(ログインユーザー・値取得のコンポーネントからの)ユーザーオブジェクトを挿入時、挿入先フィールドによって、値を指定する if(objectProperties.includes('code') && objectProperties.includes('name')){ - objectValue=this.setValueOfUserObject(fieldValue,objectValue,fieldType,fieldCode); + variableValue=this.setValueOfUserObject(fieldValue,variableValue,fieldType,fieldCode); //ユーザーオブジェクトから取得した値を、fieldValueArrayに代入 - for (const value of objectValue) { + for (const value of variableValue) { fieldValueArray.push(value); } } }else{ //オブジェクト変数でない場合、変数をfieldValueArrayに代入 - variableValue = context.variables[fieldValue]; + variableValue = context.variables[fieldValue] fieldValueArray[0] = variableValue; } @@ -525,7 +550,7 @@ export class InsertValueAction implements IAction{ //変数の値にエラー(空文字・空白文字の混入)がないことをチェックする notInputError=this.checkVariableValueBlank(fieldType,fieldValueArray,fieldCode,fieldRequired,event); - //手入力の場合、プロパティ挿入する値をfieldArrayに代入 + //手入力の値を挿入する場合、挿入する値をfieldArrayに代入 }else{ fieldValueArray.push(fieldValue); //入力エラー(空白文字の混入)がないことをチェック @@ -538,7 +563,7 @@ export class InsertValueAction implements IAction{ let correctValues :any[] = []; //条件式の結果がtrue、入力エラー(空白文字の混入)がない場合、挿入する値をフィールドタイプ別にチェックする - if(conditionResult && notInputError){ + if(notInputError){ //文字列型のフィールドに挿入しようとしている値が適切の場合、correctFormattedValueに代入する if(fieldType === "SINGLE_LINE_TEXT" || fieldType === "MULTI_LINE_TEXT" || fieldType === "RICH_TEXT" || fieldType === "LINK" ){ @@ -620,6 +645,7 @@ export class InsertValueAction implements IAction{ } } + const conditionResult = this.getConditionResult(context); //保存成功イベントの場合、kintone async/await による非同期処理でフィールドに値を挿入する if(!event.type.includes('success')){