План оператора в модуле Мое рабочее место — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
м (Хранимая процедура)
 
(не показана одна промежуточная версия этого же участника)
Строка 67: Строка 67:
  
  
Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых '''Id''' равен '''Id текущего пользователя''' (первый столбец обязательно '''Id'''). Запрос, который вы вставляете должен выдавать три столбца:
+
Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых '''Id''' равен '''Id текущего пользователя''' (первый столбец обязательно '''Id''' с типом uniqueidentifier ). Запрос, который вы вставляете должен выдавать три столбца:
 
* '''первый столбец''' - Id пользователя
 
* '''первый столбец''' - Id пользователя
 
* '''второй столбец''' - описание параметра
 
* '''второй столбец''' - описание параметра
Строка 114: Строка 114:
 
Следовательно, первый столбец будет '''operatorid''', второй столбец номер абонента в списке, третий - вся необходимая информация, в том порядке в котором требуется. Строки желательно упорядочить по дате (чем ближе дата перезвона, тем выше в таблице). Выдаются только те строки, у которых '''status=1'''. '''SQL-запрос''' следующий:
 
Следовательно, первый столбец будет '''operatorid''', второй столбец номер абонента в списке, третий - вся необходимая информация, в том порядке в котором требуется. Строки желательно упорядочить по дате (чем ближе дата перезвона, тем выше в таблице). Выдаются только те строки, у которых '''status=1'''. '''SQL-запрос''' следующий:
  
  Select operatorid, 'Абонент '+cast(id as nvarchar(100)),  
+
  Select cast(operatorid as uniqueidentifier), 'Абонент '+cast(id as nvarchar(100)),  
 
  cast(cast(recalldate as datetime) as nvarchar(100))+' | '+ recallphone+' | '+ operator +' | '+ recallreason  
 
  cast(cast(recalldate as datetime) as nvarchar(100))+' | '+ recallphone+' | '+ operator +' | '+ recallreason  
 
  From TableMain  
 
  From TableMain  
Строка 128: Строка 128:
 
'''Техническая документация:''' [[Мое рабочее место]]
 
'''Техническая документация:''' [[Мое рабочее место]]
  
