ブログ

2022/03/24
【プリザンター】 第141回)デヂエからプリザンターへの移行~XMLファイル編

XMLファイルでのデヂエからのデータ移行

こんにちは、シーイーシーカスタマサービスの森山です。

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

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のサポート終了にてデータへアクセスできなくなる前に、是非一度お試しください。

他システム、データベースからプリザンターへの移行でお困りの際は、是非ご相談ください。
また、導入の支援や、スクリプト開発などでお困りの場合は、当社で支援もいたします。
こちらは無料ではなく、有料になりますのでご了承ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

PAGE TOP