Files
KintoneAppBuilder/plugin/kintone-addins/src/actions/error-show.ts

99 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { actionAddins } from ".";
import { IAction, IActionProperty, IActionNode, IContext, IActionResult } from "../types/ActionTypes";
import { ConditionTree } from '../types/Conditions';
/**
* アクションの属性定義
*/
interface IErrorShowProps {
message: string;
condition: string;
}
export class ErrorShowAction implements IAction {
name: string;
actionProps: IActionProperty[]; //调用从import导入关于显示类的定义
props: IErrorShowProps;//从上方的interface 定义这个props所需要接受的属性
constructor() { //解构函数定义需要的类名
this.name = "エラー表示";
this.actionProps = [];
this.props = {
message: '',
condition: ''
}
this.register(); //重置以上注册表
}
/**
* アクションの実行を呼び出す
* @param actionNode
* @param event
* @returns
*/
async process(actionNode: IActionNode, event: any, context: IContext): Promise<IActionResult> { //异步处理某函数下的xx属性
let result = {
canNext: true,
result: false
};
try { //尝试执行以下代码部分
this.actionProps = actionNode.actionProps;
if (!('message' in actionNode.ActionValue) && !('condition' in actionNode.ActionValue)) { //如果message以及condition两者都不存在的情况下return
return result
}
this.props = actionNode.ActionValue as IErrorShowProps;
const conditionResult = this.getConditionResult(context);
if (conditionResult) {
event.error = this.props.message;
} else {
result = {
canNext: false,
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 ErrorShowAction();