From e05d4ab5266d6a58e7d1ae43e64324d1957d9dc5 Mon Sep 17 00:00:00 2001 From: David Gustafsson Date: Tue, 18 Feb 2025 10:51:25 +0100 Subject: [PATCH] Bug 29654: Add match_record_id option to bulkmarimport.pl Add -match_record_id option to bulkmarkimport.pl. When enabled incoming record id will be assumed to match record in Koha. To test: 1) Before applying patch, export a biblio from staff interace 2) Import using the exported file: ./bulkmarcimport.pl -m="MARCXML" -v -b -file bib-xxxxx.marcxml -insert -update -c=MARC21 -l "/tmp/import.log" 3) The import with be inserted and create a duplicate record in Koha. Check the import.log or search using the staff interface. (could also crash with duplicate key error if contains item) 4) Apply patch 5) Run the import again with the same command as above 6) A new record should been inserted 7) Remove all newly inserted duplicate records (it's important to keep the record the export was initially performed on) 6) Run the import again, but add the -match_record_id option 8) The original Koha record should now have been updated Sponsored-by: Gothenburg University Library Signed-off-by: David Nind --- misc/migration_tools/bulkmarcimport.pl | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/misc/migration_tools/bulkmarcimport.pl b/misc/migration_tools/bulkmarcimport.pl index 9ff0935d72..99ef746e9d 100755 --- a/misc/migration_tools/bulkmarcimport.pl +++ b/misc/migration_tools/bulkmarcimport.pl @@ -60,6 +60,7 @@ my $biblios; my $authorities; my $keepids; my $match; +my $match_record_id; my $isbn_check; my $logfile; my $insert; @@ -105,6 +106,7 @@ GetOptions( 'update' => \$update, 'all' => \$all, 'match=s@' => \$match, + 'match_record_id' => \$match_record_id, 'i|isbn' => \$isbn_check, 'x:s' => \$sourcetag, 'y:s' => \$sourcesubfield, @@ -448,7 +450,7 @@ RECORD: while () { $logger->debug("No match for: $query"); } - if ( $keepids && $originalid ) { + if ( $keepids && $originalid && $originalid != $matched_record_id ) { my $storeidfield; if ( length($keepids) == 3 ) { $storeidfield = MARC::Field->new( $keepids, $originalid ); @@ -461,6 +463,10 @@ RECORD: while () { } } + if ( $match_record_id && !$matched_record_id && $originalid ) { + $matched_record_id = $originalid; + } + foreach my $stringfilter (@$filters) { if ( length($stringfilter) == 3 ) { foreach my $field ( $record->field($stringfilter) ) { @@ -995,6 +1001,12 @@ from LOC or BNF. useless for biblios probably) I matchindex,fieldtomatch matchpoint to use to deduplicate fieldtomatch can be either 001 to 999 or field and list of subfields as such 100abcde +=item B<-match_record_id> + +Assume incoming record original id is a valid record id in Koha and use this +for updating the Koha record. For example useful when importing previously ++exported records. + =item B<-i, --isbn> If set, a search will be done on isbn, and, if the same isbn is found, the -- 2.39.5