EC-CUBEで商品リストをエクスポートしてインポートする(orzな結果)

木曜日, 6月 25th, 2009

こんにちは、なかわけです。

仕事でEC-CUBEを使い始めているのですが、使い方が難しく(本当は簡単なんですが、社内で使おうとしている環境が複雑なため難しくなっている)、調べながら作業してます。

その中で、商品リストをエクスポートして別のサーバにインポートしなければいけないことになったので、作業ログを残しておこうと思います。

以下、作業ログ。作業しながら書いているので乱筆(?)乱文です。あとで清書する気なんてさらさらないぜ!

AサーバからBサーバに商品リストを移行する作業。Aサーバにある商品をcsvでエクスポートしてBサーバにインポートします。

Aサーバのバージョンは2.3.4で書き出される項目名が57項目。Bサーバのバージョンは2.4.0で書き出される項目名は58項目。バージョンによって項目数が違うことが判明。このままBサーバにインポートしてもエラーが起こることは明確です。

順番も関係あるため、エクスポートするAサーバの商品管理>商品登録CSV(http://Aserver.com/admin/products/upload_csv.php)の項目と順番を確認しながら、コンテンツ管理>CSV出力項目設定>商品管理(http://Aserver.com/admin/contents/csv.php)で出力項目と順番を設定します。

商品リストcsvをダウンロードするには、商品管理>商品マスタ(http://Aserver.com/admin/products/index.php)で一度、検索条件をなにも指定しないで検索します(検索条件を指定してしまうと条件で絞られた結果のcsvになります)。そうすると結果表示の一番上の「検索結果一覧X件が該当しました。」の右にCSV DOWNLOADボタンが表示されますので、そのボタンをクリックするとcsvがダウンロードされます。

Aサーバからエクスポートしたcsvファイルをテキストエディタで開き(OfficeExcelはダメ)、正規表現で置換と思いきや、今回追加する項目(備考欄(SHOP専用)という項目)が単純だったので、普通のテキスト置換でできた。

エクスポートされたcsvファイルをよく見てみたところ、同じ商品IDが複数あることが判明。

どうやら商品IDに紐付いている規格が商品として書き出されているようだ。

たとえば、

ういろうという商品があってとして、さくら、抹茶、白、ニッキという規格があるとするならば、csvでは、

“1″,”1″,”さくら”,”",”ういろう”,~(省略)~,”あまくておいしい名古屋名物”~(省略)
“1″,”2″,”抹茶”,”",”ういろう”,~(省略)~,”あまくておいしい名古屋名物”~(省略)
“1″,”3″,”白”,”",”ういろう”,~(省略)~,”あまくておいしい名古屋名物”~(省略)
“1″,”4″,”ニッキ”,”",”ういろう”,~(省略)~,”あまくておいしい名古屋名物”~(省略)

というようになる。

当然システム的にIDはユニークである必要があるのでこのままインポートしてもエラーか正常に読み込まれないまま終わる。

重複している商品IDに関しては、適当に一つ生かしておき残りを削除してインポートしてみる。

インポート自体はうまく行えたが、登録された情報がおかしい。商品コードや価格が抜けている状態になっている商品もある。
全部勘違いでした。

項目数と項目の順番が合っていれば正常にインポートできます。

ただしcsvをダウンロードした後で商品を編集した際、2カラム目の(商品)規格IDが変わってしまう場合があります。(商品)規格IDがわかればファイルを開いて編集、わからなければもう一度Aサーバからcsvをダウンロードしましょう。

また商品リストをBサーバにインポートする前にカテゴリや規格を先に登録しておく必要があります。

さらに言うとエクスポートされたcsvには商品の画像ファイル名も含まれているため、BサーバにAサーバと同じ場所に商品画像を移しておく必要があります。

では、作業が前後しましたがAサーバの商品画像をBサーバに移行しましょう。
これは普通にAサーバにFTPで接続して画像(http://Aserver.com/upload/save_image/の下)をダウンロードし、それを同じくBサーバ にFTPで接続してアップロード(http://Bserver.com/upload/save_image/の下)すればOK(のハズ!?)

次に、カテゴリリストの移行ですが、これは基本的に商品リストの移行と同じ過程です(のハズ)。

Aサーバの商品管理>カテゴリ登録CSV(http://Aserver.com/admin/products/upload_csv_category.php)の項目と順番を確認しながら、コンテンツ管理>CSV出力項目設定>商品管理(http://Aserver.com/admin/contents/csv.php?tpl_subno_csv=category&transactionid=******)で出力項目と順番を設定する。

ちなみに、Aサーバでは「カテゴリID」「カテゴリ名」「親カテゴリID」3項目がデフォルトの出力内容でしたが、Bサーバ(EC-CUBEのバージョンが新しい方)では「階層」「表示ランク」という項目必要でした。幸いAサーバの方にも「階層」「表示ランク」が出力可能項目として用意してあったので、順番を合わせて追加しました。

そして、Aサーバからカテゴリリストcsvをエクスポート。エクスポートは商品管理>カテゴリ管理(http://Aserver.com/admin/products/category.php)のCSV DOWNLOADボタンをクリック。

Bサーバにインポートしてみたが、エラーが発生。エラー内容は「※ 項目数が5個検出されました。項目数は3個になります。」とのこと。「階層」「表示ランク」は新しいバージョンでも使ってないようでした。(何に使うんだ?)

Aサーバからエクスポートしたcsvの「階層」と「表示ランク」を削除して再インポート。再エラー。「■2行目でエラーが発生しました。※ 既に同じ内容の登録が存在します。<br>」(<br>はいらんだろ)

Bサーバにあるデフォルトのカテゴリを調べてみましたが、Aサーバと内容が同じカテゴリがなかったのでエラーが起こるはずがないのに・・・。とりあえずBサーバのデフォルトカテゴリ(と商品)を削除して再再インポート。

再々エラー。エラー内容は先ほどと同じく「■2行目でエラーが発生しました。※ 既に同じ内容の登録が存在します。<br>」(<br>はいらんだろ2)

原因がわからなかったので、項目も少なかったのでとりあえず手動でカテゴリを作成しその状態のBサーバのcsvとAサーバからエクスポートしたcsvを見比べることにしてみました。
その結果、カテゴリIDの数字くらいしか違いがありませんでした。

Aサーバのcsv
“カテゴリID”,”カテゴリ名”,” 親カテゴリID”
“7″,”きしめん”,”0″
“6″,”手羽先”,”0″

Bサーバのcsv
“カテゴリID”,”カテゴリ名”,” 親カテゴリID”
“2″,”きしめん”,”0″
“1″,”手羽先”,”0″

ここで実験としてBサーバのcsvをなにも編集しないで、同じBサーバにインポートしてみると、正常にインポートされました・・・。

さらに実験で、BサーバのcsvのカテゴリIDをAサーバと同じ値にしてインポートしてみます。つまりAサーバのcsvと同じ内容。

“カテゴリID”,”カテゴリ名”,” 親カテゴリID”
“7″,”きしめん”,”0″
“6″,”手羽先”,”0″

インポート自体は行えましたが、編集したはずのカテゴリIDが書き変わりませんでした。大した処理、人為的ミスはないと思いますので、EC-CUBEのバグでしょうか。

今回はカテゴリの数が少なかったので手動でIDを調整することができますが、もっと大規模なECサイトを移管する場合はこれでは困ります。バージョンアップに期待!!!

では、次に規格の移管です。

規格の移管はcsvエクスポートのようなものができないようです。手動で登録していきます・・・ホネガオレル。(この仕様どうなんだ・・・なんで規格だけエクスポートできないんでしょう・・・規格がいっぱいあったらどうするんですか・・・)

もしかしたらmyphpAdminやらphpPgAdminなどで簡単にエクスポート・インポートできるかもしれません。わかったら後日記述。

はい、それではいよいよ本題の商品リストのインポートです。

商品管理>商品登録csv(http://Bserver.com/print/admin/products/upload_csv.php)からAサーバのcsvをインポートします。

はい、エラー出ました。予想通りです。エラーの内容は「■2行目でエラーが発生しました。※ 指定の商品IDは、登録されていません。※ 指定の規格IDは、登録されていません。

このエラー、さっきのカテゴリのインポートのときと似たようなエラーです。
カテゴリのときは、まず手動で新規登録して、その状態のcsvをダウンロードしそれを編集する。そのcsvであればインポートの際、エラーは出ませんでしたが、内容は書き変わらなかったという内容でした。

もし商品登録もカテゴリ登録と同じ仕様(症状?)であれば(おそらく同じである可能性が高い)、全く新規の登録はcsvのインポートからは行えないということになります。

何時間もかけて検証・調整してきましたが、いまのところcsvエクスポートは情報のバックアップ的に使うことしかできずインポート・データの移管には全く使えないようです。結局、インポートするために手動で登録して、さらにcsvを手で編集してしまうのでは、csv登録の意味がほとんどありません。

いままでごちゃごちゃ書いてきて、こんな結論になるとは思っておらず、とても不完全燃焼で残念な状態です・・・。もやもやしてます・・・。
時間があったら調べて追記しますが、とりあえず今日失った時間を取り戻すために一番早い方法で移管したいと思います・・・・。

Tags:

Leave a Reply

*