Esta é uma resposta parcial e de forma alguma completa. Eu também gostaria de descobrir mais sobre os dois. Portanto, isso pode ser parte de uma discussão; embora eu tenha escrito como resposta em vez de comentar por causa dos seguintes trechos de código e exemplos de como usei as classes acima.
Deixe-me ilustrar alguns dos meus usos prepareRow () como - que faz o que diz.
Recentemente, eu estava fornecendo alguns dados para importar de um banco de dados não drupal. A entidade à qual estou adicionando exige a inserção de campos que não tenho na minha importação de dados.
Então, antes que minha classe de origem seja criada, posso adicionar
$source_fields = array(
'changed' => t('Timestamp of when the change was made.'),
'created' => t('Timestamp of when the node was Created.'),
);
e então na função prepareRow eu posso fazer o seguinte
$nowtimestamp = mktime(date('Y-m-d'));
$row->changed = $nowtimestamp;
$row->created = $nowtimestamp;
você também pode executar as instruções if / else do php aqui, se necessário.
Eu também usei a função de preparação no meu código e estou usando-a para atribuir valores à entidade.
$account->field_job_location [und][0]['tid'] = $row->job_location_tid;
Eu só precisei usar isso nesse cenário, pois fiz meu próprio plug-in de nó personalizado.
Além disso, se você precisar fazer cálculos sobre isso, poderá fazê-lo em prepareRow, que é executado antes de prepare ()
Por exemplo, na importação, eu tinha um valor chamado 'Cidade' - e poderia transformá-lo em um ID do termo.
if ($TownCity == 'London' ){
$row->job_location_tid = '10';
} else {
$row->job_location_tid = '11';
}
Eu espero que isso ajude.