クリエータ(.NET)を使用した設定ファイルの作成

明けましておめでとうございます。
今回から開発者ブログに参加することになった製品開発担当の加々知です。

クリエータからマッピングツールを使用しないで設定ファイルを作成する方法を紹介します。
帳票クリエータ Ver.3 のデベロッパーズマニュアルの[DocCreatorを使用した開発] - [単票出力サンプル] の設定ファイルを作成する方法を書いていこうと思います。

言語はC#(7.2以上)を使用します。

[単票出力サンプル] で使用している設定ファイルをテキストエディタで開くと以下のような内容になっています。

<?xml version="1.0" encoding="utf-8"?>
<DocCreatorConf version="3.1" xmlns="http://schema.hos.co.jp/dcx/3.1/" scriptType="application/ecmascript" creationTime="2012-08-14T17:26:57+09:00">
  <Script>var today = {
      year: date('yyyy'),
      month: date('MM'),
      day: date('dd')
    }
</Script>
  <DocCreator formPath="c:\DcHokenSample" documentPath="c:\DcHokenSample" sourcePath="c:\DcHokenSample">
    <FileOutJob jobName="sample_binary" fileName="sample">
      <Document type="BINARY" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_xml" fileName="sample">
      <Document type="XML" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_pdf" fileName="sample">
      <Document type="PDF" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_tiff" fileName="sample">
      <Document type="TIFF" documentName="保険サンプル" />
    </FileOutJob>
  </DocCreator>
  <RecordSet name="保険データ" type="CSV" selector="24">
    <Property name="Delimiter" value="," />
    <Property name="Encoding" value="shift_jis" />
    <Property name="Header" value="True" />
    <Source valueAs="FILE" valueType="TEXT" value="HokenSample.csv" />
  </RecordSet>
  <Report name="レポート1">
    <Form name="保険サンプル" recordSet="保険データ" listener="new PageOutOnFormFilled()">
      <Layout>HokenSample.cfx</Layout>
      <Field valueType="SCRIPT" name="年">today.year</Field>
      <Field valueType="SCRIPT" name="月">today.month</Field>
      <Field valueType="SCRIPT" name="日">today.day</Field>
      <Field name="主契約">23</Field>
      <Field name="回払1">3</Field>
      <Field name="定期保険特約">16</Field>
      <Field name="保険料定期一括払制度">6</Field>
      <Field name="年間削除">17</Field>
      <Field name="新疾病1">21</Field>
      <Field name="新成人病1">18</Field>
      <Field name="不支払特定部位">19</Field>
      <Field name="回払2">15</Field>
      <Field name="被保険者">10</Field>
      <Field name="保険契約者">20</Field>
      <Field name="次回払込保険料">22</Field>
      <Field name="契約番号">24</Field>
      <Field name="親権者又は後見人">4</Field>
      <Field name="月度">7</Field>
      <Field name="支店名">8</Field>
      <Field name="支部">13</Field>
      <Field name="取扱者">11</Field>
      <Field name="証券番号1">1</Field>
      <Field name="証券番号2">2</Field>
      <Field name="新疾病2">5</Field>
      <Field name="新成人病2">0</Field>
    </Form>
  </Report>
</DocCreatorConf>

これをC#を使ってゴリゴリ書いて設定ファイルを作成していこうと思います。
まず参照設定に"Hos.CnDraw.dll"と"Hos.CxCommon.dll"と”Hos.DocCreator.dll”を追加します。
次にusingステートメントに以下を追加します。

using Hos.CnDraw.Constants;
using Hos.DocCreator;
using Hos.DocCreator.Conf;
using Hos.DocCreator.Constants;
// ↓ は長くなってしまうので別名として宣言
using Field = Hos.DocCreator.Conf.CnConfiguration31.Reports.Report.Forms.Form.Fields.Field;
using Forms = Hos.DocCreator.Conf.CnConfiguration31.Reports.Report.Forms;
using Jobs = Hos.DocCreator.Conf.CnConfiguration31.DocCreator.Jobs;
using RecordSets = Hos.DocCreator.Conf.CnConfiguration31.RecordSets;

では実際にコードを記述していきます。

// <DocCreatorConf>要素を作成
var conf31 = new CnConfiguration31();
// <Script>要素を作成
conf31.ScriptElement = new CnConfiguration31.GlobalScript();
// <Script>要素の内容を設定
conf31.ScriptElement.Value = "var today = {" +
      "year: date('yyyy'), month: date('MM'), day: date('dd')}";

