皆さん、こんにちは!

皆さんに私のプロジェクトをご紹介したいと思います。

かつて私は、職場でドキュメントを作成し、それに氏名、誕生日、住所など、人に関する情報を挿入するといった、平凡なタスクを担当していました。 そこで、簡単に処理しようと考えた私は、アプリケーションを書きました。

このアイデアは斬新でないどころか、他の言語ですでに実装されていました。 そこで私は、似たようなツールを Cache Object Script で開発しようと考えたのです。 コンセプトは以下のとおりです。

特殊なセマンティクスを用いて、LibreOffice か Microsoft Word でテンプレートを作成します。

そして、テンプレートで使用されるすべての変数が定義されるメソッドまたはプロシージャを書きます。 メソッドは、[ProcedureBlock = 0] キーワードを使って宣言する必要があります。そうしないと、テンプレートを表示する最中に未定義のエラーが出てしまいます。

メソッドの中で、以下のコマンドを使ってドキュメントをレンダリングします。

set error =  ##class(DocumentTemplate).RenderDocumentFromTemplate("<full-path-to-your-template>","<full-path-to-your-rendered-document>")

テンプレートはシンプルな odt ドキュメントか docx ドキュメントです。

変数や式を出力するには、次に示すとおりに変数を二重中かっこで囲みます。

{{ firstName }} の生年月日: {{ $E($ZD(date,8),1,4)) }}。

生成されるデータのスタイルは、最初の中かっこのスタイルと同じスタイルになります。

私が開発したツールを使えば、添え字付きの変数を利用することで、テンプレートの特定の部分 (テーブルの行、パラグラフ、単純な単語など) を繰り返し出力できます。  下はその例です。

これが以下のようにレンダリングされます。

レンダリング中には、'index'  が宣言され、row 変数をイテレーションするのに使用されます。  上の例にある List のアイテムが赤色で筆記体になっているのは、最初のかっこのスタイルが反映されているためです。 List のアイテムとタグ付の行は、他の文字が含まれていないため、生成されるドキュメントからは除外されています。  「If」タグは条件付き出力に使用されるもので、有効な COS 式であれば何でも渡すことができます。 「Order」タグと「if」タグは、お互いの中で入れ子にできます。

また、「set」タグも実装しています。 変数はテンプレートの中で直接割り当てて、ドキュメント全体で使用することができます。 私は行を列挙するのに使用しています。

残念ながら、期待していたほどパーフェクトには機能してくれません。 テンプレートの中でテンプレートのタグと普通のテキストを混ぜ合わせると、レイアウトが崩れ、使い物にならないドキュメントが出来てしまう可能性があります。 ですが、簡単なドキュメントであれば十分に機能してくれます。

https://github.com/azenkov1991/DocumentTemplate