diff --git a/plugin/kintone-addins/src/actions/regular-check.ts b/plugin/kintone-addins/src/actions/regular-check.ts new file mode 100644 index 0000000..b986f98 --- /dev/null +++ b/plugin/kintone-addins/src/actions/regular-check.ts @@ -0,0 +1,107 @@ +import { actionAddins } from "."; +import { IAction,IActionResult, IActionNode, IActionProperty, IField, IContext} from "../types/ActionTypes"; +import { ConditionTree } from '../types/Conditions'; +/** + * アクションの属性定義 + */ +interface IRegularCheckProps{ + field:IField; + show:string; + condition:string; + message:string; +} +/** + * 正規表現チェックアクション + */ +export class RegularCheckAction implements IAction{ + name: string; + actionProps: IActionProperty[]; + props:IRegularCheckProps; + constructor(){ + this.name="正規表現チェック"; + this.actionProps=[]; + this.props={ + field:{code:''}, + show:'', + condition:'', + message:'' + } + //アクションを登録する + this.register(); + } + /** + * アクションの実行を呼び出す + * @param actionNode + * @param event + * @returns + */ + async process(actionNode:IActionNode,event:any,context:IContext):Promise { + let result={ + canNext:true, + result:false + }; + try{ + //属性設定を取得する + this.actionProps=actionNode.actionProps; + if (!('field' in actionNode.ActionValue) && !('show' in actionNode.ActionValue)) { + return result + } + this.props = actionNode.ActionValue as IRegularCheckProps; + //条件式の計算結果を取得 + const conditionResult = this.getConditionResult(context); + if(conditionResult){ + if(this.props.message!=='[\.\w\d\S]'){ + event.error = this.props.message + } + } + result= { + canNext:true, + result:true + } + return result; + }catch(error){ + event.error=error; + console.error(error); + result.canNext=false; + return result; + } + + } + /** + * + * @param context 条件式を実行する + * @returns + */ + getConditionResult(context:any):boolean{ + const tree =this.getCondition(this.props.condition); + if(!tree){ + //条件を設定されていません + return true; + } + return tree.evaluate(tree.root,context); + } + + /** + * @param condition 条件式ツリーを取得する + * @returns + */ + getCondition(condition:string):ConditionTree|null{ + try{ + const tree = new ConditionTree(); + tree.fromJson(condition); + if(tree.getConditions(tree.root).length>0){ + return tree; + }else{ + return null; + } + }catch(error){ + return null; + } + } + + register(): void { + actionAddins[this.name]=this; + } + +} +new RegularCheckAction(); \ No newline at end of file