// <DocCreator>要素を作成
conf31.DocCreatorElement = new CnConfiguration31.DocCreator();
// formPath属性
conf31.DocCreatorElement.FormPath = new List<string>() { @"c:\DcHokenSample" };
// documentPath属性
conf31.DocCreatorElement.DocumentPath = @"c:\DcHokenSample";
// sourcePath属性
conf31.DocCreatorElement.SourcePath = new List<string>() { @"c:\DcHokenSample" };

// <FileOutJob>要素を作成
// BINARY形式
// 引数 : jobName属性、<Document>要素のtype属性
var binary = new Jobs.FileOutJob("sample_binary", ConFileType.Binary);
// fileName属性
binary.FileName = "sample";
// documentName属性
binary.DocumentElement.DocumentName = "保険サンプル";
// XML形式
var xml = new Jobs.FileOutJob("sample_xml", ConFileType.Xml);
xml.FileName = "sample";
xml.DocumentElement.DocumentName = "保険サンプル";
// PDF形式
var pdf = new Jobs.FileOutJob("sample_pdf", ConFileType.Pdf);
pdf.FileName = "sample";
pdf.DocumentElement.DocumentName = "保険サンプル";
// TIFF形式
var tiff = new Jobs.FileOutJob("sample_tiff", ConFileType.Tiff);
tiff.FileName = "sample";
tiff.DocumentElement.DocumentName = "保険サンプル";

// <DocCreator>要素の子要素として<FileOutJob>要素を追加
conf31.DocCreatorElement.FileOutJobElements = new CnConfiguration31.DocCreator.Jobs<Jobs.FileOutJob>();
conf31.DocCreatorElement.FileOutJobElements.Add(binary);
conf31.DocCreatorElement.FileOutJobElements.Add(xml);
conf31.DocCreatorElement.FileOutJobElements.Add(pdf);
conf31.DocCreatorElement.FileOutJobElements.Add(tiff);

// type属性がCSVの<RecordSet>要素を作成
var csv = new RecordSets.RecordSetCsv("保険データ");
// <RecodeSet>要素の子要素の<Property>要素を設定
csv.Delimiter = ",";
csv.Encoding = Encoding.GetEncoding("shift_jis");
csv.Header = true;
// <RecodeSet>要素の子要素の<Source>要素を作成
csv.SourceElement = new RecordSets.AbstractRecordSet.Source();
// valueAs属性
csv.SourceElement.ValueAs = ConValueSemantics.File;
// valueType属性
csv.SourceElement.ValueType = ConValueType.Text;
// value属性
csv.SourceElement.Value = "HokenSample.csv";

// <DocCreatorConf>要素の子要素として<RecordSet>要素を追加
conf31.RecordSetElements = new RecordSets();
conf31.RecordSetElements.Add(csv);

// <Report>要素を作成
var report = new CnConfiguration31.Reports.Report("レポート1");
// <DocCreatorConf>要素の子要素として<Report>要素を追加
conf31.ReportElements = new CnConfiguration31.Reports();
conf31.ReportElements.Add(report);

// <Form>要素を作成
// 引数 : name属性
var form = new Forms.Form("保険サンプル");
// recordSet属性
form.RecordSet = csv.Name;
// listener属性
form.Handler = new List<string>() { "new PageOutOnFormFilled()" };

// <Report>要素の子要素として<Form>要素を追加
report.FormElements = new Forms();
report.FormElements.Add(form);

// <Layout>要素を作成
form.LayoutElement = new Forms.Form.Layout();
 // <Layout>要素の内容を設定
form.LayoutElement.Value = "HokenSample.cfx";

// <Field>要素を作成
form.FieldElements = new Forms.Form.Fields<Field>
    {
        new Field("年") { ValueType = ConValueType.Script, Value = "today.year" },
        new Field("月") { ValueType = ConValueType.Script, Value = "today.month" },
        new Field("日") { ValueType = ConValueType.Script, Value = "today.day" },
        new Field("新成人病2") { Value = "0" },
        new Field("証券番号1") { Value = "1" },
        new Field("証券番号2") { Value = "2" },
        new Field("回払1") { Value = "3" },
        new Field("親権者又は後見人") { Value = "4" },
        new Field("新疾病2") { Value = "5" },
        new Field("保険料定期一括払制度") { Value = "6" },
        new Field("月度") { Value = "7" },
        new Field("支店名") { Value = "8" },
        new Field("被保険者") { Value = "10" },
        new Field("取扱者") { Value = "11" },
        new Field("支部") { Value = "13" },
        new Field("回払2") { Value = "15" },
        new Field("定期保険特約") { Value = "16" },
        new Field("年間削除") { Value = "17" },
        new Field("新成人病1") { Value = "18" },
        new Field("不支払特定部位") { Value = "19" },
        new Field("保険契約者") { Value = "20" },
        new Field("新疾病1") { Value = "21" },
        new Field("次回払込保険料") { Value = "22" },
        new Field("主契約") { Value = "23" },
        new Field("契約番号") { Value = "24" }
    };
