機能の概要
プロジェクト内で任意の処理(値の書き換えなど)をプログラミングによって実行する際に使用します。
それでは、プログラムアクションを作成するための手順をご案内します。
操作手順
- 任意のスペースをクリックします。
- 任意のプロジェクトをクリックします。
- 「アクション」タブをクリックします。
- 「+ 新しいアクションを作成する」ボタンを押します。
- 「プログラム」をクリックします。
新規登録の際、「テンプレートから作成」、「+ 新規作成」を選択することが可能です。「テンプレートから作成」を選択した場合はこちら
「新規作成」を選択した場合は、次のステップへお進みください。 - 「アクションの名前」と「説明」を入力します。
- 実行するプログラムを作成します。使用できる言語は次の通りです。
- PHP
- 「テストデータ設定」ボタンを押します。
- プログラムアクション中で使用した「データ項目」に対して json 形式でテストデータを設定し、「設定する」ボタンを押します。
-
// サンプルコード
{
"項目名1": "テストデータ1",
"項目名2": "テストデータ2"
}
-
-
「テスト実行」ボタンを押し、「テスト実行」ボタンが「テスト成功」に更新されることを確認後、「保存する」ボタンを押すことで、設定完了となります。
※「テスト実行」に失敗した場合は、保存できないためご注意ください。
その他仕様
また、アクション中では、次のデータを使用することもできます。
データ項目
データ項目を利用する時に使用します。
設定方法は次の通りです。
- 「データ項目」タブをクリックします。
- 入力欄にカーソルを合わせ、対象のデータ項目の「追加(差し込みマーク)」をクリックすることで差し込み完了です。
共通変数
グローバル・スペース共通変数を利用する時に使用します。
設定方法は次の通りです。
- 「共通変数」タブをクリックします。
- 入力欄にカーソルを合わせ、対象の共通変数の「追加(差し込みマーク)」をクリックすることで差し込み完了です。
システム
form spice で自動生成される値などを利用する時に使用します。
差し込むことが出来る記述については次の通りです。
- テナントID
- 利用しているテナントのIDです。
- スペースID
- アクションが所属するスペースのIDです。
- プロジェクトID
- アクションが所属するプロジェクトのIDです。
- セッションID
- 公開プロジェクトで利用しているセッションに割り当てられたIDです。
-
パスエイリアス
- 「プロジェクト詳細」で設定した「パスエイリアス」です。
設定方法は次の通りです。
- 「システム」タブをクリックします。
- 入力欄にカーソルを合わせ、対象の「追加(差し込みマーク)」をクリックすることで差し込み完了です。
※入力データは、$data["項目名"] とすることで使用できます。
項目名は、ページ作成のデータ項目の設定から指定することができます。
項目名を設定する場合はこちら
項目名を設定する場合はこちら
プログラムアクションでは、以下のように入力データを取り扱うことができます。
入力データの書き換え
//サンプルコード
// $data = 入力データの配列
function handle(array $data): array {
//値の上書き
$data["項目名"] = "新しい値";
return $data;
}
- 入力データは、$data に配列で格納されており、使用する場合はこちらから value を取り出します。取り出すには、$data["項目名"] と記述します。
- $data["対象の項目名"] = "新しい値"; とすることで、値を書き換えることも可能です。
- プログラムアクション以降で編集した $data を利用する場合は return 文で $data を返します。
他の入力サンプルにつきましては、次の通りです。
<?php
// $data = フォームデータの配列
// $context = プログラムアクションの実行時に必要な情報が入っている配列
function handle(array $data, array $context): array {
// テンポラリディレクトリのパスを取得
$tempDir = $context["temp_dir"];
// ロガーオブジェクトを取得
$logger = $context["logger"];
// テンポラリディレクトリにファイルを書き込み
file_put_contents($tempDir . "/test", "hoge");
// ロガーにログを出力
$logger->log("program action executed", ["today" => date("%Y%m%d")]);
// クライアントのリクエスト情報
$user_agent = $context["request"]["user_agent"];
$client_ip = $context["request"]["client_ip"];
$host = $context["request"]["host"];
$access_time = $context["request"]["access_time"];
// キャッシュ
$cache = $context["cache"];
$json_data = json_encode($data);
$cache->set("hoge", $json_data);
$cached_data = $cache->get("hoge");
$cached_data = json_decode($cached_data);
$logger->log("cached", ["data" => $cached_data]);
// これまでに入力されたデータ項目のフォームデータを参照
$name = $data["name"];
$age = $data["age"];
// 外部通信
$postData = json_encode(["name" => $name, "age" => $age]);
$ch=curl_init("https://example.com/api/user");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_exec($ch);
コンテキスト
プログラムアクション実行時にプログラムアクション内で参照できる情報及びログ出力のためのクラスが格納された配列です。
参照できる情報は次の通りです。
参照できる情報は次の通りです。
キー名 | 型 | 説明 |
temp_dir | 文字列 | 一時作業ディレクトリの絶対パス |
tenant_id | 文字列 | テナントID |
project_id | 文字列 | プロジェクトID |
flow_id | 文字列 | フローID |
constants | 配列 | 共通変数の連想配列 |
logger | オブジェクト |
ロガークラス
プログラムアクション内からログを出力するために使用します。 |
request | オブジェクト |
クライアントのリクエスト情報
以下の情報を取得可能です。
user_agent
・ユーザーエージェント
client_ip
・IPアドレス host
・アクセスしたホスト名
access_time
・アクセス時間(プログラムアクションを呼び出した時間)
|
cache | オブジェクト |
キャッシュクラス
フロー共通のキャッシュを登録・参照・削除する |
オブジェクト
ロガー
- 次のメソッドを持つオブジェクトです。出力した内容をログとして参照することができます。
log(string $message, $arguments = []): void
使用例
$logger->log("hoge", ["logging" => "ok"]);
//得られる結果
{"time":"2023-03-15T19:45+0900","message":"hoge", "logging":"ok"}
キャッシュ
- 次のメソッドを持つオブジェクトです。フローで共通のキャッシュを保持することができます。例えば、頻繁に外部へアクセスすることによる外部サービスへの負荷増加を防ぐ時などに使用します。キャッシュには文字列として登録されるため、文字列ではないデータ、JSONやオブジェクトなどをキャッシュに登録する場合は事前に文字列に変換してから登録する処理が必要になります。
get(string $key): ?string
set(string $key, string $value, int $ttl = 3600): void
exists(string $key): bool
delete(string $key): void
メソッドの紹介
- get
- キャッシュを参照します。
- 存在しない場合はnullを返します。
- set
- キャッシュを登録します。
- 有効期限のデフォルトは3600秒(1時間)、最大2592000秒(30日)になります。
- exists
- キャッシュが存在するかを返します。
- 存在する場合はtrue, 存在しない場合はfalseを返します。
- delete
- キャッシュを削除します。
メソッド | 引数 | 型 | 説明 |
get | key | string | 参照するキャッシュのキー名 |
set | key | string | 登録するキャッシュのキー名 |
value | string | 登録するキャッシュの値 | |
ttl | int |
期限切れとなる秒数
0以下もしくは2592000以上を指定するとデフォルト値の3600になります。 |
|
exists | key | string | 存在確認するキャッシュのキー名 |
delete | key | string | 削除するキャッシュのキー名 |
外部アクセス可能なポート番号
以下のポート番号以外は外部アクセスに使用できません。
- 22
- 80
- 443
プログラムアクション全体のタイムゾーンに関する制限
- プログラムアクション内のタイムゾーンは、Asia/Tokyo及びUTC(GMT)のみ利用可能です。
プログラムアクションで使用可能な言語のバージョンなどは次の通りです。
PHP
利用可能バージョン
バージョン | 実装日 |
8.1
|
2024/6/20 |
制限事項
PHPのタイムゾーンに関する制限
- デフォルトのタイムゾーンは、Asia/Tokyoそれ以外はUTCのみ利用可能です。
使用できない関数
- ローカルファイルアクセス関連
- chown
- chmod
- chgrp
- 外部プログラム実行関連
- exec
- passthru
- shell_exec
- system
- proc_open
- popen
- PHP設定ファイル関連
- parse_ini_file
- ini_set
- ini_get
- ini_get_all
- get_cfg_var
- ini_restore
- その他
- phpinfo
- mb_send_mail
使用可能なライブラリ
- php
- php-dev
- php-bz2
- php-bcmath
- php-calendar
- php-ctype
- php-curl
- php-dom
- php-enchant
- php-exif
- php-iconv
- php-mbstring
- php-openssl
- php-opcache
- php-pcntl
- php-posix
- php-pspell
- php-session
- php-soap
- php-tidy
- php-xml
- php-xmlreader
- php-xsl
- php-zip
- php-pear
- php-mysqli
- php-pgsql
- php-pdo
- php-pdo_mysql
- php-pdo_pgsql
入力項目の制限
アクションの名前(必須項目)
- 制約
- 256文字以下
- 全文字種登録可能
説明
- 制約
- 256文字以下
- 全文字種登録可能
ソースコード(必須項目)
- 制約
- 10,000文字以下
- 全文字種登録可能