Структура таблиц номерного плана

Материал из Oktell
Версия от 11:58, 22 декабря 2014; Oktell Support (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Наверх

В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план.

  • Информация о внутреннем номерном плане содержится в 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


По внутреннему номеру найти всех пользователей, которые участвуют в этом номере (без распаковки внутренних номеров)

ВНИМАНИЕ: Если вы хотите распаковывать внутренние номера используйте статью Распаковка номеров

  • @prefix - внутренний номер, для которого нужно найти всех пользователей.
select  np.Prefix, u.Name from A_NumberPlan np
inner join A_NumberPlanAction npa on np.ID=npa.NumID
inner join A_Rules r on npa.ExtraID=r.ID
inner join A_RuleRecords rr on r.ID=rr.RuleID
inner join A_Users u on rr.ReactID=u.ID
where np.Prefix=@prefix