Импорт и картирование пользовательских данных с помощью DATAFLOW
-
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 (или любой другой источник) в массив, манипулировать данными и запустить импорт.