Структура таблиц номерного плана — различия между версиями
Материал из Oktell
(Новая страница: «В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план. *Инфо...») |
|||
(не показано 8 промежуточных версии этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Работа с БД Oktell|Наверх]] | ||
+ | |||
В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план. | В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план. | ||
− | *Информация о внутреннем номерном плане содержится в 4 таблицах: A_NumberPlan | + | *Информация о внутреннем номерном плане содержится в 4 таблицах: |
+ | :*'''A_NumberPlan''' | ||
+ | :*'''A_NumberPlanAction''' | ||
+ | :*'''A_Rules''' | ||
+ | :*'''A_RuleRecords'''. | ||
+ | |||
+ | |||
Ниже подробно описаны основные поля каждой таблицы | Ниже подробно описаны основные поля каждой таблицы | ||
− | + | *'''[A_NumberPlan]''' - справочник номеров | |
:*[ID] - идентификатор номера | :*[ID] - идентификатор номера | ||
:*[Prefix] - номер | :*[Prefix] - номер | ||
− | + | ||
+ | *'''[A_NumberPlanAction]''' - таблица действий по конкретному номеру | ||
:*[ID] [uniqueidentifier] - идентификатор записи | :*[ID] [uniqueidentifier] - идентификатор записи | ||
:*[NumID] [uniqueidentifier] - идентификатор номера из таблицы A_NumberPlan | :*[NumID] [uniqueidentifier] - идентификатор номера из таблицы A_NumberPlan | ||
Строка 13: | Строка 22: | ||
:*[ExtraType] [int] - дополнительный тип для служебных номеров: { 1 - флэш, 2 - город, 3 - АТС, 4 - перехват, 9 - SipHotline } | :*[ExtraType] [int] - дополнительный тип для служебных номеров: { 1 - флэш, 2 - город, 3 - АТС, 4 - перехват, 9 - SipHotline } | ||
:*[ExtraID] [uniqueidentifier] - ссылка на правило звонка (для стандартных номеров) | :*[ExtraID] [uniqueidentifier] - ссылка на правило звонка (для стандартных номеров) | ||
− | + | ||
+ | *'''[A_Rules]''' - правило стандартного номера | ||
:*[ID] [uniqueidentifier] - идентификатор записи | :*[ID] [uniqueidentifier] - идентификатор записи | ||
:*[Name] [nvarchar] (500) - название правила | :*[Name] [nvarchar] (500) - название правила | ||
:*[Type] [int] - тип правила(режим вызова абонента) | :*[Type] [int] - тип правила(режим вызова абонента) | ||
− | + | ||
+ | *'''[A_RuleRecords]''' - объекты правила | ||
:*[ID] [uniqueidentifier] - идентификатор записи | :*[ID] [uniqueidentifier] - идентификатор записи | ||
:*[InnerAddressType] - тип объекта правила: { 0 - пользователь, 1 - линия, 2 - номер, 3 - внутренний сип-поток, 4 - внешний номер } | :*[InnerAddressType] - тип объекта правила: { 0 - пользователь, 1 - линия, 2 - номер, 3 - внутренний сип-поток, 4 - внешний номер } | ||
Строка 25: | Строка 36: | ||
:*[ReactID] [uniqueidentifier] - идентификатор объекта (id пользователя, id линии, id номера) | :*[ReactID] [uniqueidentifier] - идентификатор объекта (id пользователя, id линии, id номера) | ||
:*[Account] [nvarchar] (100) - внешний номер | :*[Account] [nvarchar] (100) - внешний номер | ||
+ | |||
+ | |||
Связи между таблицами: | Связи между таблицами: | ||
− | + | [A_NumberPlan].[ID] <-> [A_NumberPlanAction].[NumID] | |
− | + | [A_NumberPlanAction].[ExtraID] <-> [A_Rules].[ID] | |
− | + | [A_Rules].[ID] <-> [A_RuleRecords].[RuleID] | |
+ | |||
+ | |||
+ | ---- | ||
Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц: | Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц: | ||
Строка 60: | Строка 76: | ||
AND InnerAddressType=1) | AND InnerAddressType=1) | ||
ORDER BY np.Prefix | ORDER BY np.Prefix | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | :'''''По внутреннему номеру найти всех пользователей, которые участвуют в этом номере (без распаковки внутренних номеров)''''' | ||
+ | <span style="color:red">ВНИМАНИЕ: Если вы хотите распаковывать внутренние номера используйте статью [[Распаковка номеров]] | ||
+ | |||
+ | *@prefix - внутренний номер, для которого нужно найти всех пользователей. | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
</pre> | </pre> |
Текущая версия на 11:58, 22 декабря 2014
В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план.
- Информация о внутреннем номерном плане содержится в 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