RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (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)

Программный поиск карточек с включением удаленных в результаты поиска

При использовании UserSession.CardManager.FindCards() из Managed ObjectManager поиск не возвращает удаленные карточки в результатах поиска.
Метод FindCards в принципе не умеет возвращать удаленные карточки, т.к. он возвращает объекты CardData, а для удаленной карточки этот объект получить нельзя.

То же условие касается архивных карточек.

Для поиска таких карточек, лучше использовать не FindCards, а представление.

Пример кода:

ViewSource source = ViewSource.FromSearch(QueryText); source.ShowDeleted = true;
InfoRowCollection rows = m_oUserSession.CardManager.GetViewData(source, Guid.Empty); MessageBox.Show(rows.Count.ToString()); Читать дальше

7 коммент.:

Ice комментирует...

Думаю, будет не лишним немного дополнить пример.
И вопрос небольшой появился на этой почве. Исследованием причин времени заняться пока не было :(

В общем, ищу я таким образом все карточки, включая удалённые. Удалённые при этом необходимо восстанавливать, чтобы получить доступ к CardData, а потом удалить... уже окончательно.
И вот почему-то на этом моменте возникает затык. Только что восстановленная карточка не удаляется. По ссылкам зависимостей нет, через навигатор она тоже нормально удаляется, а кодом нет :( В итоге в базе появляются карточки-призраки.
Ниже упрощённый кусок кода (как продолжение вышеприведённого):

foreach (InfoRow iIR in rows)
{
// Для получения данных из удалённой карточки - нужно её восстановить

// Если карточка имеет атрибут "помечена на удаление"
if (iIR["_DeletedCard"].ToString() == "True")
{
deleted = true;
m_oUserSession.CardManager.RestoreCard(new Guid(iIR["_InstanceID"].ToString()));
}
else
deleted = false;

oCurCardData = m_oUserSession.CardManager.GetCardData(new Guid(iIR["_InstanceID"].ToString()));
// Получаем основную секцию
oCurCardDataRow = oCurCardData.Sections[new Guid(cIncDocMainInfo)].FirstRow;
string FullNumber = oCurCardDataRow.GetString("Number").ToString();
//.....ну и далее получаем необходимые данные

// Удаляем карточку ОКОНЧАТЕЛЬНО (shift+del), если она была восстановлена.
try
{
if (deleted) m_oUserSession.CardManager.DeleteCard(oCurCardData.Id);
}
catch (Exception ex)
{
// и попадаем почему-то сюда :(
}
}

В логе следующее...

31.01.2009 7:00:25 Произошла ошибка DocsVision.Platform.StorageServer.StorageServerException: Карточка не может быть удалена, так как она используется в других карточках.
at DocsVision.Platform.ObjectManager.Helpers.ExceptionHelper.ThrowExceptionForHR(Int32 hr)
at DocsVision.Platform.ObjectManager.CardManagerImpl.DeleteCard(Guid cardId, Boolean permanently)
at DocsVision.Platform.ObjectManager.CardManager.DeleteCard(Guid cardId)
at DV2ODOU.DVFunctions.OutDataExport(UserSession m_oUserSession, String destFolder, Int32 console, RichTextBox richTextBox_LOG) in C:\Programming\DV2ODOU\DVFunctions.cs:line 1405 при попытке окончательного удаления временно восстановленной карточки входящего с CardID={7FE561F5-7A3C-4599-829A-1C1DCD64AE79}



Из-за чего такое может возникнуть?

Михаил Захаров комментирует...

Да, интересно, попробую поэкспериментировать при возможности. Я бы попробовал найти и удалить эту карточку из Навигатора вручную. А так же посмотрел ссылки на неё
1. В свойства карточки, раздел "Ссылки"
2. В коде приложения методом GetLinksToCard
3. Либо в базе
SELECT * FROM dvsys_links WHERE DestinationCard = идентификатор карточки

Vadim Skipin комментирует...

Скорее всего забыли про ярлык в карточке папок - попробуйте использовать вместо CardManager.DeleteCard() метод FolderCard.DeleteCard()

Unknown комментирует...
Этот комментарий был удален автором.
Unknown комментирует...

Пробовала проверить Ваш код,выдает ошибку "не удалось найти имя типа или пространства имен ViewSource (пропущена директива using или ссылка на сборку)", при том, что Docsvision.Platform.ObjectManager подключен.В чем может заключаться ошибка?

Unknown комментирует...

Все, ошибку нашла - ViewSource искался в Docsvision.Platform.ObjectManager.Interop.dll

Михаил Захаров комментирует...

Этот пример для старых версий (DocsVision 4.1 и ранее). В нем была одна .Net сборка - Docsvision.Platform.ObjectManager.Interop.dll, которая является оберткой над ObjectManager.dll.

В более старших версиях есть сборка Docsvision.Platform.ObjectManager.dll (обо всех этих библиотеках написано в руководстве разработчика). Структура классов этой библиотеки отличается от Docsvision.Platform.ObjectManager.Interop.dll.

Отправить комментарий