private void ImportMarcBatch(int batchID) { BHLProvider provider = new BHLProvider(); CustomGenericList<Marc> marcs = provider.MarcSelectForImportByBatchID(batchID); foreach (Marc marc in marcs) { Title title = null; try { title = null; String marcBibId = marc.Leader.Trim().Replace(' ', 'x'); if (marc.BhlTitleId == 0) { // Build new title class, populate, and save title = provider.MarcSelectTitleDetailsByMarcID(marc.MarcID); title.IsNew = true; title.InstitutionCode = marc.InstitutionCode; // Grab all of the supporting data (subjects, languages, authors, identifiers, associations) CustomGenericList<TitleTag> titleTags = provider.MarcSelectTitleTagsByMarcID(marc.MarcID); foreach (TitleTag titleTag in titleTags) { titleTag.IsNew = true; title.TitleTags.Add(titleTag); } CustomGenericList<TitleLanguage> titleLanguages = provider.MarcSelectTitleLanguagesByMarcID(marc.MarcID); foreach (TitleLanguage titleLanguage in titleLanguages) { titleLanguage.IsNew = true; title.TitleLanguages.Add(titleLanguage); } CustomGenericList<Title_Creator> titleCreators = provider.MarcSelectCreatorsByMarcID(marc.MarcID); foreach (Title_Creator titleCreator in titleCreators) { titleCreator.IsNew = true; title.TitleCreators.Add(titleCreator); } CustomGenericList<Title_TitleIdentifier> titleIdentifiers = provider.MarcSelectTitleIdentifiersByMarcID(marc.MarcID); foreach (Title_TitleIdentifier titleIdentifier in titleIdentifiers) { titleIdentifier.IsNew = true; title.TitleIdentifiers.Add(titleIdentifier); } CustomGenericList<TitleAssociation> titleAssociations = provider.MarcSelectAssociationsByMarcID(marc.MarcID); foreach (TitleAssociation titleAssociation in titleAssociations) { titleAssociation.IsNew = true; // Get title association title identifiers titleAssociation.TitleAssociationIdentifiers = provider.MarcSelectAssociationIdsByMarcDataFieldID(titleAssociation.MarcDataFieldID); title.TitleAssociations.Add(titleAssociation); } // Save the new title provider.TitleSave(title, 1); // Copy MARC XML file to the appropriate server // - Create new folder in current vault (using MarcBibID as name) // - Copy MARC.XML file to new folder (using MarcBibID as name) MOBOT.BHL.DataObjects.Configuration config = provider.ConfigurationSelectByName( System.Configuration.ConfigurationManager.AppSettings["ConfigNameCurrentIAVault"]); if (config != null) { Vault vault = provider.VaultSelect(Convert.ToInt32(config.ConfigurationValue)); if (vault != null) { String destinationFile = vault.OCRFolderShare + "\\" + title.MARCBibID + "\\" + title.MARCBibID + "_marc.xml"; provider.GetFileAccessProvider(ConfigurationManager.AppSettings["UseRemoteFileAccessProvider"] == "true").MoveFile(marc.MarcFileLocation, destinationFile); } } _inserted++; } else { // Load existing title and new title information title = provider.TitleSelectExtended(marc.BhlTitleId); Title marcTitle = provider.MarcSelectTitleDetailsByMarcID(marc.MarcID); // Update title values title.MARCLeader = marcTitle.MARCLeader; title.FullTitle = marcTitle.FullTitle; title.ShortTitle = marcTitle.ShortTitle; title.UniformTitle = marcTitle.UniformTitle; title.SortTitle = marcTitle.SortTitle; title.CallNumber = marcTitle.CallNumber; title.PublicationDetails = marcTitle.PublicationDetails; title.StartYear = marcTitle.StartYear; title.EndYear = marcTitle.EndYear; title.Datafield_260_a = marcTitle.Datafield_260_a; title.Datafield_260_b = marcTitle.Datafield_260_b; title.Datafield_260_c = marcTitle.Datafield_260_c; title.InstitutionCode = marc.InstitutionCode; title.LanguageCode = marcTitle.LanguageCode; title.OriginalCatalogingSource = marcTitle.OriginalCatalogingSource; title.EditionStatement = marcTitle.EditionStatement; title.CurrentPublicationFrequency = marcTitle.CurrentPublicationFrequency; // Replace all subjects associated with this title foreach (TitleTag titletag in title.TitleTags) { titletag.IsDeleted = true; } CustomGenericList<TitleTag> titleTags = provider.MarcSelectTitleTagsByMarcID(marc.MarcID); foreach (TitleTag titleTag in titleTags) { titleTag.IsNew = true; titleTag.TitleID = title.TitleID; title.TitleTags.Add(titleTag); } // Replace all languages associated with this title foreach (TitleLanguage titlelanguage in title.TitleLanguages) { titlelanguage.IsDeleted = true; } CustomGenericList<TitleLanguage> titleLanguages = provider.MarcSelectTitleLanguagesByMarcID(marc.MarcID); foreach (TitleLanguage titleLanguage in titleLanguages) { titleLanguage.IsNew = true; titleLanguage.TitleID = title.TitleID; title.TitleLanguages.Add(titleLanguage); } // Replace all title creators associated with this title foreach (Title_Creator titleCreator in title.TitleCreators) { titleCreator.IsDeleted = true; } CustomGenericList<Title_Creator> titleCreators = provider.MarcSelectCreatorsByMarcID(marc.MarcID); foreach (Title_Creator titleCreator in titleCreators) { titleCreator.IsNew = true; titleCreator.TitleID = title.TitleID; title.TitleCreators.Add(titleCreator); } // Replace all identifiers associated with this title foreach (Title_TitleIdentifier title_titleidentifier in title.TitleIdentifiers) { title_titleidentifier.IsDeleted = true; } CustomGenericList<Title_TitleIdentifier> titleIdentifiers = provider.MarcSelectTitleIdentifiersByMarcID(marc.MarcID); foreach (Title_TitleIdentifier titleIdentifier in titleIdentifiers) { titleIdentifier.IsNew = true; titleIdentifier.TitleID = title.TitleID; title.TitleIdentifiers.Add(titleIdentifier); } // Replace all associations associated with this title foreach (TitleAssociation titleAssociation in title.TitleAssociations) { titleAssociation.IsDeleted = true; } CustomGenericList<TitleAssociation> titleAssociations = provider.MarcSelectAssociationsByMarcID(marc.MarcID); foreach (TitleAssociation titleAssociation in titleAssociations) { titleAssociation.IsNew = true; titleAssociation.TitleID = title.TitleID; titleAssociation.Active = true; // Get title association title identifiers titleAssociation.TitleAssociationIdentifiers = provider.MarcSelectAssociationIdsByMarcDataFieldID(titleAssociation.MarcDataFieldID); title.TitleAssociations.Add(titleAssociation); } // Update the title provider.TitleSave(title, 1); // Copy MARC XML file to the appropriate location(s) CustomGenericList<PageSummaryView> folders = provider.PageSummarySelectFoldersForTitleID(title.TitleID); CustomGenericList<PageSummaryView> barcodes = provider.PageSummarySelectBarcodeForTitleID(title.TitleID); // For each folder containing items for this title foreach (PageSummaryView folder in folders) { // Get the files in the folder MOBOT.FileAccess.IFileAccessProvider fileAccess = provider.GetFileAccessProvider(ConfigurationManager.AppSettings["UseRemoteFileAccessProvider"] == "true"); String destinationFolder = folder.OCRFolderShare + "\\" + folder.FileRootFolder; String[] marcXmlFiles = fileAccess.GetFiles(destinationFolder); // Check each file foreach (String marcXmlFile in marcXmlFiles) { if (marcXmlFile.EndsWith("_marc.xml")) { // See if any file is related to this title foreach (PageSummaryView barcode in barcodes) { if (marcXmlFile.EndsWith(barcode.BarCode + "_marc.xml")) { // Found a match, so replace the file fileAccess.MoveFile(marcXmlFile, marcXmlFile + "." + System.DateTime.Now.Ticks.ToString()); fileAccess.CopyFile(marc.MarcFileLocation, marcXmlFile, true); break; } } } } } _updated++; } // Update the record to indicate that the import has completed provider.MarcUpdateStatusImported(marc.MarcID); } catch (Exception ex) { // Update the record to indicate the failed import provider.MarcUpdateStatusError(marc.MarcID); if (title != null) { _error.Add("Error loading '" + title.ShortTitle + "': " + ex.Message); } else { _error.Add("Error loading MARC ID " + marc.MarcID.ToString() + ": " + ex.Message); } } } }