コンテンツにスキップ

$ps.file.removeSection

概要

サーバスクリプトで$ps.fileを使用して指定セクションを削除します。セクション内部にサブディレクトリやファイルがあっても全て削除します。

前提条件

Script.jsonのDisableServerScriptFileを false に設定することが必要です。

構文

$ps.file.removeSection(section)

パラメータ

パラメータ 型 必須 説明
section string ○ セクション名。セクションについては$ps.fileの「セクションについて」を参照ください。

戻り値

セクションを削除できた場合は true、削除できなかった場合は false を返却します。

例外

C#内で例外が発生した場合はサーバスクリプト内に例外クラス名とエラーメッセージをErrorオブジェクトに入れて例外を発生させます。

使用例

以下の例では、Webサーバ内の指定セクションを削除します。

JavaScript
$ps.file.removeSection('01_develop');

サンプルコード

1. 案件を失注にしたとき、提出した版が無ければファイル置き場ごと消す

案件を「失注」にしたとき、提出した版のフォルダ(submitted の下)を$ps.file.getDirectoryListで確かめます。無ければ$ps.file.removeSectionでファイル置き場ごと消し、あれば提出した版を残して、受領した資料(received)と作業中(work)のフォルダを$ps.file.removeDirectoryで消します。

実務での使いどころ

失注した案件のファイルを片付けられます。顧客に出した版は、あとで問い合わせがあったときのために残し、それ以外を消します。標準の添付ファイルはレコードに付けて保存するもので、サーバのフォルダを決まった形で作ったり、移したり、消したりはできません。

事前準備

1:Script.jsonのDisableServerScriptFileをfalseにし、ServerScriptFilePathを設定して、プリザンターを再起動してください($ps.fileの前提条件)。案件のファイル置き場は、このフォルダの下に案件コードの名前のセクションとして作られます。

2:「案件管理」テーブル(期限付きテーブル)で、以下を設定し、エディタに表示してください。

項目コード 内容
分類A(ClassA) 案件コード(半角英数字と_・-・.)
状況(Status) 「100,見積中」「200,受注」「300,提出」「900,完了」「920,失注」

3:「案件管理」テーブルにサーバスクリプトを登録します。

3-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
 3-2:タイトル: 任意の名前(例:removeProjectFolders)
 3-3:スクリプト: 下記サンプルコードを貼り付け
 3-4:条件: 「更新前」にチェック

JavaScript
// 「失注」の状況の値と、失注で消すフォルダ
const LOST = 920;
const WORK_FOLDERS = ['received', 'work'];  // 受領した資料・作業中

// 案件を失注にしたとき、提出した版が無ければファイル置き場ごと消し、あれば作業中のフォルダのみ消す
function removeProjectFolders() {
    // saved は更新前の値。失注の案件を保存し直したときは何もしない
    if (model.Status !== LOST || Number(saved.Status) === LOST) {
        return;
    }
    const section = model.ClassA;
    if (!/^[A-Za-z0-9_.-]+$/.test(section || '')) {
        context.Error('案件コードは、半角英数字と _ - . で入力してください。');
        return;
    }
    // submitted の下の、提出した日のフォルダの一覧(フォルダ名のみ。無いときは空)
    const versions = Array.from($ps.file.getDirectoryList(section, 'submitted'));
    if (versions.length === 0) {
        // removeSection は、中のフォルダとファイルもまとめて消す
        if (!$ps.file.removeSection(section)) {
            context.Error(`ファイル置き場(${section})を消せませんでした。`);
        }
        return;
    }
    // removeDirectory も、中のファイルもまとめて消す。提出した版(submitted)は残す
    for (const folder of WORK_FOLDERS) {
        if (!$ps.file.removeDirectory(section, folder)) {
            context.Error(`フォルダ(${section}/${folder})を消せませんでした。`);
            return;
        }
    }
    logs.LogInfo(`[removeProjectFolders] ${section} の提出した版(${versions.join('、')})を残し、作業中のフォルダを消しました`, 'main');
}

removeProjectFolders();

注記

  • removeSection・removeDirectoryは、中のフォルダとファイルもまとめて消します。消したファイルは元に戻せません。
  • getDirectoryListはフォルダ名のみを返します。フォルダが無いときは空の配列です。
  • 無いセクション・フォルダを消そうとしたときもtrueが返ります。
  • 状況が「失注」に変わる更新のときのみ動きます。APIで状況を変えたときも動きます。
  • セクション名・フォルダ名に使えるのは、半角英数字と_・-・.のみです。日本語などを使うと例外になるため、案件コードを先に確かめています。
  • 「案件のファイル置き場」のサンプルは4本あり、同じ「案件管理」テーブルに並べて使えます:createSection(受注)・copyFile(提出)・moveDirectory(完了)・removeSection(失注)。同じ条件のサーバスクリプトはまとめて実行されるため、ファイルの先頭で宣言する名前が重ならないようにしています。

対応バージョン

対応バージョン 内容
1.4.12.0 以降 機能追加

関連情報