/// <summary> /// ibatrak чтение записи с проверкой /// </summary> public IrbisRecord ReadRecord(int mfn) { var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | RecordStatus.LogicallyDeleted | RecordStatus.Absent); if (_codeArgs.Code != 0) { return(null); } IrbisRecord result = Mst.ReadRecord(xrfRecord.Offset); result.Database = Database; //в записи MST пишутся одни флаги, в XRF - другие //в результирующей записи нужно иметь комбинированный статус result.Status |= xrfRecord.Status; return(result); //XrfRecord xrfRecord = Xrf.ReadRecord(mfn); ////ibatrak если запись удалена физически, не читать //if (Convert.ToBoolean(xrfRecord.Status & RecordStatus.PhysicallyDeleted)) // return null; //MstRecord mstRecord = Mst.ReadRecord2(xrfRecord.Offset); //IrbisRecord result = mstRecord.DecodeRecord(); //result.Database = Database; //return result; }
/// <summary> /// ibatrak чтение записи с проверкой только на физическое удаление /// </summary> public IrbisRecord ReadExistingRecord(int mfn) { var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | RecordStatus.Absent); if (_codeArgs.Code != 0) { return(null); } IrbisRecord result = Mst.ReadRecord(xrfRecord.Offset); result.Database = Database; //в записи MST пишутся одни флаги, в XRF - другие //в результирующей записи нужно иметь комбинированный статус result.Status |= xrfRecord.Status; return(result); }
/// <summary> /// ibatrak чтение записи N шагов назад /// </summary> public IrbisRecord ReadRecord(int mfn, int stepsBack) { var version = ReadVersion(mfn); if (_codeArgs.Code != 0) { return(null); } if (stepsBack <= 0 || version <= stepsBack) { OnIrbis64Code(-201 /*ERR_OLDREC_ABSENT*/); return(null); } //здесь можно читать логически удаленные записи var xrfRecord = GetXrfRecordError(mfn, RecordStatus.PhysicallyDeleted | /*RecordStatus.LogicallyDeleted |*/ RecordStatus.Absent); if (_codeArgs.Code != 0) { return(null); } IrbisRecord rec = null; var leader = Mst.ReadRecordLeader(xrfRecord.Offset); for (int i = 0; i < stepsBack; i++) { if (i < stepsBack - 1) { leader = Mst.ReadRecordLeader(leader.Previous); } else { var result = Mst.ReadRecord(leader.Previous); result.Database = Database; rec = result; } } rec.Database = Database; //в записи MST пишутся одни флаги, в XRF - другие //в результирующей записи нужно иметь комбинированный статус rec.Status |= xrfRecord.Status; return(rec); }