Импорт и картирование пользовательских данных с помощью DATAFLOW

magento.stackexchange https://magento.stackexchange.com/questions/539

  •  16-10-2019
  •  | 
  •  

Вопрос

Я хочу проанализировать CSV, отобразить поля и выполнить какую -то пользовательскую логику с импортированными данными, но я не могу выяснить действия профиля XML.

XML в настоящее время выглядит так, наряду с моими рассуждениями:

=> Во -первых, адаптер проверяет, существует ли файл, и создает пакетную модель.

<action type="dataflow/convert_adapter_io" method="load">
    <var name="type">file</var>
    <var name="path">var/import</var>
    <var name="filename"><![CDATA[stuff.csv]]></var>
    <var name="format"><![CDATA[csv]]></var>
</action>

=> Здесь синтаксический анализатор проанализирует CSV и хранит его в таблице DATAFLOW_IMPORT_DATA для других действий по доступу/манипулированию им.

<action type="dataflow/convert_parser_csv" method="parse">
    <var name="delimiter"><![CDATA[,]]></var>
    <var name="enclose"><![CDATA["]]></var>
    <var name="fieldnames">true</var>
</action>

=> Здесь Mapper преобразует данные, хранящиеся в таблице DATAFLOW_IMPORT_DATA.

<action type="dataflow/convert_mapper_column" method="map">
   <var name="map">
       <map name="first_name"><![CDATA[Given Name]]></map>
       <map name="last_name"><![CDATA[Family Name]]></map>
   </var>
   <var name="_only_specified">true</var>
</action>

=> И, наконец, я могу выполнить свою собственную логику. (Это не имеет большого смысла, так как ряды CSV уже проанализированы, но для этого, похоже, нет правильного действия ..)

<action type="dataflow/convert_parser_csv" method="parse">
    <var name="delimiter"><![CDATA[,]]></var>
    <var name="enclose"><![CDATA["]]></var>
    <var name="fieldnames">false</var>
    <var name="number_of_records">10</var>
    <var name="adapter">mymodule/convert_adapter_myadapter</var>
    <var name="method">saveRow</var>
</action>

Очевидно, что выше не будет работать, потому что (во втором действии) Convert_parser_csv не имеет адаптера и метода.

Может ли кто -нибудь указать мне в правильном направлении, чтобы заставить карту работать?

Это было полезно?

Решение

Mapper работает только с экспортом данных. А документация не упомянул об этом :(

Я сам намечусь поля в методе сбережения моего адаптера. Следующий код работает нормально:

<action type="dataflow/convert_adapter_io" method="load">
    <var name="type">file</var>
    <var name="path">var/import</var>
    <var name="filename"><![CDATA[stuff.csv]]></var>
    <var name="format"><![CDATA[csv]]></var>
</action>

<action type="dataflow/convert_parser_csv" method="parse">
    <var name="delimiter"><![CDATA[,]]></var>
    <var name="enclose"><![CDATA["]]></var>
    <var name="fieldnames">false</var>
    <var name="number_of_records">10</var>
    <var name="adapter">mymodule/convert_adapter_myadapter</var>
    <var name="method">saveRow</var>
</action>

Другие советы

Я не знаю точно, соответствует ли это вашим потребностям, но, возможно, вам следует взглянуть на это расширение: AVS_FASTSIMPLEIMPORT. Анкет С FastsimpleImport вы можете использовать массив в качестве источника для основного модуля Magento ImportExport. Таким образом, вы можете прочитать свой CSV (или любой другой источник) в массив, манипулировать данными и запустить импорт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top