Сервис нумераторов позволяет использовать номера удаленных объектов повторно. Это означает, что будут использоваться все номера нумератора. Если некоторый объект был удален, его номер не пропадает, а будет вновь использован при следующем обращении к  сервису нумераторов.

Для того, чтобы поддержать возможность сохранения номеров удаляемых объектов, необходимо реализовать в классе объекта интерфейс Xafari.BC.Numerators.IDeletedNumbersSupport. Ниже приведен пример реализации в классе ObjectWithNumeratorField.

 

public class ObjectWithNumeratorField : BaseObjectIDeletedNumbersSupport

            {

                public ObjectWithNumeratorField(Session session) : base(session) { }

 

                public string NumProperty

                {

                            get { return GetPropertyValue<string>("NumProperty"); }

                            set { SetPropertyValue<string>("NumProperty"value); }

                }

 

                #region IDeletedNumbersSupport Members

 

                private Dictionary<stringlong> _realIndex = new Dictionary<stringlong>();

                /// <summary>

                /// Значения индексов для полей

                /// </summary>

                [Browsable(false)]

                [ValueConverter(typeof(DictionaryToStringConverter))]

                public Dictionary<stringlong> RealIndex

                {

                            get { return _realIndex; }

                            set { this.SetPropertyValue("RealIndex"ref _realIndex, value); }

                }

                /// <summary>

                /// Возвращает реальный порядковый номер для данного нумератора,

                /// примененного к данному свойству.

                /// </summary>

                /// <param name="numerator">Этот нумератор применяется.</param>

                /// <param name="member">Нумератор применяется к данному свойству.</param>

                /// <returns></returns>

                long IDeletedNumbersSupport.GetRealIndex(NumeratorBase numerator, string member)

                {

                            if (!RealIndex.ContainsKey(member))

                                return 0;

 

                            return RealIndex[member];

                }

                /// <summary>

                /// Устанавливает реальный порядковый номер для данного нумератора,

                /// примененного к данному свойству.

                /// </summary>

                /// <param name="numerator">Этот нумератор применяется.</param>

                /// <param name="member">Нумератор применяется к данному свойству.</param>

                /// <param name="value">Реальный порядковый номер.</param>

                void IDeletedNumbersSupport.SetRealIndex(NumeratorBase numerator, string member, long value)

                {

                            

            if (this.RealIndex.ContainsKey(member))

                this.RealIndex[member] = value;

            else

                this.RealIndex.Add(member, value);

                }

 

                #endregion

}