XMLファイルをもとに、テーブルを作成する
                  今回はシンプルに、添付ファイルがない状態でのデータ移行についてご紹介します。
作業の流れは次の通りです。
①XMLファイルをもとに、プリザンターにテーブルを作成する
②データを移行するためのプログラムを作成する
③プログラムを実行し、データを移行する
※データの移行方法は、「Powershell」を使って「プリザンターのAPI」を経由した方法となります。
それではさっそく、デヂエのレコードのXMLファイルの中身を見てみましょう。
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE dezie SYSTEM "http://{サーバー名}/cbdb8/html/dezie40-20031014.dtd">
<dezie version="8.1">
  <library id="65" name="商談報告書">
    <field-list>
      <field id="4" type="Date">日付</field>
      <field id="5" type="Select">部署名</field>
      <field id="6" type="User">名前</field>
      <field id="117" type="String">お客様コード</field>
      <field id="7" type="String">お客様名</field>
      <field id="8" type="String">商談項目</field>
      <field id="9" type="Text">商談内容</field>
      <field id="10" type="Radio">見込みランク</field>
      <field id="11" type="Date">次回訪問日</field>
      <field id="12" type="Boolean">上司のチェック</field>
      <field id="136" type="File">添付ファイル</field>
      <field id="137" type="Number">金額</field>
    </field-list>
    <record-list>
      <record id="1">
        <create-time>2008-09-11T14:21:48</create-time>
        <creator id="11">佐藤 昇</creator>
        <modify-time>2022-03-22T13:41:59</modify-time>
        <value type="Date" id="4">
          <date>2022-03-23</date>
        </value>
        <value type="Select" id="5">第一営業部</value>
        <value type="User" id="6">佐藤 昇</value>
        <value type="String" id="117">123456</value>
        <value type="String" id="7">試験サイト株式会社様</value>
        <value type="String" id="8">メール To プリザンター</value>
        <value type="Text" id="9">メールサーバーからPOP3で定期的にメールを取得してプリザンターに登録します。
宛先や件名、本文などの項目を識別してそれぞれ列に分けて登録します。
添付ファイルも登録できます。何やら見たことのある記載がありますね。そうです、このフィールドのタイプ(type="Date")に沿って、プリザンターのテーブルの項目(DateA)を作成すればいいのです。
そして、作成したテーブルの項目とフィールドのID(field id="4")を紐づけます。

次に、データを移行するためのプログラムを作成していきますので、以下をご用意ください。
・先ほど作成したプリザンターのテーブル
・プリザンターのAPIキー
・デヂエからエクスポートしたXMLファイル
# 先ほど作成したテーブル
$url = 'http://{サーバー名}/pleasanter/api/items/{サイトID}/create'
# プリザンターのAPIキー
$Apikey = '6aea~'
# デヂエからエクスポートしたXMLファイルのPath
$source = 'C:\tmp\db65.xml'
# デヂエのフィールドIDと作成したテーブルの項目を紐づけ
$ConvItemsId = @{
    '4' = 'DateA'
    '5' = 'ClassA'
    '6' = 'ClassB'
    '117' = 'ClassC'
    '7' = 'ClassD'
    '8' = 'ClassE'
    '9' = 'DescriptionA'
    '10' = 'ClassF'
    '11' = 'DateB'
    '12' = 'CheckA'
    '136' = 'AttachmentsA'
    '137' = 'NumA'
}
function main {
    write-host 'main start'
    $xmlObj = [System.Xml.XmlDocument](Get-Content $source)
	# デヂエのライブラリIDを取得
    $libraryId = $xmlObj.dezie.library.GetAttribute('id')
    foreach ($record in $xmlObj.dezie.library.'record-list'.record) {
        # デヂエのレコードIDを取得
        $recordId = $record.GetAttribute('id')
        $Hash = @{}
        $ClassHash = @{}
        $DateHash = @{}
        $CheckHash = @{}
        $NumHash = @{}
        $DescriptionHash = @{}
        Write-Host 'recordId = ' $recordId
        foreach($valueItem in $record.value){
            $fieldId = $valueItem.GetAttribute('id')
            switch -Wildcard ($ConvItemsId[$fieldId]) {
                'Class*' {
                    $ClassHash.Add($ConvItemsId[$fieldId],$valueItem.innerText)
                }
                'Num*' {
                    $NumHash.Add($ConvItemsId[$fieldId],[int]$valueItem.innerText)
                }
                'Check*' {
                    if($valueItem.innerText -eq '0'){
                        $CheckHash.Add($ConvItemsId[$fieldId],$false)
                    }else{
                        $Checkhash.Add($ConvItemsId[$fieldId],$true)
                    }
                }
                'Date*' {
                    $date = [DateTime]::ParseExact($valueItem.date,'yyyy-MM-dd', $null);
                    $DateHash.Add($ConvItemsId[$fieldId],$date)
                }
                'Description*' {
                    $DescriptionHash.Add($ConvItemsId[$fieldId],$valueItem.innerText)
                }
            }
        }
        $Hash.Add('ApiVersion',1.1)
        $Hash.Add('ApiKey',$ApiKey)
        if($ClassHash.Count -gt 0) {
            $Hash.Add('ClassHash',$ClassHash)
        }
        if($NumHash.Count -gt 0) {
            $Hash.Add('NumHash',$NumHash)
        }
        if($CheckHash.Count -gt 0) {
            $Hash.Add('CheckHash',$CheckHash)
        }
        if($DateHash.Count -gt 0) {
            $Hash.Add('DateHash',$DateHash)
        }
        if($DescriptionHash.Count -gt 0) {
            $Hash.Add('DescriptionHash',$DescriptionHash)
        }
        $requestBody = $Hash | ConvertTo-Json -Depth 3
        $Byte = [System.Text.Encoding]::UTF8.GetBytes($requestBody)
        $res = Invoke-RestMethod -Uri $url -ContentType 'application/json' -Method POST -Body ${Byte}
        Write-Host 'Reg to Pleasanter Comp'
    }
    write-host 'main end'
}実行してみましょう。


想定通り登録できました!!
なお、プリザンターのAPIキーを使用してレコードを作成した場合、作成者の名前はAPIキーを発行したユーザの名前となりますので、ご留意ください。
まとめ
                  いかがでしたか?
「XMLファイル」ということで少し身構えてしまうかもしれませんが、デヂエの項目とプリザンターの項目が紐づけられれば移行は難しくないでしょう。
デヂエの販売終了やサポート終了、Notesのサポート終了にてデータへアクセスできなくなる前に、是非一度お試しください。
他システム、データベースからプリザンターへの移行でお困りの際は、是非ご相談ください。
また、導入の支援や、スクリプト開発などでお困りの場合は、当社で支援もいたします。
こちらは無料ではなく、有料になりますのでご了承ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆                

 MAIL
MAIL


XMLファイルでのデヂエからのデータ移行
こんにちは、シーイーシーカスタマサービスの森山です。
前回に引き続き、今回も「サイボウズデヂエ8からプリザンターへの移行方法」についてご紹介したいと思います。
今回は「XMLファイル」での移行方法です。
前回ご紹介したCSVファイルでの移行方法は、プリザンターの標準機能「データのエクスポート・インポート」を使用した方法だったため、難易度はそれほど高くありませんでした。
今回ご紹介するXMLファイル編は若干難易度は上がりますが、ルールさえ分かれば移行できるでしょう。