更新情報
配列パラメーターの値をSQLでバルクインサートできるようになりました!

ベースマキナの更新情報をお届けします。
配列パラメーターのフォーマット形式「SQL」と展開先を追加
MySQL/PostgreSQLのアクションで配列パラメーターを使う際に、フォーマット形式「SQL」と展開先を選択できるようになりました。

展開先としてINを選択した場合はWHERE句のINの条件へ、VALUESを選択した場合はINSERT文のVALUESへ配列パラメーターの値を展開できます。
※VALUESは配列パラメーターの要素の種類が配列/タプルの場合にのみ使用できます。
配列パラメーターの値をバルクインサートする例
以下のような商品のテーブルに、データをバルクインサートする例を紹介します。
CREATE TABLE goods (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price INT NOT NULL,
);
以下のような配列パラメーターをアクションに設定します。
-
パラメーター名は
追加商品 -
フォーマット形式がSQL
-
展開先がVALUES
-
要素の種類がタプル
-
1つ目のタプルの要素の種類がテキスト
-
2つ目のタプルの要素の種類が数値

以下のようなSQL文をアクションに設定します。
INSERT INTO goods (name, price) VALUES {{ 追加商品 }};
アクション実行画面で以下のようにフォームの値を入力して、goodsテーブルにバルクインサートできます。

詳細はドキュメントの「配列>フォーマット形式>SQL」をご参照ください。
※MySQL/PostgreSQLアクションの配列パラメーターのフォーマット形式「なし」は、フォーマット形式「SQL」かつ展開先「IN」に変更となりました。
JavaScriptアクションにcreateActionJob関数を追加しました
JavaScriptアクションの組み込み関数にアクションをジョブとして実行できるcreateActionJob関数を追加しました。
関数の引数にアクションのID/識別子とパラメーターの値を渡して実行できます。
import { createActionJob } from "@basemachina/action";
/** @type { import("@basemachina/action").Handler } */
export default async ({ reports }) => {
const results = await createActionJob(
// アクションのID/識別子
"create_reports",
// パラメーターの値
{ reports },
);
if (!results[0].failure) {
throw new Error("レポート作成ジョブの作成に失敗しました");
}
return `レポート作成ジョブを作成しました: ${results[0].success.actionJobId}`;
};
またオプションで実行日時を指定してジョブの実行の予約もできます。
import { createActionJob } from "@basemachina/action";
/** @type { import("@basemachina/action").Handler } */
export default async ({ reports }) => {
const results = await createActionJob(
// アクションのID/識別子
"create_reports",
// パラメーターの値
{ reports },
// 2024年10月1日22時に実行
{ scheduledAt: "2024-10-01 22:00:00" },
);
if (!results[0].failure) {
throw new Error("レポート作成ジョブの作成に失敗しました");
}
return `レポート作成ジョブを作成しました: ${results[0].success.actionJobId}`;
};
詳細はドキュメントの「createActionJob」をご参照ください。
軽微な変更点
- MySQLの接続情報で「プリペアードステートメントを使用しない」を設定できるようになりました

-
アクション編集画面のパラメーターを設定するモーダルの横幅を大きくしました
-
メールにて周知させていただいておりました「ビュー/アクションの加工スクリプト/JavaScriptアクションのコード内の日時の値の仕様変更」を予定通り2024年10月2日(水)に実施いたしました