Error import csv in magento 2 “ invalidAttributeName ” Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Update Const template at Magento 2 ClassMagento model extension experiment, return: “class does not exist”How to add filtering to custom table field column in Customers admin grid in Magento2?main.CRITICAL: Plugin class doesn't existMagento 2.1 Create a filter in the product grid by new attributeMagento 2 Add new field to Magento_User admin formHaving trouble exporting products from Magento 2.x. Fatal error: Uncaught Error: Call to a member function getName()Magento offline custom Payment method with drop down listHow to solve Front controller reached 100 router match iterations in magento2Magento 2.3 Can't view module's front end page output?
A journey... into the MIND
Retract an already submitted Recommendation Letter (written for an undergrad student)
Was Objective-C really a hindrance to Apple software development?
Putting Ant-Man on house arrest
Why do people think Winterfell crypts is the safest place for women, children & old people?
Why does Java have support for time zone offsets with seconds precision?
RIP Packet Format
Is there a way to fake a method response using Mock or Stubs?
`FindRoot [ ]`::jsing: Encountered a singular Jacobian at a point...WHY
Determinant of a matrix with 2 equal rows
Has a Nobel Peace laureate ever been accused of war crimes?
Co-worker works way more than he should
What's called a person who works as someone who puts products on shelves in stores?
How can I wire a 9-position switch so that each position turns on one more LED than the one before?
How did Elite on the NES work?
Protagonist's race is hidden - should I reveal it?
SQL Server placement of master database files vs resource database files
When I export an AI 300x60 art board it saves with bigger dimensions
Why did Israel vote against lifting the American embargo on Cuba?
What was Apollo 13's "Little Jolt" after MECO?
Arriving in Atlanta (after US Preclearance in Dublin). Will I go through TSA security in Atlanta to transfer to a connecting flight?
My admission is revoked after accepting the admission offer
Does a Draconic Bloodline sorcerer's doubled proficiency bonus for Charisma checks against dragons apply to all dragon types or only the chosen one?
When speaking, how do you change your mind mid-sentence?
Error import csv in magento 2 “ invalidAttributeName ”
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Update Const template at Magento 2 ClassMagento model extension experiment, return: “class does not exist”How to add filtering to custom table field column in Customers admin grid in Magento2?main.CRITICAL: Plugin class doesn't existMagento 2.1 Create a filter in the product grid by new attributeMagento 2 Add new field to Magento_User admin formHaving trouble exporting products from Magento 2.x. Fatal error: Uncaught Error: Call to a member function getName()Magento offline custom Payment method with drop down listHow to solve Front controller reached 100 router match iterations in magento2Magento 2.3 Can't view module's front end page output?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
Error import csv in magento 2 " invalidAttributeName "
i want custom import data to custom table " profilers " but it not working
My model
<?php
namespace ...ProfilersModelImportExport;
use ...ProfilersModelImportExportCustomImportRowValidatorInterface as ValidatorInterface;
use MagentoImportExportModelImportErrorProcessingProcessingErrorAggregatorInterface;
class Import extends MagentoImportExportModelImportEntityAbstractEntity
const ID = 'id';
const NAME = 'name';
const ID_PROFILER = 'id_profiler';
const FILE_PREFIX = 'file_prefix';
const DELIMITER = 'delimiter';
const DATA_SOURCE = 'data_source';
const ENABLE_DISABLE = 'enable_disable';
const FORMAT = 'format';
const HOSTNAME = 'hostname';
const USERNAME = 'username';
const PASSWORD = 'password';
const TYPE = 'type';
const PORT = 'port';
const LOCALFOLDER = 'localfolder';
const DONE = 'done';
const FOLDERFTP = 'folderftp';
const DONEFOLDERFTP = 'donefolderftp';
const LOCALFOLDERFTP = 'localfolderftp';
const CODE = 'code';
const SCHEDULE = 'schedule';
const MAPING = 'mapping ';
const ENABLELOCAL = 'enablelocal';
const ENABLEFTP = 'enableftp';
const IMPORT_EXPORT = 'import_export';
const OUTPUTFORMAT = 'outputformat';
const TABLE_ENTITY = 'profilers';
/**
* Validation failure message template definitions
*
* @var array
*/
protected $_messageTemplates = [
ValidatorInterface::ERROR_ID_IS_EMPTY => 'Empty',
];
protected $_permanentAttributes = [self::ID];
/**
* If we should check column names
*
* @var bool
*/
protected $needColumnCheck = true;
/**
* Valid column names
*
* @array
*/
protected $validColumnNames = [
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT,
];
/**
* Need to log in import history
*
* @var bool
*/
protected $logInHistory = true;
protected $_validators = [];
/**
* @var MagentoFrameworkStdlibDateTimeDateTime
*/
protected $_connection;
protected $_resource;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
public function __construct(
MagentoFrameworkJsonHelperData $jsonHelper,
MagentoImportExportHelperData $importExportData,
MagentoImportExportModelResourceModelImportData $importData,
MagentoFrameworkAppResourceConnection $resource,
MagentoImportExportModelResourceModelHelper $resourceHelper,
MagentoFrameworkStdlibStringUtils $string,
ProcessingErrorAggregatorInterface $errorAggregator
)
$this->jsonHelper = $jsonHelper;
$this->_importExportData = $importExportData;
$this->_resourceHelper = $resourceHelper;
$this->_dataSourceModel = $importData;
$this->_resource = $resource;
$this->_connection = $resource->getConnection(MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION);
$this->errorAggregator = $errorAggregator;
public function getValidColumnNames()
return $this->validColumnNames;
/**
* Entity type code getter.
*
* @return string
*/
public function getEntityTypeCode()
return 'profilers';
/**
* Row validation.
*
* @param array $rowData
* @param int $rowNum
* @return bool
*/
public function validateRow(array $rowData, $rowNum)
$title = false;
if (isset($this->_validatedRows[$rowNum]))
return !$this->getErrorAggregator()->isRowInvalid($rowNum);
$this->_validatedRows[$rowNum] = true;
if (!isset($rowData[self::ID])
/**
* Create advanced question data from raw data.
*
* @throws Exception
* @return bool Result of operation.
*/
protected function _importData()
if (MagentoImportExportModelImport::BEHAVIOR_DELETE == $this->getBehavior())
$this->deleteEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $this->getBehavior())
$this->replaceEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $this->getBehavior())
$this->saveEntity();
return true;
/**
* Save question
*
* @return $this
*/
public function saveEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Replace question
*
* @return $this
*/
public function replaceEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Deletes question data from raw data.
*
* @return $this
*/
public function deleteEntity()
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
foreach ($bunch as $rowNum => $rowData)
$this->validateRow($rowData, $rowNum);
if (!$this->getErrorAggregator()->isRowInvalid($rowNum))
$rowId = $rowData[self::ID];
$ids[] = $rowId;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
if ($ids)
$this->deleteEntityFinish(array_unique($ids),self::TABLE_ENTITY);
return $this;
/**
* Save and replace question
*
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
protected function saveAndReplaceEntity()
$behavior = $this->getBehavior();
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
$entityList = [];
foreach ($bunch as $rowNum => $rowData)
if (!$this->validateRow($rowData, $rowNum))
$this->addRowError(ValidatorInterface::ERROR_MESSAGE_IS_EMPTY, $rowNum);
continue;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
continue;
$rowId= $rowData[self::ID];
$ids[] = $rowId;
$entityList[$rowId][] = [
self::ID => $rowData[self::ID],
self::NAME => $rowData[self::NAME],
self::ID_PROFILER => $rowData[self::ID_PROFILER],
self::FILE_PREFIX => $rowData[self::FILE_PREFIX],
self::DELIMITER => $rowData[self::DELIMITER],
self::DATA_SOURCE => $rowData[self::DATA_SOURCE],
self::ENABLE_DISABLE => $rowData[self::ENABLE_DISABLE],
self::FORMAT => $rowData[self::FORMAT],
self::HOSTNAME => $rowData[self::HOSTNAME],
self::USERNAME => $rowData[self::USERNAME],
self::PASSWORD => $rowData[self::PASSWORD],
self::TYPE => $rowData[self::TYPE],
self::PORT => $rowData[self::PORT],
self::LOCALFOLDER => $rowData[self::LOCALFOLDER],
self::DONE => $rowData[self::DONE],
self::FOLDERFTP => $rowData[self::FOLDERFTP],
self::DONEFOLDERFTP => $rowData[self::DONEFOLDERFTP],
self::LOCALFOLDERFTP => $rowData[self::LOCALFOLDERFTP],
self::CODE => $rowData[self::CODE],
self::SCHEDULE => $rowData[self::SCHEDULE],
self::MAPING => $rowData[self::MAPING],
self::ENABLELOCAL => $rowData[self::ENABLELOCAL],
self::ENABLEFTP => $rowData[self::ENABLEFTP],
self::IMPORT_EXPORT => $rowData[self::IMPORT_EXPORT],
self::OUTPUTFORMAT => $rowData[self::OUTPUTFORMAT],
];
if (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $behavior)
if ($ids)
if ($this->deleteEntityFinish(array_unique( $ids), self::TABLE_ENTITY))
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $behavior)
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
return $this;
/**
* Save question
*
* @param array $priceData
* @param string $table
* @return $this
*/
protected function saveEntityFinish(array $entityData, $table)
if ($entityData)
$tableName = $this->_connection->getTableName($table);
$entityIn = [];
foreach ($entityData as $id => $entityRows)
foreach ($entityRows as $row)
$entityIn[] = $row;
if ($entityIn)
$this->_connection->insertOnDuplicate($tableName, $entityIn,[
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT
]);
return $this;
protected function deleteEntityFinish(array $ids, $table)
if ($table && $ids)
try
$this->countItemsDeleted += $this->_connection->delete(
$this->_connection->getTableName($table),
$this->_connection->quoteInto('id IN (?)', $ids)
);
return true;
catch (Exception $e)
return false;
else
return false;
RowValidatorInterface.pjp
<?php
namespace ...ProfilersModelImportExportCustomImport;
interface RowValidatorInterface extends MagentoFrameworkValidatorValidatorInterface
const ERROR_INVALID_TITLE = 'InvalidValueTITLE';
const ERROR_ID_IS_EMPTY = 'Empty';
/**
* Initialize validator
*
* @return $this
*/
public function init($context);
My etc
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
<entity name="profilers" label="Import Profilers" model="...ProfilersModelImportExportImport" behaviorModel="MagentoImportExportModelSourceImportBehaviorBasic" />
</config>
ERROR
magento2
add a comment |
Error import csv in magento 2 " invalidAttributeName "
i want custom import data to custom table " profilers " but it not working
My model
<?php
namespace ...ProfilersModelImportExport;
use ...ProfilersModelImportExportCustomImportRowValidatorInterface as ValidatorInterface;
use MagentoImportExportModelImportErrorProcessingProcessingErrorAggregatorInterface;
class Import extends MagentoImportExportModelImportEntityAbstractEntity
const ID = 'id';
const NAME = 'name';
const ID_PROFILER = 'id_profiler';
const FILE_PREFIX = 'file_prefix';
const DELIMITER = 'delimiter';
const DATA_SOURCE = 'data_source';
const ENABLE_DISABLE = 'enable_disable';
const FORMAT = 'format';
const HOSTNAME = 'hostname';
const USERNAME = 'username';
const PASSWORD = 'password';
const TYPE = 'type';
const PORT = 'port';
const LOCALFOLDER = 'localfolder';
const DONE = 'done';
const FOLDERFTP = 'folderftp';
const DONEFOLDERFTP = 'donefolderftp';
const LOCALFOLDERFTP = 'localfolderftp';
const CODE = 'code';
const SCHEDULE = 'schedule';
const MAPING = 'mapping ';
const ENABLELOCAL = 'enablelocal';
const ENABLEFTP = 'enableftp';
const IMPORT_EXPORT = 'import_export';
const OUTPUTFORMAT = 'outputformat';
const TABLE_ENTITY = 'profilers';
/**
* Validation failure message template definitions
*
* @var array
*/
protected $_messageTemplates = [
ValidatorInterface::ERROR_ID_IS_EMPTY => 'Empty',
];
protected $_permanentAttributes = [self::ID];
/**
* If we should check column names
*
* @var bool
*/
protected $needColumnCheck = true;
/**
* Valid column names
*
* @array
*/
protected $validColumnNames = [
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT,
];
/**
* Need to log in import history
*
* @var bool
*/
protected $logInHistory = true;
protected $_validators = [];
/**
* @var MagentoFrameworkStdlibDateTimeDateTime
*/
protected $_connection;
protected $_resource;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
public function __construct(
MagentoFrameworkJsonHelperData $jsonHelper,
MagentoImportExportHelperData $importExportData,
MagentoImportExportModelResourceModelImportData $importData,
MagentoFrameworkAppResourceConnection $resource,
MagentoImportExportModelResourceModelHelper $resourceHelper,
MagentoFrameworkStdlibStringUtils $string,
ProcessingErrorAggregatorInterface $errorAggregator
)
$this->jsonHelper = $jsonHelper;
$this->_importExportData = $importExportData;
$this->_resourceHelper = $resourceHelper;
$this->_dataSourceModel = $importData;
$this->_resource = $resource;
$this->_connection = $resource->getConnection(MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION);
$this->errorAggregator = $errorAggregator;
public function getValidColumnNames()
return $this->validColumnNames;
/**
* Entity type code getter.
*
* @return string
*/
public function getEntityTypeCode()
return 'profilers';
/**
* Row validation.
*
* @param array $rowData
* @param int $rowNum
* @return bool
*/
public function validateRow(array $rowData, $rowNum)
$title = false;
if (isset($this->_validatedRows[$rowNum]))
return !$this->getErrorAggregator()->isRowInvalid($rowNum);
$this->_validatedRows[$rowNum] = true;
if (!isset($rowData[self::ID])
/**
* Create advanced question data from raw data.
*
* @throws Exception
* @return bool Result of operation.
*/
protected function _importData()
if (MagentoImportExportModelImport::BEHAVIOR_DELETE == $this->getBehavior())
$this->deleteEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $this->getBehavior())
$this->replaceEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $this->getBehavior())
$this->saveEntity();
return true;
/**
* Save question
*
* @return $this
*/
public function saveEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Replace question
*
* @return $this
*/
public function replaceEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Deletes question data from raw data.
*
* @return $this
*/
public function deleteEntity()
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
foreach ($bunch as $rowNum => $rowData)
$this->validateRow($rowData, $rowNum);
if (!$this->getErrorAggregator()->isRowInvalid($rowNum))
$rowId = $rowData[self::ID];
$ids[] = $rowId;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
if ($ids)
$this->deleteEntityFinish(array_unique($ids),self::TABLE_ENTITY);
return $this;
/**
* Save and replace question
*
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
protected function saveAndReplaceEntity()
$behavior = $this->getBehavior();
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
$entityList = [];
foreach ($bunch as $rowNum => $rowData)
if (!$this->validateRow($rowData, $rowNum))
$this->addRowError(ValidatorInterface::ERROR_MESSAGE_IS_EMPTY, $rowNum);
continue;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
continue;
$rowId= $rowData[self::ID];
$ids[] = $rowId;
$entityList[$rowId][] = [
self::ID => $rowData[self::ID],
self::NAME => $rowData[self::NAME],
self::ID_PROFILER => $rowData[self::ID_PROFILER],
self::FILE_PREFIX => $rowData[self::FILE_PREFIX],
self::DELIMITER => $rowData[self::DELIMITER],
self::DATA_SOURCE => $rowData[self::DATA_SOURCE],
self::ENABLE_DISABLE => $rowData[self::ENABLE_DISABLE],
self::FORMAT => $rowData[self::FORMAT],
self::HOSTNAME => $rowData[self::HOSTNAME],
self::USERNAME => $rowData[self::USERNAME],
self::PASSWORD => $rowData[self::PASSWORD],
self::TYPE => $rowData[self::TYPE],
self::PORT => $rowData[self::PORT],
self::LOCALFOLDER => $rowData[self::LOCALFOLDER],
self::DONE => $rowData[self::DONE],
self::FOLDERFTP => $rowData[self::FOLDERFTP],
self::DONEFOLDERFTP => $rowData[self::DONEFOLDERFTP],
self::LOCALFOLDERFTP => $rowData[self::LOCALFOLDERFTP],
self::CODE => $rowData[self::CODE],
self::SCHEDULE => $rowData[self::SCHEDULE],
self::MAPING => $rowData[self::MAPING],
self::ENABLELOCAL => $rowData[self::ENABLELOCAL],
self::ENABLEFTP => $rowData[self::ENABLEFTP],
self::IMPORT_EXPORT => $rowData[self::IMPORT_EXPORT],
self::OUTPUTFORMAT => $rowData[self::OUTPUTFORMAT],
];
if (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $behavior)
if ($ids)
if ($this->deleteEntityFinish(array_unique( $ids), self::TABLE_ENTITY))
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $behavior)
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
return $this;
/**
* Save question
*
* @param array $priceData
* @param string $table
* @return $this
*/
protected function saveEntityFinish(array $entityData, $table)
if ($entityData)
$tableName = $this->_connection->getTableName($table);
$entityIn = [];
foreach ($entityData as $id => $entityRows)
foreach ($entityRows as $row)
$entityIn[] = $row;
if ($entityIn)
$this->_connection->insertOnDuplicate($tableName, $entityIn,[
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT
]);
return $this;
protected function deleteEntityFinish(array $ids, $table)
if ($table && $ids)
try
$this->countItemsDeleted += $this->_connection->delete(
$this->_connection->getTableName($table),
$this->_connection->quoteInto('id IN (?)', $ids)
);
return true;
catch (Exception $e)
return false;
else
return false;
RowValidatorInterface.pjp
<?php
namespace ...ProfilersModelImportExportCustomImport;
interface RowValidatorInterface extends MagentoFrameworkValidatorValidatorInterface
const ERROR_INVALID_TITLE = 'InvalidValueTITLE';
const ERROR_ID_IS_EMPTY = 'Empty';
/**
* Initialize validator
*
* @return $this
*/
public function init($context);
My etc
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
<entity name="profilers" label="Import Profilers" model="...ProfilersModelImportExportImport" behaviorModel="MagentoImportExportModelSourceImportBehaviorBasic" />
</config>
ERROR
magento2
add a comment |
Error import csv in magento 2 " invalidAttributeName "
i want custom import data to custom table " profilers " but it not working
My model
<?php
namespace ...ProfilersModelImportExport;
use ...ProfilersModelImportExportCustomImportRowValidatorInterface as ValidatorInterface;
use MagentoImportExportModelImportErrorProcessingProcessingErrorAggregatorInterface;
class Import extends MagentoImportExportModelImportEntityAbstractEntity
const ID = 'id';
const NAME = 'name';
const ID_PROFILER = 'id_profiler';
const FILE_PREFIX = 'file_prefix';
const DELIMITER = 'delimiter';
const DATA_SOURCE = 'data_source';
const ENABLE_DISABLE = 'enable_disable';
const FORMAT = 'format';
const HOSTNAME = 'hostname';
const USERNAME = 'username';
const PASSWORD = 'password';
const TYPE = 'type';
const PORT = 'port';
const LOCALFOLDER = 'localfolder';
const DONE = 'done';
const FOLDERFTP = 'folderftp';
const DONEFOLDERFTP = 'donefolderftp';
const LOCALFOLDERFTP = 'localfolderftp';
const CODE = 'code';
const SCHEDULE = 'schedule';
const MAPING = 'mapping ';
const ENABLELOCAL = 'enablelocal';
const ENABLEFTP = 'enableftp';
const IMPORT_EXPORT = 'import_export';
const OUTPUTFORMAT = 'outputformat';
const TABLE_ENTITY = 'profilers';
/**
* Validation failure message template definitions
*
* @var array
*/
protected $_messageTemplates = [
ValidatorInterface::ERROR_ID_IS_EMPTY => 'Empty',
];
protected $_permanentAttributes = [self::ID];
/**
* If we should check column names
*
* @var bool
*/
protected $needColumnCheck = true;
/**
* Valid column names
*
* @array
*/
protected $validColumnNames = [
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT,
];
/**
* Need to log in import history
*
* @var bool
*/
protected $logInHistory = true;
protected $_validators = [];
/**
* @var MagentoFrameworkStdlibDateTimeDateTime
*/
protected $_connection;
protected $_resource;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
public function __construct(
MagentoFrameworkJsonHelperData $jsonHelper,
MagentoImportExportHelperData $importExportData,
MagentoImportExportModelResourceModelImportData $importData,
MagentoFrameworkAppResourceConnection $resource,
MagentoImportExportModelResourceModelHelper $resourceHelper,
MagentoFrameworkStdlibStringUtils $string,
ProcessingErrorAggregatorInterface $errorAggregator
)
$this->jsonHelper = $jsonHelper;
$this->_importExportData = $importExportData;
$this->_resourceHelper = $resourceHelper;
$this->_dataSourceModel = $importData;
$this->_resource = $resource;
$this->_connection = $resource->getConnection(MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION);
$this->errorAggregator = $errorAggregator;
public function getValidColumnNames()
return $this->validColumnNames;
/**
* Entity type code getter.
*
* @return string
*/
public function getEntityTypeCode()
return 'profilers';
/**
* Row validation.
*
* @param array $rowData
* @param int $rowNum
* @return bool
*/
public function validateRow(array $rowData, $rowNum)
$title = false;
if (isset($this->_validatedRows[$rowNum]))
return !$this->getErrorAggregator()->isRowInvalid($rowNum);
$this->_validatedRows[$rowNum] = true;
if (!isset($rowData[self::ID])
/**
* Create advanced question data from raw data.
*
* @throws Exception
* @return bool Result of operation.
*/
protected function _importData()
if (MagentoImportExportModelImport::BEHAVIOR_DELETE == $this->getBehavior())
$this->deleteEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $this->getBehavior())
$this->replaceEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $this->getBehavior())
$this->saveEntity();
return true;
/**
* Save question
*
* @return $this
*/
public function saveEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Replace question
*
* @return $this
*/
public function replaceEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Deletes question data from raw data.
*
* @return $this
*/
public function deleteEntity()
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
foreach ($bunch as $rowNum => $rowData)
$this->validateRow($rowData, $rowNum);
if (!$this->getErrorAggregator()->isRowInvalid($rowNum))
$rowId = $rowData[self::ID];
$ids[] = $rowId;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
if ($ids)
$this->deleteEntityFinish(array_unique($ids),self::TABLE_ENTITY);
return $this;
/**
* Save and replace question
*
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
protected function saveAndReplaceEntity()
$behavior = $this->getBehavior();
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
$entityList = [];
foreach ($bunch as $rowNum => $rowData)
if (!$this->validateRow($rowData, $rowNum))
$this->addRowError(ValidatorInterface::ERROR_MESSAGE_IS_EMPTY, $rowNum);
continue;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
continue;
$rowId= $rowData[self::ID];
$ids[] = $rowId;
$entityList[$rowId][] = [
self::ID => $rowData[self::ID],
self::NAME => $rowData[self::NAME],
self::ID_PROFILER => $rowData[self::ID_PROFILER],
self::FILE_PREFIX => $rowData[self::FILE_PREFIX],
self::DELIMITER => $rowData[self::DELIMITER],
self::DATA_SOURCE => $rowData[self::DATA_SOURCE],
self::ENABLE_DISABLE => $rowData[self::ENABLE_DISABLE],
self::FORMAT => $rowData[self::FORMAT],
self::HOSTNAME => $rowData[self::HOSTNAME],
self::USERNAME => $rowData[self::USERNAME],
self::PASSWORD => $rowData[self::PASSWORD],
self::TYPE => $rowData[self::TYPE],
self::PORT => $rowData[self::PORT],
self::LOCALFOLDER => $rowData[self::LOCALFOLDER],
self::DONE => $rowData[self::DONE],
self::FOLDERFTP => $rowData[self::FOLDERFTP],
self::DONEFOLDERFTP => $rowData[self::DONEFOLDERFTP],
self::LOCALFOLDERFTP => $rowData[self::LOCALFOLDERFTP],
self::CODE => $rowData[self::CODE],
self::SCHEDULE => $rowData[self::SCHEDULE],
self::MAPING => $rowData[self::MAPING],
self::ENABLELOCAL => $rowData[self::ENABLELOCAL],
self::ENABLEFTP => $rowData[self::ENABLEFTP],
self::IMPORT_EXPORT => $rowData[self::IMPORT_EXPORT],
self::OUTPUTFORMAT => $rowData[self::OUTPUTFORMAT],
];
if (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $behavior)
if ($ids)
if ($this->deleteEntityFinish(array_unique( $ids), self::TABLE_ENTITY))
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $behavior)
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
return $this;
/**
* Save question
*
* @param array $priceData
* @param string $table
* @return $this
*/
protected function saveEntityFinish(array $entityData, $table)
if ($entityData)
$tableName = $this->_connection->getTableName($table);
$entityIn = [];
foreach ($entityData as $id => $entityRows)
foreach ($entityRows as $row)
$entityIn[] = $row;
if ($entityIn)
$this->_connection->insertOnDuplicate($tableName, $entityIn,[
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT
]);
return $this;
protected function deleteEntityFinish(array $ids, $table)
if ($table && $ids)
try
$this->countItemsDeleted += $this->_connection->delete(
$this->_connection->getTableName($table),
$this->_connection->quoteInto('id IN (?)', $ids)
);
return true;
catch (Exception $e)
return false;
else
return false;
RowValidatorInterface.pjp
<?php
namespace ...ProfilersModelImportExportCustomImport;
interface RowValidatorInterface extends MagentoFrameworkValidatorValidatorInterface
const ERROR_INVALID_TITLE = 'InvalidValueTITLE';
const ERROR_ID_IS_EMPTY = 'Empty';
/**
* Initialize validator
*
* @return $this
*/
public function init($context);
My etc
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
<entity name="profilers" label="Import Profilers" model="...ProfilersModelImportExportImport" behaviorModel="MagentoImportExportModelSourceImportBehaviorBasic" />
</config>
ERROR
magento2
Error import csv in magento 2 " invalidAttributeName "
i want custom import data to custom table " profilers " but it not working
My model
<?php
namespace ...ProfilersModelImportExport;
use ...ProfilersModelImportExportCustomImportRowValidatorInterface as ValidatorInterface;
use MagentoImportExportModelImportErrorProcessingProcessingErrorAggregatorInterface;
class Import extends MagentoImportExportModelImportEntityAbstractEntity
const ID = 'id';
const NAME = 'name';
const ID_PROFILER = 'id_profiler';
const FILE_PREFIX = 'file_prefix';
const DELIMITER = 'delimiter';
const DATA_SOURCE = 'data_source';
const ENABLE_DISABLE = 'enable_disable';
const FORMAT = 'format';
const HOSTNAME = 'hostname';
const USERNAME = 'username';
const PASSWORD = 'password';
const TYPE = 'type';
const PORT = 'port';
const LOCALFOLDER = 'localfolder';
const DONE = 'done';
const FOLDERFTP = 'folderftp';
const DONEFOLDERFTP = 'donefolderftp';
const LOCALFOLDERFTP = 'localfolderftp';
const CODE = 'code';
const SCHEDULE = 'schedule';
const MAPING = 'mapping ';
const ENABLELOCAL = 'enablelocal';
const ENABLEFTP = 'enableftp';
const IMPORT_EXPORT = 'import_export';
const OUTPUTFORMAT = 'outputformat';
const TABLE_ENTITY = 'profilers';
/**
* Validation failure message template definitions
*
* @var array
*/
protected $_messageTemplates = [
ValidatorInterface::ERROR_ID_IS_EMPTY => 'Empty',
];
protected $_permanentAttributes = [self::ID];
/**
* If we should check column names
*
* @var bool
*/
protected $needColumnCheck = true;
/**
* Valid column names
*
* @array
*/
protected $validColumnNames = [
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT,
];
/**
* Need to log in import history
*
* @var bool
*/
protected $logInHistory = true;
protected $_validators = [];
/**
* @var MagentoFrameworkStdlibDateTimeDateTime
*/
protected $_connection;
protected $_resource;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
public function __construct(
MagentoFrameworkJsonHelperData $jsonHelper,
MagentoImportExportHelperData $importExportData,
MagentoImportExportModelResourceModelImportData $importData,
MagentoFrameworkAppResourceConnection $resource,
MagentoImportExportModelResourceModelHelper $resourceHelper,
MagentoFrameworkStdlibStringUtils $string,
ProcessingErrorAggregatorInterface $errorAggregator
)
$this->jsonHelper = $jsonHelper;
$this->_importExportData = $importExportData;
$this->_resourceHelper = $resourceHelper;
$this->_dataSourceModel = $importData;
$this->_resource = $resource;
$this->_connection = $resource->getConnection(MagentoFrameworkAppResourceConnection::DEFAULT_CONNECTION);
$this->errorAggregator = $errorAggregator;
public function getValidColumnNames()
return $this->validColumnNames;
/**
* Entity type code getter.
*
* @return string
*/
public function getEntityTypeCode()
return 'profilers';
/**
* Row validation.
*
* @param array $rowData
* @param int $rowNum
* @return bool
*/
public function validateRow(array $rowData, $rowNum)
$title = false;
if (isset($this->_validatedRows[$rowNum]))
return !$this->getErrorAggregator()->isRowInvalid($rowNum);
$this->_validatedRows[$rowNum] = true;
if (!isset($rowData[self::ID])
/**
* Create advanced question data from raw data.
*
* @throws Exception
* @return bool Result of operation.
*/
protected function _importData()
if (MagentoImportExportModelImport::BEHAVIOR_DELETE == $this->getBehavior())
$this->deleteEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $this->getBehavior())
$this->replaceEntity();
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $this->getBehavior())
$this->saveEntity();
return true;
/**
* Save question
*
* @return $this
*/
public function saveEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Replace question
*
* @return $this
*/
public function replaceEntity()
$this->saveAndReplaceEntity();
return $this;
/**
* Deletes question data from raw data.
*
* @return $this
*/
public function deleteEntity()
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
foreach ($bunch as $rowNum => $rowData)
$this->validateRow($rowData, $rowNum);
if (!$this->getErrorAggregator()->isRowInvalid($rowNum))
$rowId = $rowData[self::ID];
$ids[] = $rowId;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
if ($ids)
$this->deleteEntityFinish(array_unique($ids),self::TABLE_ENTITY);
return $this;
/**
* Save and replace question
*
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
protected function saveAndReplaceEntity()
$behavior = $this->getBehavior();
$ids = [];
while ($bunch = $this->_dataSourceModel->getNextBunch())
$entityList = [];
foreach ($bunch as $rowNum => $rowData)
if (!$this->validateRow($rowData, $rowNum))
$this->addRowError(ValidatorInterface::ERROR_MESSAGE_IS_EMPTY, $rowNum);
continue;
if ($this->getErrorAggregator()->hasToBeTerminated())
$this->getErrorAggregator()->addRowToSkip($rowNum);
continue;
$rowId= $rowData[self::ID];
$ids[] = $rowId;
$entityList[$rowId][] = [
self::ID => $rowData[self::ID],
self::NAME => $rowData[self::NAME],
self::ID_PROFILER => $rowData[self::ID_PROFILER],
self::FILE_PREFIX => $rowData[self::FILE_PREFIX],
self::DELIMITER => $rowData[self::DELIMITER],
self::DATA_SOURCE => $rowData[self::DATA_SOURCE],
self::ENABLE_DISABLE => $rowData[self::ENABLE_DISABLE],
self::FORMAT => $rowData[self::FORMAT],
self::HOSTNAME => $rowData[self::HOSTNAME],
self::USERNAME => $rowData[self::USERNAME],
self::PASSWORD => $rowData[self::PASSWORD],
self::TYPE => $rowData[self::TYPE],
self::PORT => $rowData[self::PORT],
self::LOCALFOLDER => $rowData[self::LOCALFOLDER],
self::DONE => $rowData[self::DONE],
self::FOLDERFTP => $rowData[self::FOLDERFTP],
self::DONEFOLDERFTP => $rowData[self::DONEFOLDERFTP],
self::LOCALFOLDERFTP => $rowData[self::LOCALFOLDERFTP],
self::CODE => $rowData[self::CODE],
self::SCHEDULE => $rowData[self::SCHEDULE],
self::MAPING => $rowData[self::MAPING],
self::ENABLELOCAL => $rowData[self::ENABLELOCAL],
self::ENABLEFTP => $rowData[self::ENABLEFTP],
self::IMPORT_EXPORT => $rowData[self::IMPORT_EXPORT],
self::OUTPUTFORMAT => $rowData[self::OUTPUTFORMAT],
];
if (MagentoImportExportModelImport::BEHAVIOR_REPLACE == $behavior)
if ($ids)
if ($this->deleteEntityFinish(array_unique( $ids), self::TABLE_ENTITY))
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
elseif (MagentoImportExportModelImport::BEHAVIOR_APPEND == $behavior)
$this->saveEntityFinish($entityList, self::TABLE_ENTITY);
return $this;
/**
* Save question
*
* @param array $priceData
* @param string $table
* @return $this
*/
protected function saveEntityFinish(array $entityData, $table)
if ($entityData)
$tableName = $this->_connection->getTableName($table);
$entityIn = [];
foreach ($entityData as $id => $entityRows)
foreach ($entityRows as $row)
$entityIn[] = $row;
if ($entityIn)
$this->_connection->insertOnDuplicate($tableName, $entityIn,[
self::ID,
self::NAME,
self::ID_PROFILER,
self::FILE_PREFIX,
self::DELIMITER,
self::DATA_SOURCE,
self::ENABLE_DISABLE,
self::FORMAT,
self::HOSTNAME,
self::USERNAME,
self::PASSWORD,
self::TYPE,
self::PORT,
self::LOCALFOLDER,
self::DONE,
self::FOLDERFTP,
self::DONEFOLDERFTP,
self::LOCALFOLDERFTP,
self::CODE,
self::SCHEDULE,
self::MAPING,
self::ENABLELOCAL,
self::ENABLEFTP,
self::IMPORT_EXPORT,
self::OUTPUTFORMAT
]);
return $this;
protected function deleteEntityFinish(array $ids, $table)
if ($table && $ids)
try
$this->countItemsDeleted += $this->_connection->delete(
$this->_connection->getTableName($table),
$this->_connection->quoteInto('id IN (?)', $ids)
);
return true;
catch (Exception $e)
return false;
else
return false;
RowValidatorInterface.pjp
<?php
namespace ...ProfilersModelImportExportCustomImport;
interface RowValidatorInterface extends MagentoFrameworkValidatorValidatorInterface
const ERROR_INVALID_TITLE = 'InvalidValueTITLE';
const ERROR_ID_IS_EMPTY = 'Empty';
/**
* Initialize validator
*
* @return $this
*/
public function init($context);
My etc
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
<entity name="profilers" label="Import Profilers" model="...ProfilersModelImportExportImport" behaviorModel="MagentoImportExportModelSourceImportBehaviorBasic" />
</config>
ERROR
magento2
magento2
asked 14 mins ago
TN98TN98
537
537
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f272158%2ferror-import-csv-in-magento-2-invalidattributename%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f272158%2ferror-import-csv-in-magento-2-invalidattributename%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown