Структура таблиц номерного плана — различия между версиями
Материал из Oktell
(не показано 5 промежуточных версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | [[ | + | [[Работа с БД Oktell|Наверх]] |
В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план. | В данной статье рассмотрим структура таблиц, описывающих внутренний номерной план. | ||
Строка 8: | Строка 8: | ||
:*'''A_Rules''' | :*'''A_Rules''' | ||
:*'''A_RuleRecords'''. | :*'''A_RuleRecords'''. | ||
+ | |||
Ниже подробно описаны основные поля каждой таблицы | Ниже подробно описаны основные поля каждой таблицы | ||
Строка 42: | Строка 43: | ||
[A_NumberPlanAction].[ExtraID] <-> [A_Rules].[ID] | [A_NumberPlanAction].[ExtraID] <-> [A_Rules].[ID] | ||
[A_Rules].[ID] <-> [A_RuleRecords].[RuleID] | [A_Rules].[ID] <-> [A_RuleRecords].[RuleID] | ||
+ | |||
+ | |||
+ | ---- | ||
Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц: | Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц: | ||
Строка 72: | Строка 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