'''Скачать полный текст запроса:''' [http://wiki.oktell.ru/images/9/9b/%D0%9C%D0%BE%D0%B5_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B5_%D0%BC%D0%B5%D1%81%D1%82%D0%BE.zip Мое рабочее место.zip]
+
'''Скачать полный текст запроса:''' [[Media:Мое_рабочее_место.zip|Мое рабочее место.zip]]

Текущая версия на 10:35, 31 марта 2023

Наверх

Задача: вывести план оператора по перезвону в модуле "Мое рабочее место".

Данная практика создана в продолжение статьи об автоматическом перезвоне клиентам.

Введение

Пусть есть исходящая операторская задача по некоторой таблице абонентов. При разговоре оператора с клиентом, последний изъявляет желание пообщаться немного позднее и оператор помечает перезвон в диалоговой форме. Затем задача автоматически перезвонит данному клиенту в назначенное время с прикреплением того же оператора, который общался с этим клиентом ранее. Однако, оператор может не ждать и самостоятельно перезвонить клиенту ранее назначенного срока.

Чтобы дать оператору такую возможность, необходимо где-либо выводить информацию о всех предстоящих перезвонах. Варианты вывода следующие:

  • Через отчет.
  • Создается отчет, в котором показывается список всех перезвонов.
  • Достоинством является встроенный фильтр в отчетах (можно выбрать дату, оператора и так далее).
  • Неудобство появляется, если вы не хотите давать оператором доступ к модулю "Статистика" (или чтобы операторы могли просматривать отчеты). В этом случае можно ограничить доступ к каждому отчету с помощью вкладки "Доступ", однако настройка каждого отчета может быть не удобна.
  • Через внешние модули.
  • Возникает потребность в написании модуля. Достоинства и недостатки, по сути, те же, что и у отчета.
  • Через модуль "Мое рабочее место".
  • Достоинством метода является быстрый доступ к информации. Модуль "Мое рабочее место" всегда перед глазами оператора, и вся информация показывается прямо в этом модуле. Недостатком является отсутствие поиска, фильтрации данных.
  • Вывод в другие системы.
  • Так как вся информация хранится в БД Oktell, можно получить доступ к данным из других систем и выводить в вашу CRM-систему. Вопросы интеграции рассмотрены в статье Общее руководство по Web-интеграции

В этой статье рассматривается вывод информации через модуль "Мое рабочее место оператора".


Хранимая процедура

Чтобы вывести информацию в модуль, необходимо изменить хранимую процедуру [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom] в базе данных Oktell. Воспользуйтесь SQL Server Management Studio (SSMS).

Упрощенный вид процедуры (чтобы использовать - вставьте в SQL Server Management Studio и нажмите F5):

USE [oktell]
GO
/****** Object:  StoredProcedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER procedure [dbo].[A_CallCenter_Info_GetOperatorIndexes_Custom]
@iduser uniqueidentifier,
@dtnow datetime = null
as
begin
if ( @dtnow is null )
set @dtnow = GetDate ( )

declare @dtday datetime
set @dtday = Cast ( Floor ( Cast ( @dtnow as float ) ) as datetime )

if ( @iduser = '00000000-0000-0000-0000-000000000000' )
begin

--Вставьте сюда нужный запрос
Select Id, 'Описание 1:', 'значение 1' from a_users

end
end


ПланОператора-001.png


Работает процедура следующим образом: из запроса, который вы вставляете выбираются только те строки, у которых Id равен Id текущего пользователя (первый столбец обязательно Id с типом uniqueidentifier ). Запрос, который вы вставляете должен выдавать три столбца:

  • первый столбец - Id пользователя
  • второй столбец - описание параметра
  • третий столбец - значение параметра


Рассмотрим запрос в примере:

Select Id, 'Описание 1:', 'значение 1' from a_users

Запрос возвращает каждому Id пользователя два константных столбца. При открытии модуля "Мое рабочее место" выполняется данная процедура и на экран выводятся все строки с Id = Id пользователя.


ПланОператора-002.png


Если вы хотите выводить строки по нескольким запросам пользуйтесь операцией объединения union.

Select Id, 'Описание 1:', 'значение 1' from a_users
union
Select Id, 'Количество букв в имени:', cast ( Len ( Name ) as nvarchar ( 50 ) )
From A_Users 
union
Select Id, 'Логин:', Login
From A_Users


ПланОператора-004.png


Перейдем к поставленной задаче. Вся информация об абонентах хранится в таблице TableMain. В этой таблице используются следующие столбцы:

  • Id - номер абонента в списке.
  • phone - телефон абонента.
  • calldate - время звонка.
  • param1 - информационное поле.
  • param2 - информационное поле.
  • param3 - информационное поле.
  • operator - имя обслуживающего оператора.
  • operatorid - id обслуживающего оператора.
  • recalldate - дата перезвона.
  • recallreason - причина перезвона.
  • recallphone - причина перезвона.
  • status - статус звонка (1- перезвон, 2 -успешный).

Следовательно, первый столбец будет operatorid, второй столбец номер абонента в списке, третий - вся необходимая информация, в том порядке в котором требуется. Строки желательно упорядочить по дате (чем ближе дата перезвона, тем выше в таблице). Выдаются только те строки, у которых status=1. SQL-запрос следующий:

Select cast(operatorid as uniqueidentifier), 'Абонент '+cast(id as nvarchar(100)), 
cast(cast(recalldate as datetime) as nvarchar(100))+' | '+ recallphone+' | '+ operator +' | '+ recallreason 
From TableMain 
where 
cast(floor(cast(cast(recalldate as datetime) as float)) as datetime) <= cast(floor(cast(getdate() as float)) as datetime)
and status=1
order by cast(recalldate as datetime) 


ПланОператора-005.png


Техническая документация: Мое рабочее место

Скачать полный текст запроса: Мое рабочее место.zip