public static RecordField[] WithSubFields ( this MarcRecord record ) { FieldCollection fields = record.Fields; int count = fields.Length; List <RecordField> result = null; for (int i = 0; i < count; i++) { if (fields[i].SubFields.Length != 0) { if (ReferenceEquals(result, null)) { result = new List <RecordField>(); } result.Add(fields[i]); } } return(ReferenceEquals(result, null) ? EmptyFieldArray : result.ToArray()); }
public static string FormatRecordRetry(this IrbisClient client, string format, MarcRecord record) { Func <string, MarcRecord, string> func = client.FormatRecord; return(Try(func, format, record)); }
public static MarcRecord WriteRecordRetry(this IrbisClient client, MarcRecord record) { Func <MarcRecord, MarcRecord> func = client.WriteRecord; return(Try(func, record)); }
public MarcRecord WriteRecord(MarcRecord record) { string database = record.Database; if (Utility.IsNullOrEmpty(database)) { database = Database; } Query query = new Query(this, "D"); query.AddAnsi(database); query.Add(0); query.Add(1); query.AddUtf(record.Encode()); using (Response response = ExecuteQuery(query)) { response.CheckReturnCode(-201, -600, -602, -603); record.Database = Database; string line1 = response.ReadUtf(); string line2 = response.ReadUtf(); if (string.IsNullOrEmpty(line1) || string.IsNullOrEmpty(line2)) { // If AUTOIN.GBL missin from the database, // server returns no updated record return(record); } MarcRecord.ParseOneOfMany(record, line1 + Utility.ShortDelimiter + line2); return(record); } }
internal static void ParseOneOfMany(MarcRecord record, string text) { record.Fields.Clear(); string[] delimiters = new string[1]; delimiters[0] = Utility.ShortDelimiter; string[] lines = Utility.SplitString(delimiters, text); ParseSingle(record, lines); }
public string FormatRecord(string format, MarcRecord record) { Query query = new Query(this, "G"); query.AddAnsi(Database); query.AddAnsi(format); query.Add(-2); query.AddUtf(record.Encode()); using (Response response = ExecuteQuery(query)) { response.CheckReturnCode(); return(response.ReadUtf().Trim()); } }
public MarcRecord ReadRecord(int mfn) { Query query = new Query(this, "C"); query.AddAnsi(Database); query.Add(mfn); using (Response response = ExecuteQuery(query)) { response.CheckReturnCode(-201, -600, -602, -603); string[] lines = response.ReadRemainingUtfLines(); MarcRecord result = new MarcRecord(); MarcRecord.ParseSingle(result, lines); result.Database = Database; return(result); } }
internal static void ParseSingle(MarcRecord record, string[] text) { char[] delimiters = { '#' }; string line = text[0]; string[] parts = Utility.SplitString(delimiters, line); record.Mfn = int.Parse(parts[0]); if (parts.Length != 1) { record.Status = int.Parse(parts[1]); } line = text[1]; parts = line.Split(delimiters); record.Version = int.Parse(parts[1]); for (int i = 2; i < text.Length; i++) { RecordField field = RecordField.Parse(text[i]); record.Fields.Add(field); } }
public static Task <string> FormatRecordAsync(this IrbisClient client, string format, MarcRecord record) { return(Task.Factory.StartNew(() => client.FormatRecord(format, record)) .ConfigureSafe()); }
public static Task <MarcRecord> WriteRecordAsync(this IrbisClient client, MarcRecord record) { return(Task.Factory.StartNew(() => client.WriteRecord(record)) .ConfigureSafe()); }