Workflow's definitions are presented in three tables of ContactCenterAIF DB : 1) все определённые workflows даются в таблице WorkflowsMaster, все определённые шаги (steps) даются в таблице WorkflowStepsMaster, связь между ними, т.е. из каких шагов состоит какой workflow, дается в таблице WorkflowStepMap. Наконец, каждый шаг связан с одной и только одной application через ту же таблицу WorkflowStepsMaster (ксати, что делает непонятным, зачем вообще понадобились steps) .
For example, (assuming clear installation) the following query outputs all hosted applications that intended to run from workflow 1:
select wsmas.StepID, wsmas.Name as 'Step Name',sequence, apps.ApplicationId, apps.Name
from WorkflowStepMap as wsm
left join WorkflowStepsMaster as wsmas on wsm.stepid = wsmas.StepID
left join Application as apps on apps.ApplicationId = wsmas.ApplicationId
where workflowid = 1
order by sequence asc
Output:
StepID StepName sequence ApplicationId Name
1 Account 0 6 Accounts
2 Cell Coverage 1 8 Cell Coverage
3 External App 2 7 StandaloneTestApp
(3 row(s) affected)
Таким образом мы нашли, что workflow 1 состоит из 3-х шагов, которые будут исполняться в указанной (according to sequence column) последовательности и на каждом шаге будет исполняться соответствующая application. Каждый шаг представлен в Agent Desktop своим именем - StepName column.
Какие workflows доступны для какого агента, решаеется с помошью таблицы AgentWorkflowACL.
Дальнейший план такой :
1). Каждая hosted application имеет свой initialization string в своей строчке таблицы Application. В зависимости от типа приложения он несколько меняет форму, но главное в том, что для каждой application, соотвеветствующей исполняемому из workflow шагу, AgentDesktop из нее может узнать во-первых, где найти hosed application и где выводить ее UI. Понятно, что от самой hosted application требуется поддержка некоторого протокола, согласно которому AgentDesktop сможет с ней разговаривать. Таким протоколом является IHostedApplication interface и его реализация в классe HostedControl (в HostedApplication.dll assembly). Т.о. на этом шаге становится понятным как разрабатывать hosted appilcations - имплементируя IHostedApplication - и как установить разработанный assembly into AgentDesktop.
2). AzMan. Попытка выполнить workflow без предварительной кохфигурации AzMan, дает примерно такой результат :
Именно AzMan занимается управлением указанного здесь 'access to the hosted applications'. AzMan (в файле AzManCCF.xml) представляет собой Authorization Store. Введение в тему можно найти здесь. Непосредствено к нему обращается лишь ContactCenterAIF Web Service, в web.config которого и нужно внести путь к самому файлу
<
add key="AzManStore" value="msxml://C:InetpubwwwrootContactCenterAIFAzManCCF.xml
" />Authorization Manager MMC snap-in используется для добавления groups и их назначения to scopes. Scopa'ми в данном случае являются applications, один к одному из таблицы Application. В Agents group добавляют CCSUsers group и потом назначают RoleAssignment для каждой желаемой application (scope). Существует еще опция редактирования AzMan через LDAP, но ее мы пока оставим в стороне.
В любом случае, после Role Assignment, выполним метод GetApplications из ContactCenterAIF.Application.asm WebService. Если посмотреть на его результаты внимательно, можно понять, что он делает - выбираются строки из таблицы Application (stored procedure GetAllApplications2) и для каждой из них проверяется authorization в AzManCCF. Сама выглядит примерно так :
IAzClientContext ctx;IAzScope scope = m_AzManApplication.OpenScope(<ApplicationName>, null);if( scope != null ){ Array roles = (Array)ctx.GetRoles(<ApplicationName>, scope.Name); if( roles.GetLength(0) > 0 ) isAuthorized = true;}В следующем утверждении я не уверен, но по-моему, те applications, у которых Type = 1, автоматически подсоединяются к имени customer в AgentDesktop :
[показать]