Статья №279
Структура таблиц номерного плана
В статье описана структура таблиц, описывающих внутренний номерной план
Информация о внутреннем номерном плане содержится в 4 таблицах: A_NumberPlan, A_NumberPlanAction, A_Rules, A_RuleRecords.
Ниже подробно описаны основные поля каждой таблицы
[A_NumberPlan] - справочник номеров
[ID] - идентификатор номера
[Prefix] - номер
[A_NumberPlanAction] - таблица действий по конкретному номеру
[ID] [uniqueidentifier] - идентификатор записи
[NumID] [uniqueidentifier] - идентификатор номера из таблицы A_NumberPlan
[NumType] [int] - тип номера:
{ 0 - стандартный, 1 - специальный, 2 - быстрый, 3 - IVR, 4 - экстренный }
[ExtraType] [int] - дополнительный тип для служебных номеров:
{ 1 - флэш, 2 - город, 3 - АТС, 4 - перехват, 9 - SipHotline }
[ExtraID] [uniqueidentifier] - ссылка на правило звонка (для стандартных номеров)
[A_Rules] - правило стандартного номера
[ID] [uniqueidentifier] - идентификатор записи
[Name] [nvarchar] (500) - название правила
[Type] [int] - тип правила(режим вызова абонента)
[A_RuleRecords] - объекты правила
[ID] [uniqueidentifier] - идентификатор записи
[InnerAddressType] - тип объекта правила:
{ 0 - пользователь, 1 - линия, 2 - номер, 3 - внутренний сип-поток, 4 - внешний номер }
[StartTime] [int]- время начала реагирования
[FinishTime] [int]- время окончания реагирования
[RuleID] [uniqueidentifier] - идентификатор правила
[ReactID] [uniqueidentifier] - идентификатор объекта (id пользователя, id линии, id номера)
[Account] [nvarchar] (100) - внешний номер
Связи между таблицами:
[A_NumberPlan].[ID] <-> [A_NumberPlanAction].[NumID]
[A_NumberPlanAction].[ExtraID] <-> [A_Rules].[ID]
[A_Rules].[ID] <-> [A_RuleRecords].[RuleID]
Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц:
- По идентификатору пользователя найти его внутренний номер.
Т.е. необходимо найти те номера, в правиле которых содержится 1 объект и этот объект нужный нам пользователь
@userid - параметр, содержащий идентификатор пользователя
SELECT TOP 1 np.Prefix FROM A_NumberPlan np
INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID AND npa.ExtraId IN
(SELECT RuleID FROM A_RuleRecords
WHERE reactid=@userid AND InnerAddressType=0
AND RuleID IN
(SELECT RuleID FROM A_RuleRecords
GROUP BY RuleID HAVING COUNT(*)=1))
ORDER BY np.Prefix
- По номеру линии найти все номера (включая групповые), содержащие эту линию
@linenum - параметр, содержащий номер линии
SELECT np.Prefix FROM A_NumberPlan np
INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID AND npa.ExtraId IN
(SELECT RuleID FROM A_RuleRecords
WHERE reactid=(select id from dbo.A_View_ServerLinesAll where systemnum=@linenum)
AND InnerAddressType=1)
ORDER BY np.Prefix
Номерной план, номер, пользователь