自動検索プラグインを追加

This commit is contained in:
Mouriya
2024-07-01 16:20:58 +09:00
parent 9d2217f8e1
commit 5ca16d7b45
2 changed files with 146 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
import {
IAction,
IActionResult,
IActionNode,
IActionProperty,
IContext,
} from "../types/ActionTypes";
import { actionAddins } from ".";
import { before } from "node:test";
interface Props {
displayName: string;
lookupField: LookupField;
condition: Condition;
}
interface Condition {
queryString: string;
index: number;
type: string;
children: Child[];
parent: null;
logicalOperator: string;
}
interface Child {
index: number;
type: string;
parent: string;
object: any;
operator: string;
value: string;
}
interface LookupField {
app: App;
fields: Field[];
}
interface Field {
name: string;
type: string;
code: string;
label: string;
noLabel: boolean;
required: boolean;
lookup: Lookup;
}
interface Lookup {
relatedApp: RelatedApp;
relatedKeyField: string;
fieldMappings: FieldMapping[];
lookupPickerFields: any[];
filterCond: string;
sort: string;
}
interface FieldMapping {
field: string;
relatedField: string;
}
interface RelatedApp {
app: string;
code: string;
}
interface App {
id: string;
name: string;
description: string;
createdate: string;
}
export class AutoLookUpAction implements IAction {
name: string;
actionProps: IActionProperty[];
props: Props;
constructor() {
this.name = "ルックアップ更新";
this.actionProps = [];
this.props = {} as Props;
this.register();
}
async process(
prop: IActionNode,
event: any,
context: IContext
): Promise<IActionResult> {
this.actionProps = prop.actionProps;
this.props = {
...prop.ActionValue,
condition: JSON.parse((prop.ActionValue as any).condition),
} as Props;
console.log(context);
let result = {
canNext: true,
result: "",
} as IActionResult;
try {
const lookUpField = this.props.lookupField.fields.filter(
(f) => f.lookup
)[0];
if (!lookUpField) {
throw new Error(
`can't find look up field, selected field is ${this.props.lookupField.fields}`
);
}
const key = context.record[lookUpField.lookup.relatedKeyField].value;
const updateRecords = (
await kintone.api(kintone.api.url("/k/v1/records", true), "GET", {
app: this.props.lookupField.app.id,
query: `${lookUpField.code} = ${key}`,
})
).records as Array<any>;
console.log("updateRecords", updateRecords);
if (updateRecords && updateRecords.length > 0) {
await kintone.api(kintone.api.url("/k/v1/records.json", true), "PUT", {
app: this.props.lookupField.app.id,
records: updateRecords.map((r) => ({
id: Number(r["$id"].value),
record: { [lookUpField.code]: { value: key } },
})),
});
}
} catch (error) {
console.error("AutoLookUpAction error", error);
result.canNext = false;
}
console.log("autoLookupProps", this.props);
return result;
}
register(): void {
actionAddins[this.name] = this;
}
}
new AutoLookUpAction();

View File

@@ -18,6 +18,7 @@ import '../actions/value-getter';
import '../actions/string-join';
import '../actions/validation-fullwidth';
import '../actions/validation-halfwidth';
import '../actions/auto-lookup';
import { ActionFlow,IActionFlow, IActionResult,IContext } from "./ActionTypes";