2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プリザンターのサーバスクリプトで添付ファイルの扱いをちょっとラクにする

Last updated at Posted at 2024-12-26

はじめに

プリザンターのサーバスクリプト、modelで取得出来る添付ファイルの項目はJSON文字列がそのままセットされているため若干扱いが面倒・・・。毎回JSON.parseで変換するのは地味に手間がかかるので、拡張サーバスクリプトを使用して、一括で変換するテクニックを紹介します。

実装の中身

まずは、格納されているデータを見てみます。

[{"Guid":"47BFA611B94B4703865019110F4B3DFD","Name":"ED-038-datasheet.pdf","Size":1520972,"Deleted":true,"HashCode":"23pz2IFY4jenPCGgU7L2ci8Z/Uth2eReoBer8Sm+wVQ="}]

普通のJSONです。これなら素直にパースできますね。modelのプロパティやそのものを直接触ると面倒なので、Attachmentsなプロパティだけをmodel_attachmentsという変数を作ってそちらにセットしてみます。
サーバスクリプトの条件は「画面表示の前」や「行表示の前」にセットすればOKです。他の場所でもmodelにアクセス出来る条件ならどこでも使えます。

const regex = new RegExp('^Attachments');
let model_attachments = {};

for (const [key, value] of Object.entries(model)) {
    if (regex.test(key)) {
        model_attachments[key] = JSON.parse(value || '[]');
    }
}

AttachmentsA~ZAttachments001~999のうちページに表されているもの(=modelに含まれているもの)だけが、model_attachmentsにセットされます。表示されていないものを触りたいときはview.AlwaysGetColumnsを使って対象を追加する方法も吊しのまま使えるようになっています。

拡張サーバスクリプトにしてみた

それぞれのサイトに追加していくもの面倒なので、拡張サーバスクリプトにして組み込んでみました。
条件は、「画面表示の前」と「秒表示の前」にしていますが、必要に応じて追加・変更してみてください。

ModelAttachmentsParse.json
{
    "Name": "modelの添付ファイルのJSONをオブジェクトに変換する",
    "BeforeOpeningPage": true,
    "BeforeOpeningRow": true,
    "Body": "// Write an arbitrary script."
}
ModelAttachmentsParse.json.js
let model_attachments = {};
let success_parse = false;
//エラーが出ると面倒なのでtry-catchで囲っておく
try {
    const regex = new RegExp('^Attachments');
    for (const [key, value] of Object.entries(model)) {
        if (regex.test(key)) {
             model_attachments[key] = JSON.parse(value || '[]');
        }
    }
    success_parse = true;
} catch(e) {
    success_parse = false;
    context.Error(e.Stack);
}

拡張サーバスクリプトはエラーを吐くと全部が止まってしまって面倒なので、try-catchで囲っています。また、正常に実行されることを確認するために、success_parseに実行に成功したかどうかをtrue/falseでセットしています。

まとめ

サーバスクリプトでの添付ファイルの扱いをちょっとしたサーバスクリプトで簡単にしてみました。この方法、実は別の項目でも応用が利くのですが、それはまた別の機会に紹介します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?