// 設定ファイルの保存
conf31.Save(@"保存先\HokenSample.dcx");

ソースを見てもらうとわかると思いますが(わからなかったらごめんなさいっっっ)
設定ファイルのXMLの構成と設定ファイルを作成する際のクラス構成は基本合わせてあります。
設定ファイルが DocCreatorConf/DocCreator/FileOutJob だと
クラスの方は    CnConfiguration31.DocCreator.Jobs.FileOutJob になります。
(FileOutJobは複数設定が可能なため複数設定用のJobsが親クラスとして存在します)
設定ファイルのXMLの構成に合わせて作成していけばスムーズに作成出来ると思います。

上記のコードを実行して保存された設定ファイルの中身は以下になります。

<?xml version="1.0" encoding="utf-8"?>
<DocCreatorConf version="3.1" xmlns="http://schema.hos.co.jp/dcx/3.1/" creationTime="2018-12-20T11:58:11+09:00">
  <Script>var today = {year: date('yyyy'), month: date('MM'), day: date('dd')}</Script>
  <DocCreator formPath="c:\DcHokenSample" documentPath="c:\DcHokenSample" sourcePath="c:\DcHokenSample">
    <FileOutJob jobName="sample_binary" fileName="sample">
      <Document type="BINARY" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_xml" fileName="sample">
      <Document type="XML" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_pdf" fileName="sample">
      <Document type="PDF" documentName="保険サンプル" />
    </FileOutJob>
    <FileOutJob jobName="sample_tiff" fileName="sample">
      <Document type="TIFF" documentName="保険サンプル" />
    </FileOutJob>
  </DocCreator>
  <RecordSet name="保険データ" type="CSV">
    <Property name="Delimiter" value="," />
    <Property name="Encoding" value="shift_jis" />
    <Property name="Header" value="True" />
    <Source valueAs="FILE" valueType="TEXT" value="HokenSample.csv" />
  </RecordSet>
  <Report name="レポート1">
    <Form name="保険サンプル" recordSet="保険データ" listener="new PageOutOnFormFilled()">
      <Layout valueAs="FILE" valueType="TEXT">HokenSample.cfx</Layout>
      <Field valueType="SCRIPT" name="年">today.year</Field>
      <Field valueType="SCRIPT" name="月">today.month</Field>
      <Field valueType="SCRIPT" name="日">today.day</Field>
      <Field name="新成人病2">0</Field>
      <Field name="証券番号1">1</Field>
      <Field name="証券番号2">2</Field>
      <Field name="回払1">3</Field>
      <Field name="親権者又は後見人">4</Field>
      <Field name="新疾病2">5</Field>
      <Field name="保険料定期一括払制度">6</Field>
      <Field name="月度">7</Field>
      <Field name="支店名">8</Field>
      <Field name="被保険者">10</Field>
      <Field name="取扱者">11</Field>
      <Field name="支部">13</Field>
      <Field name="回払2">15</Field>
      <Field name="定期保険特約">16</Field>
      <Field name="年間削除">17</Field>
      <Field name="新成人病1">18</Field>
      <Field name="不支払特定部位">19</Field>
      <Field name="保険契約者">20</Field>
      <Field name="新疾病1">21</Field>
      <Field name="次回払込保険料">22</Field>
      <Field name="主契約">23</Field>
      <Field name="契約番号">24</Field>
    </Form>
  </Report>
</DocCreatorConf>

作成した設定ファイルを使用して帳票出力する場合は
"CnDocCreator.Configuration"に作成した設定ファイルを渡して"Output"をすれば出来ます。

// クリエータのインスタンスを生成
using (CnDocCreator creator = new CnDocCreator())
{
    // 設定ファイルを設定
    creator.Configuration = conf31;
    creator.Initialize();
    creator.Output();
}

マッピングツールを使用しないで設定ファイルを作成する場合の参考になればと思います。
それでは、また次回。(・ω・)ノシ