2
votes

I have created a class using migrate module but I am unable to migrate entities. my class codes are below please check it and tell me whats the problem with it??

<?php
class ItemOrderXMLMigration extends XMLMigration {
  public function __construct() {
    parent::__construct(MigrateGroup::getInstance('OrderFeed'));
    $this->description = t('Migrate entity from XML file');

    //$this->softDependencies = array('WineFileCopy');

    $fields = array(
      'Number' => t('Number'),
      'Date' => t('Date'),
      'SubTotal' => t('Sub Total'),
      'Discount' => t('Discount'),
      'ShippingCharges' => t('Shipping Charges'),
      'ShippingChargesDiscount' => t('Shipping Charges Discount'),
      'NumItems' => t('NumItems'),
      'VATPercentage' => t('VAT Percentage'),
      'CurrencyCode' => t('Currency Code'),
      'PaymentTypeDesc' => t('Payment Type Desc'),
      'OrderState' => t('Order State'),
    );

    $this->map = new MigrateSQLMap($this->machineName,
      array(
        'Number' => array(
          'type' => 'varchar',
          'length' => 225,
          'not null' => TRUE,
        )
      ),
      MigrateDestinationEntityAPI::getKeySchema('entity_example_basic','first_example_bundle')
    );

    $xml_folder = DRUPAL_ROOT . '/' . drupal_get_path('module', 'products_import') . '/xml/';
    $items_url = $xml_folder . 'OrderFeed.xml';
    $item_xpath = '/Orders/Item';  // relative to document
    $item_ID_xpath = 'Number';         // relative to item_xpath and gets assembled
                                         // into full path /producers/producer/sourceid

    $items_class = new MigrateItemsXML($items_url, $item_xpath, $item_ID_xpath);
    $this->source = new MigrateSourceMultiItems($items_class, $fields);

    $this->destination = new MigrateDestinationEntityAPI('entity_example_basic','first_example_bundle');

    $this->addFieldMapping('field_number', 'Number')
         ->xpath('Number');
    $this->addFieldMapping('field_subtotal', 'SubTotal')
         ->xpath('SubTotal');
    $this->addFieldMapping('field_discount', 'Discount')
         ->xpath('Discount');
    //$this->addUnmigratedDestinations(array('weight'));
  }
}
?>

When I import it I got the save error message for all entities: Creating default object from empty value File /var/www/mig/migration/sites/all/modules/migrate_extras/entity_api.inc, line 227

2

2 Answers

1
votes

Try the latest or updated migrate module https://www.drupal.org/project/migrate. I think you were using old one which were having some issues to migrate entities.

0
votes

Why don't you try with a feed importer (Feeds module) using XPath parser module?. It's really easy, and you can use both an uploaded file or a source URL.