Как вы уже наверное поняли, все скрипты и прочие приложения я пишу на vb.net. Однако, мои коллеги предпочитают C#. Общаться на одном языке, мне помогает крутой переводчик c# - vb.net.
http://www.developerfusion.com/tools/convert/vb-to-csharp/
Читать дальше
Поиск
Ярлыки
авто генерация кода
(1)
Администрирование DocsVision
(60)
Атрибутивный поиск
(3)
База данных
(24)
Базы знаний
(1)
Безопасность
(1)
Бизнес-процессы
(20)
Блог
(2)
Вы увидите это первыми
(1)
Групповые политики
(1)
Диаграммы
(2)
Задания
(2)
Интеграция
(2)
Карточки DocsVision
(14)
Конструктор Решений
(11)
Маркетинг и продажи
(4)
Навигатор
(3)
Новое
(3)
Новости
(32)
Опрос
(4)
Опросы DocsVision
(4)
Оптимизация
(3)
Отчеты
(2)
Ошибки
(1)
Поддержка
(14)
Полезные ссылки
(1)
Представления
(4)
Производительность
(5)
Разбор полетов
(18)
Разработка для Workflow
(7)
разработка карточек
(2)
Разработка на платформе DocsVision
(41)
Разработка решений
(43)
Расширение платформы
(1)
Расширенные отчеты
(9)
Решения на платформе DocsVision
(6)
Сервисы DocsVision
(3)
Сканеры
(3)
Справочник сотрудников
(1)
Справочник типов
(1)
Установка
(1)
Утилиты
(13)
Шлюз в SharePoint
(8)
Штрихкод
(2)
Cкрипты карточек
(7)
DocsVision внутри
(1)
DocsVision Live
(1)
FileStream
(1)
FireFox
(2)
Opera
(1)
Powershell
(5)
Safari
(1)
SharePoint2007
(1)
SharePoint2010
(2)
Silverlight
(1)
UltraViews
(1)
Vista
(1)
Переводчик
Автор:
Михаил Захаров
пятница, 29 января 2010 г.
/
Ярлыки:
Полезные ссылки,
Разработка на платформе DocsVision
Чтение прав карточки в сценарии бизнес-процесса
Автор:
Михаил Захаров
четверг, 28 января 2010 г.
/
Ярлыки:
Бизнес-процессы,
Разработка для Workflow,
Разработка решений
Для решения одного инцидента нам было необходимо фиксировать какой набор прав установлен на карточке в определенный момент времени. Конкретно, в определенных местах бизнес-процесса. Был разработан скрипт, который делает это.
Данные пишутся в журнал бизнес-процесса, соответственно попадают они и в журнал Workflow в режиме отладочных сообщений. Информация выводится в следующем виде:
Карточка документа: CardID
SecurityDescriptor:
Дескриптор безопасности
Пользователь: учетная запись и SID
AccessMask: Маска доступа и расшифровка
AceFlags: флаги
InheritanceFlags:флаги наследования
IsInherited: унаследованные ли права
PropagationFlags: распространение наследования
В скрипте есть недоработка. Строка
Dim oAccountName As NTAccount = DirectCast(oAce.SecurityIdentifier.Translate(GetType(NTAccount)), NTAccount)
может вызвать ошибку в случае если учетка удалена и у неё остался только SID, - в этом случае нельзя получить по SID имя записи. Надо обернуть в Try - Catch.
Скрипт сделан для платформы DocsVision 4.3
Сценарий бизнес-процесса на vb.net:
UPD. Убрал лишнее
Читать дальше
Оставить комментарий
(всего: 2)
Данные пишутся в журнал бизнес-процесса, соответственно попадают они и в журнал Workflow в режиме отладочных сообщений. Информация выводится в следующем виде:
Карточка документа: CardID
SecurityDescriptor:
Дескриптор безопасности
Пользователь: учетная запись и SID
AccessMask: Маска доступа и расшифровка
AceFlags: флаги
InheritanceFlags:флаги наследования
IsInherited: унаследованные ли права
PropagationFlags: распространение наследования
В скрипте есть недоработка. Строка
Dim oAccountName As NTAccount = DirectCast(oAce.SecurityIdentifier.Translate(GetType(NTAccount)), NTAccount)
может вызвать ошибку в случае если учетка удалена и у неё остался только SID, - в этом случае нельзя получить по SID имя записи. Надо обернуть в Try - Catch.
Скрипт сделан для платформы DocsVision 4.3
Сценарий бизнес-процесса на vb.net:
Option Explicit On Option Strict On ' подключение системных библиотек Imports System Imports System.Xml Imports System.Security.AccessControl Imports System.Security.Principal Imports System.Collections Imports Microsoft.VisualBasic.Constants Imports Microsoft.VisualBasic.Strings ' подключение библиотек СУБП Imports DocsVision.Workflow.Objects Imports DocsVision.Workflow.Runtime Imports DocsVision.Workflow.Gates Imports DocsVision.Platform.HelperAPI Imports DocsVision.Platform.SecurityManager Namespace DVScriptHost Public Class DVScript Dim m_oGate As DVGate ' получаем сессию Dim m_oSession As DocsVision.Platform.ObjectManager.UserSession Dim m_oLastBytes As Byte() Private Enum DVRights As Integer READ = &H1 ' Чтение, специальное WRITE = &H2 ' Изменение CREATE_CONTENT = &H4 ' Создание дочерних DELETE_CONTENT = &H8 ' Удаление дочерних COPY = &H10 ' Копирование ' Standard rights DELETE = &H10000 ' Удаление READ_CONTROL = &H20000 ' Чтение, стандартное WRITE_DAC = &H40000 ' Изменение разрешений WRITE_OWNER = &H80000 ' Смена владельца SYNCHRONIZE = &H100000 ' Не используется ACCESS_SYSTEM_SECURITY = &H1000000 ' Изменение параметров безопасности ' Generic rights GENERIC_ALL = &H10000000 ' Полный доступ GENERIC_EXECUTE = &H20000000 ' Выполнение GENERIC_WRITE = &H40000000 ' Изменение GENERIC_READ = &H80000000 ' Чтение End Enum Public Sub Execute(ByVal process As ProcessInfo, ByVal passInfo As PassState) Try ' получаем шлюз m_oGate = CType(process.Gates(DVGate.GateID), DVGate) ' получаем сессию m_oSession = m_oGate.Session Dim varDocCard As ProcessVariable varDocCard = process.GetVariableByName("Карточка") Dim oCard As DVCard = CType(varDocCard.Value, DVCard) Dim oAccounts As New ArrayList Dim oSecurityDesc As CommonSecurityDescriptor = GetCardDescriptor(process, oCard.ID) oAccounts = GetAccountsFromDescriptor(oSecurityDesc) process.LogMessage(GetLogMessage(oCard.ID, oAccounts)) Catch Err As Exception ' запись в журнал ошибки исполнения process.LogMessage("Ошибка выполнения скрипта:" + Err.Message) End Try End Sub Private Function GetCardDescriptor(ByRef process As ProcessInfo, ByVal CardID As String) As CommonSecurityDescriptor Dim oSecureCard As DocsVision.Platform.SecurityManager.ISecureObject = m_oSession.AccessManager.GetSecureCard(CardID) Dim oDescBytes As Byte() = DirectCast(oSecureCard.GetSecurity(SecurityInformationEnum.siDacl), Byte()) ' Получаем объект типа CommonSecurityDescriptor из массива byte() для карточки Dim oSecurityDesc As CommonSecurityDescriptor = New CommonSecurityDescriptor(True, False, oDescBytes, 0) m_oLastBytes = oDescBytes Return oSecurityDesc End Function Private Function GetAccountsFromDescriptor(ByVal oSecurityDesc As CommonSecurityDescriptor) As ArrayList Dim oAccounts As New ArrayList Dim oACL As DiscretionaryAcl = oSecurityDesc.DiscretionaryAcl For Each oACE As CommonAce In oACL oAccounts.Add(oACE) Next Return oAccounts End Function Private Function GetLogMessage(ByVal CardID As String, ByVal oAccounts As ArrayList) As String Dim sResult As String = "Карточка документа:" + CardID + vbCrLf sResult += "SecurityDescriptor: " + Convert.ToBase64String(m_oLastBytes) + vbCrLf For Each oAce As CommonAce In oAccounts Dim oAccountName As NTAccount = DirectCast(oAce.SecurityIdentifier.Translate(GetType(NTAccount)), NTAccount) sResult += "Пользователь: " + oAccountName.Value.ToString + " (" + oAce.SecurityIdentifier.ToString + ")" + vbCrLf sResult += vbTab + "AccessMask:" + vbTab + oAce.AccessMask.ToString + "(" + Decompose(oAce.AccessMask) + ")" + vbCrLf sResult += vbTab + "AceFlags:" + vbTab + oAce.AceFlags.ToString + vbCrLf sResult += vbTab + "InheritanceFlags:" + vbTab + oAce.InheritanceFlags.ToString + vbCrLf sResult += vbTab + "IsInherited:" + vbTab + oAce.IsInherited.ToString + vbCrLf sResult += vbTab + "PropagationFlags:" + vbTab + oAce.PropagationFlags.ToString + vbCrLf Next Return sResult End Function Private Function Decompose(ByVal iAccessMask As Integer) As String Dim sResult As String = vbNullString If (iAccessMask And DVRights.ACCESS_SYSTEM_SECURITY) <> 0 Then sResult += "+ACCESS_SYSTEM_SECURITY" End If If (iAccessMask And DVRights.COPY) <> 0 Then sResult += "+COPY" End If If (iAccessMask And DVRights.CREATE_CONTENT) <> 0 Then sResult += "+CREATE_CONTENT" End If If (iAccessMask And DVRights.DELETE) <> 0 Then sResult += "+DELETE" End If If (iAccessMask And DVRights.DELETE_CONTENT) <> 0 Then sResult += "+DELETE_CONTENT" End If If (iAccessMask And DVRights.GENERIC_ALL) <> 0 Then sResult += "+GENERIC_ALL" End If If (iAccessMask And DVRights.GENERIC_EXECUTE) <> 0 Then sResult += "+GENERIC_EXECUTE" End If If (iAccessMask And DVRights.GENERIC_READ) <> 0 Then sResult += "+GENERIC_READ" End If If (iAccessMask And DVRights.GENERIC_WRITE) <> 0 Then sResult += "+GENERIC_WRITE" End If If (iAccessMask And DVRights.READ) <> 0 Then sResult += "+READ" End If If (iAccessMask And DVRights.READ_CONTROL) <> 0 Then sResult += "+READ_CONTROL" End If If (iAccessMask And DVRights.SYNCHRONIZE) <> 0 Then sResult += "+SYNCHRONIZE" End If If (iAccessMask And DVRights.WRITE) <> 0 Then sResult += "+WRITE" End If If (iAccessMask And DVRights.WRITE_DAC) <> 0 Then sResult += "+WRITE_DAC" End If If (iAccessMask And DVRights.WRITE_OWNER) <> 0 Then sResult += "+WRITE_OWNER" End If If sResult <> vbNullString Then sResult = Right(sResult, Len(sResult) - 1) Return sResult End Function End Class End Namespace
UPD. Убрал лишнее
Читать дальше
Сообщение об SQL ошибке при работе с данными
В техническую поддержку DocsVision приходят обращения
"Делал операцию ... в Навигаторе. Появилось сообщение об ошибке 'Произошла SQL ошибка при выполнении операции с данными на сервере'"
Данное сообщение означает, что сервер DocsVision выполнял какой либо запрос (процедуру и т.п) на базе данных, и сервер MS SQL вернул сообщение об ошибке. Подробный текст сообщения всегда содержится в журнале сервера DocsVision. Журнал включается в консоли настройки, ветка "Сервер", поле "Файл журнала".
Как правило, по тексту сообщения можно понять, в чем причина. Если же нет, то текст сообщения об ошибке, с описанием действия, это те данные, которые необходимо присылать в таких случаях в техподдержку.
p.s. Сообщения в журнале сервера могут появляться с некоторой задержкой. Читать дальше
Оставить комментарий
(всего: 0)
"Делал операцию ... в Навигаторе. Появилось сообщение об ошибке 'Произошла SQL ошибка при выполнении операции с данными на сервере'"
Данное сообщение означает, что сервер DocsVision выполнял какой либо запрос (процедуру и т.п) на базе данных, и сервер MS SQL вернул сообщение об ошибке. Подробный текст сообщения всегда содержится в журнале сервера DocsVision. Журнал включается в консоли настройки, ветка "Сервер", поле "Файл журнала".
Как правило, по тексту сообщения можно понять, в чем причина. Если же нет, то текст сообщения об ошибке, с описанием действия, это те данные, которые необходимо присылать в таких случаях в техподдержку.
p.s. Сообщения в журнале сервера могут появляться с некоторой задержкой. Читать дальше
Присоединение по штрих-коду
Иногда встречается такая ситуация, когда присоединение по штрих-коду происходит ни к той картчке, но если посмотреть в xml карточке или через DVExplorer, то номера штрих-кодов будут одинаковы в нескольких карточках.
При такой ситуации нужно:
Проверить, что на справочник настроек у всех сотрудников есть право чтения (в т.ч. право чтения на подчиненные объекты) + первый сотрудник, который выдает штрих-код должен иметь право на запись, что бы туда прописался ID нумератора. Также в системе не должно быть каких-либо пользовательских скриптов для работы с нумераторами.
Проверить, что все нормально можно так:
1. выдаем штрих-код под администратором, смотрим на XML справочника настроек, ищем там поле BarcodeNumerator, запоминаем ID
2. выдаем штрих-код под обычным сотрудником, снова смотрим XML и ищем поле BarcodeNumerator - ID должен быть тем же самым. Если ID стал другой и при этом не было никаких ошибок, то, значит, неверно настроены права. Читать дальше
Оставить комментарий
(всего: 0)
При такой ситуации нужно:
Проверить, что на справочник настроек у всех сотрудников есть право чтения (в т.ч. право чтения на подчиненные объекты) + первый сотрудник, который выдает штрих-код должен иметь право на запись, что бы туда прописался ID нумератора. Также в системе не должно быть каких-либо пользовательских скриптов для работы с нумераторами.
Проверить, что все нормально можно так:
1. выдаем штрих-код под администратором, смотрим на XML справочника настроек, ищем там поле BarcodeNumerator, запоминаем ID
2. выдаем штрих-код под обычным сотрудником, снова смотрим XML и ищем поле BarcodeNumerator - ID должен быть тем же самым. Если ID стал другой и при этом не было никаких ошибок, то, значит, неверно настроены права. Читать дальше
Опрос об очередности выпуска дополнительных модулей DocsVision
Дорогие друзья!
В нашем блоге появился новый опрос об очередности выпуска дополнительных модулей DocsVision. Количество дополнительных модулей сегодня уже достигло 17 и будет увеличиваться. На их выпуск после выхода очередного релиза платформы DocsVision уходит достаточно много времени. Мы делаем все возможное чтобы сократить это время без ущерба для качества продуктов, однако выпуская в первую очередь модули, наиболее востребованные в проектах внедрения, мы существенно сократим сроки готовности всей системы.
Просим вас потратить несколько минут и ответить на опросную анкету, расставив модули по очередям выпуска в оптимальном на ваш взгляд порядке.
Заполнить опрос можно по данной ссылке http://surveys.polldaddy.com/s/D7E31B7973CC4C94/. Так же ссылка на опрос будет висеть в правом верхнем модуле блога.
Заранее благодарны за сотрудничество. Читать дальше
Оставить комментарий
(всего: 0)
В нашем блоге появился новый опрос об очередности выпуска дополнительных модулей DocsVision. Количество дополнительных модулей сегодня уже достигло 17 и будет увеличиваться. На их выпуск после выхода очередного релиза платформы DocsVision уходит достаточно много времени. Мы делаем все возможное чтобы сократить это время без ущерба для качества продуктов, однако выпуская в первую очередь модули, наиболее востребованные в проектах внедрения, мы существенно сократим сроки готовности всей системы.
Просим вас потратить несколько минут и ответить на опросную анкету, расставив модули по очередям выпуска в оптимальном на ваш взгляд порядке.
Заполнить опрос можно по данной ссылке http://surveys.polldaddy.com/s/D7E31B7973CC4C94/. Так же ссылка на опрос будет висеть в правом верхнем модуле блога.
Заранее благодарны за сотрудничество. Читать дальше
Новая система поддержки пользователей HelpDesk2. Общее описание.
Автор:
Михаил Захаров
вторник, 12 января 2010 г.
/
Ярлыки:
Разработка решений,
Решения на платформе DocsVision
В службе технической поддержки DocsVision мы используем собственную систему HelpDesk поддержки пользователей на основе DocsVision (текущая версия 4.3.1848). Эта система является частью общего инструмента производства платформы DVManagement.
Как это работает? Состав таков.
1. Основным объектом является карточка "Обращения", которая хранит всю информацию об инциденте: контакты, описание, история переписки с файлами и т.п.
2. Так же используется ряд справочников для хранения информации: справочник контрагентов - контакты, универсальный справочник - версии DocsVision, справочник модулей DocsVision (разработан дополнительно) - список модулей.
3. Набор бизнес-процессов
- бизнес-процессы отвечающие за обработку входящей почты
- процессы, которые отправляют ответы, и напоминания
- обслуживающие процессы, которые удаляют спам, отправляют внутренние напоминания и т.п.
4. Отчеты на базе модуля "Расширенные отчеты"
Данная система хорошо работает, однако её минусы не дают нам сделать коммуникации еще более качественными. Какие же минусы?
1. Используется древний и неудобный канал коммуникации - электронная почта. Письма могут банально не доходить.
2. Всю историю переписки, текущий статус инцидента видят только инженеры технической поддержки, но не специалисты, которые обращаются к нам, то есть вы. У вас остается только набор ответов в виде писем, что не удобно.
3. Вам недоступен поиск по инцидентам.
4. В текущей реализации поддерживается только один уровень обслуживания (SLA). Масштабирование невозможно.
5. В качестве идентификатора пользователя является его адрес электронной почты.
Итак задача модернизации возникла. Как её решить? Прежде всего было просмотрено довольно много уже готовых продуктов. HP Service Desk - круто, но слишком много функционала, дорогой продукт и внедрение. Zendesk - очень удобный интерфейс, красиво сделано, модель SaaS, но функционал не подходит для нашей модели поддержки. OmniTracker - подходит, интерфейс, кстати на DocsVision похож. DocsVision ServiceDesk - подходит, но требует доработки некоторых модулей под наши задачи. И еще большая куча продуктов, как коммерческих так и бесплатных.
В общем два подхода: использовать сторонний продукт, разрабатывать свой продукт на базе DocsVision.
Дебаты были не бурными - DocsVision прекрасная платформа для разработки продуктов такого типа. Тем более что DVManagement это прекрасно продемонстрировал. Так же не хотелось делать гетерогенную структуру, в которой в качестве багтрекинга использовался бы DVManagement на DocsVision и сторонний продукт.
Сказано, сделано. Какова планируемая архитектура.
1. 100% веб интерфейс, построенный на легком клиенте и веб-форме карточки.
2. Новые объекты: карточка обращения, карточка SLA
2. ActiveDirectory в качестве службы хранения идентификационных данных.
3. Структура виртуальных папок для отслеживания своих инцидентов, а так же инцидентов созданных другими специалистами своей компании
4. Отчеты, которые позволяют посмотреть сколько инцидентов решено за период, находится в работе и т.п. При открытии Навигатора в личной папке отображается html страница отчета: сколько инцидентов требуют вашего ответа, сколько находятся в решении в службе технической поддержки. Статистика по решенным инцидентам за периоды.
5. Состояние любого инцидента, а так же дату следующего ответа можно посмотреть в карточке. Эта же информация будет выводиться в представление.
Планируем ввести в эксплуатацию в 1м квартале 2010 года. Читать дальше
Оставить комментарий
(всего: 1)
Как это работает? Состав таков.
1. Основным объектом является карточка "Обращения", которая хранит всю информацию об инциденте: контакты, описание, история переписки с файлами и т.п.
2. Так же используется ряд справочников для хранения информации: справочник контрагентов - контакты, универсальный справочник - версии DocsVision, справочник модулей DocsVision (разработан дополнительно) - список модулей.
3. Набор бизнес-процессов
- бизнес-процессы отвечающие за обработку входящей почты
- процессы, которые отправляют ответы, и напоминания
- обслуживающие процессы, которые удаляют спам, отправляют внутренние напоминания и т.п.
4. Отчеты на базе модуля "Расширенные отчеты"
Данная система хорошо работает, однако её минусы не дают нам сделать коммуникации еще более качественными. Какие же минусы?
1. Используется древний и неудобный канал коммуникации - электронная почта. Письма могут банально не доходить.
2. Всю историю переписки, текущий статус инцидента видят только инженеры технической поддержки, но не специалисты, которые обращаются к нам, то есть вы. У вас остается только набор ответов в виде писем, что не удобно.
3. Вам недоступен поиск по инцидентам.
4. В текущей реализации поддерживается только один уровень обслуживания (SLA). Масштабирование невозможно.
5. В качестве идентификатора пользователя является его адрес электронной почты.
Итак задача модернизации возникла. Как её решить? Прежде всего было просмотрено довольно много уже готовых продуктов. HP Service Desk - круто, но слишком много функционала, дорогой продукт и внедрение. Zendesk - очень удобный интерфейс, красиво сделано, модель SaaS, но функционал не подходит для нашей модели поддержки. OmniTracker - подходит, интерфейс, кстати на DocsVision похож. DocsVision ServiceDesk - подходит, но требует доработки некоторых модулей под наши задачи. И еще большая куча продуктов, как коммерческих так и бесплатных.
В общем два подхода: использовать сторонний продукт, разрабатывать свой продукт на базе DocsVision.
Дебаты были не бурными - DocsVision прекрасная платформа для разработки продуктов такого типа. Тем более что DVManagement это прекрасно продемонстрировал. Так же не хотелось делать гетерогенную структуру, в которой в качестве багтрекинга использовался бы DVManagement на DocsVision и сторонний продукт.
Сказано, сделано. Какова планируемая архитектура.
1. 100% веб интерфейс, построенный на легком клиенте и веб-форме карточки.
2. Новые объекты: карточка обращения, карточка SLA
2. ActiveDirectory в качестве службы хранения идентификационных данных.
3. Структура виртуальных папок для отслеживания своих инцидентов, а так же инцидентов созданных другими специалистами своей компании
4. Отчеты, которые позволяют посмотреть сколько инцидентов решено за период, находится в работе и т.п. При открытии Навигатора в личной папке отображается html страница отчета: сколько инцидентов требуют вашего ответа, сколько находятся в решении в службе технической поддержки. Статистика по решенным инцидентам за периоды.
5. Состояние любого инцидента, а так же дату следующего ответа можно посмотреть в карточке. Эта же информация будет выводиться в представление.
Планируем ввести в эксплуатацию в 1м квартале 2010 года. Читать дальше