$ps.file.moveDirectory
概要¶
サーバスクリプトで$ps.fileを指定ディレクトリの名称変更または移動を行います。
前提条件¶
Script.jsonのDisableServerScriptFileを false に設定することが必要です。
構文¶
パラメータ¶
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| section | string | ○ | セクション名。セクションについては$ps.fileの「セクションについて」を参照ください。 |
| old_name | string | ○ | 旧ディレクトリ名。ディレクトリの区切り文字はWindow、Linux共に「/」を利用する。 |
| new_name | string | ○ | 新ディレクトリ名。ディレクトリの区切り文字はWindow、Linux共に「/」を利用する。 |
戻り値¶
ディレクトリを移動できた場合は true、移動できなかった場合は false を返却します。
例外¶
C#内で例外が発生した場合はサーバスクリプト内に例外クラス名とエラーメッセージをErrorオブジェクトに入れて例外を発生させます。
使用例¶
以下の例では、Webサーバ内の指定ディレクトリ名を変更します。
JavaScript¶
以下の例では、Webサーバ内の指定ディレクトリを移動します。
JavaScript¶
サンプルコード¶
1. 案件を完了にしたとき、一時ファイルを消して作業フォルダを保管する
案件を「完了」にしたとき、作業フォルダ(work)の一時ファイル(.tmp・.bak)を$ps.file.removeFileで消してから、作業フォルダを$ps.file.moveDirectoryで保管フォルダ(archive/work_YYYYMMDD)へ移します。
実務での使いどころ¶
完了した案件の作業ファイルを、完了した日の名前で保管し、作業中のフォルダを空けられます。保管する前に一時ファイルを消すので、不要なファイルが残りません。標準の添付ファイルはレコードに付けて保存するもので、サーバのフォルダを決まった形で作ったり、移したり、消したりはできません。
事前準備¶
1:Script.jsonのDisableServerScriptFileをfalseにし、ServerScriptFilePathを設定して、プリザンターを再起動してください($ps.fileの前提条件)。案件のファイル置き場は、このフォルダの下に案件コードの名前のセクションとして作られます。
2:「案件管理」テーブル(期限付きテーブル)で、以下を設定し、エディタに表示してください。
| 項目コード | 内容 |
|---|---|
| 分類A(ClassA) | 案件コード(半角英数字と_・-・.) |
| 状況(Status) | 「100,見積中」「200,受注」「300,提出」「900,完了」「920,失注」 |
3:「案件管理」テーブルにサーバスクリプトを登録します。
3-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
3-2:タイトル: 任意の名前(例:archiveWorkFolder)
3-3:スクリプト: 下記サンプルコードを貼り付け
3-4:条件: 「更新前」にチェック
JavaScript¶
// 「完了」の状況の値と、保管する前に消す一時ファイル
const COMPLETED = 900;
const TEMP_FILE = /\.(tmp|bak)$/i;
// 案件を完了にしたとき、一時ファイルを消してから、作業フォルダ(work)を保管フォルダ(archive/work_YYYYMMDD)へ移す
function archiveWorkFolder() {
// saved は更新前の値。完了の案件を保存し直したときは何もしない
if (model.Status !== COMPLETED || Number(saved.Status) === COMPLETED) {
return;
}
const section = model.ClassA;
if (!/^[A-Za-z0-9_.-]+$/.test(section || '')) {
context.Error('案件コードは、半角英数字と _ - . で入力してください。');
return;
}
const temps = Array.from($ps.file.getFileList(section, 'work')).filter((file) => TEMP_FILE.test(file));
for (const file of temps) {
// removeFile は、ファイルが無いときは false を返す
$ps.file.removeFile(section, `work/${file}`);
}
const pad = (n) => String(n).padStart(2, '0');
const now = new Date();
const archive = `archive/work_${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}`;
// moveDirectory は、移動先の親フォルダが無ければ作る。移動元が無いとき・移動先がすでにあるときは false を返す
if (!$ps.file.moveDirectory(section, 'work', archive)) {
context.Error(`作業フォルダ(work)を ${archive} に移せませんでした。`);
return;
}
logs.LogInfo(`[archiveWorkFolder] ${section}/work を ${archive} に移しました(一時ファイル ${temps.length} 件を削除)`, 'main');
}
archiveWorkFolder();
注記¶
moveDirectoryは、移動先の親フォルダが無ければ作ります。移動元が無いとき・移動先がすでにあるときはfalseを返し、このサンプルはcontext.Errorで止めます。removeFileは、ファイルが無いときはfalseを返します。- 状況が「完了」に変わる更新のときのみ動きます。APIで状況を変えたときも動きます。
- セクション名・フォルダ名に使えるのは、半角英数字と
_・-・.のみです。日本語などを使うと例外になるため、案件コードを先に確かめています。 - 「案件のファイル置き場」のサンプルは4本あり、同じ「案件管理」テーブルに並べて使えます:createSection(受注)・copyFile(提出)・moveDirectory(完了)・removeSection(失注)。同じ条件のサーバスクリプトはまとめて実行されるため、ファイルの先頭で宣言する名前が重ならないようにしています。
対応バージョン¶
| 対応バージョン | 内容 |
|---|---|
| 1.4.12.0 以降 | 機能追加 |
