Esta es una respuesta parcial y de ninguna manera completa. También me gustaría saber más sobre ambos. Entonces esto puede ser parte de una discusión; aunque he escrito como respuesta en lugar de comentar debido a los siguientes fragmentos de código y ejemplos de cómo he usado las clases anteriores.
Permítanme ilustrar algunos de mis usos prepareRow () como, que hace lo que dice.
Hace poco estaba dando algunos datos para importar desde una base de datos no drupal. La entidad a la que estoy agregando requiere que se ingresen campos que no tengo en mi importación de datos.
Entonces, antes de crear mi clase fuente, puedo agregar
$source_fields = array(
'changed' => t('Timestamp of when the change was made.'),
'created' => t('Timestamp of when the node was Created.'),
);
y luego en la función prepareRow puedo hacer lo siguiente
$nowtimestamp = mktime(date('Y-m-d'));
$row->changed = $nowtimestamp;
$row->created = $nowtimestamp;
También puede ejecutar php if / else declaraciones aquí si es necesario.
También he usado la función de preparación en mi código y la estoy usando para asignar valores a la entidad.
$account->field_job_location [und][0]['tid'] = $row->job_location_tid;
Solo tuve que usar esto en este escenario ya que hice mi propio complemento de nodo personalizado.
Además, si necesita hacer cálculos al respecto, puede hacerlo en prepareRow, que se ejecuta antes de prepare ()
Por ejemplo, en la importación tenía un valor etiquetado como 'Ciudad', y podría convertirlo en un Id. De término.
if ($TownCity == 'London' ){
$row->job_location_tid = '10';
} else {
$row->job_location_tid = '11';
}
Espero que esto ayude.