Гринги
1

Excel. Доступ к атрибутам документов Lotus Notes

13.08.2016, 14:46. Показов 12371. Ответов 38
Метки нет (Все метки)

Добрый день


Помогите решить следующую задачу. Не являюсь программистом Lotus Notes, но хотел бы решить проблему получения реквизитов документов из БД Lotus

Есть файл excel в котором построчно сохраняются номера документов из БД Lotus Notes (заявок на сервис). Номера заявок:

232
346
1236
...
Список заявок весьма большой (сотни строк).

В Lotus Notes есть БД указанных заявок (содержит несколько сотен тысяч элементов). Требуется периодически проверять статус заявок из файла excel (в работе, выполнены, закрыты и т.п.). Сейчас эта проверка делается путем открытия Lotus Notes, базы данных заявок, ручного поиска документа по заданному номеру, открытию документа и просмотр статуса – длительная процедура, от которой хотелось бы уйти.

Как хотелось бы решить задачу – написать скрипт на VBA (Excel, доступа к среде программирования Lotus Notes нет), который последовательно перебирает номера заявок, используя объектную модель Lotus получает доступ к указанной базе Lotus Notes и по номеру заявки получает доступ к указанному документу и проверяет наличие заданного реквизита (Статус заявки). Собственно, вопросы:

1. Как получить ссылку на определенный документ из Lotus Notes по значению одного из его реквизитов (номер)

2. Определенная альтернатива – если в excel сохранена гиперссылка на конкретный документ из БД Lotus Notes, как по этой гиперссылке получить ссылку (в программе) на конкретный документ Lotus Notes?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2016, 14:46
Ответы с готовыми решениями:

Как сделать просмотр Pdf-документов в Lotus Notes без запуска сторонни
Добрый день всем! возникла такая надобность: сделать бы просмотр PDF-документов в Lotus Notes без...

Открыть документ Lotus Notes в Excel
Возможно ли по гиперссылке (или другой вариант), которая хранится в книге в MS Excel, открыть...

Как развернуть окно Lotus Notes из Excel Vba?
Доброго времени суток! Очень нужно решить задачку: написать код в Excel VBA, который бы...

Как определить наименование полей формы документа в Lotus Notes с последующей выгрузкой в Excel?
Аналогичную тему создал в разделе Lotus Notes, но там тишина уже несколько дней. В связи с этим...

38
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
14.08.2016, 10:22 2
А зачем вам вообще Excel? Почему нельзя всю необходимую работу с заявками сделать в Lotus Notes?
Если не знаете как работает Lotus Notes, не знаете внутреннего устройства базы (имена полей, представлений, их структуру и т.п.), лучше даже не беритесь за эту работу.
Domino Designer можно бесплатно скачать на сайте IBM, в его хелпе есть вся необходимая для вас информация.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.08.2016, 10:26 3
Цитата Сообщение от Гринго
Как хотелось бы решить задачу – написать скрипт на VBA (Excel, доступа к среде программирования Lotus Notes нет)
дык поставьте дизайнер - он бесплатный


Цитата Сообщение от Гринго
1. Как получить ссылку на определенный документ из Lotus Notes по значению одного из его реквизитов (номер)
получение по ключу (читайте хэлп дизайнера нотус - в тырнетах полно ссылок на этот хэлп)


Цитата Сообщение от Гринго
2. Определенная альтернатива – если в excel сохранена гиперссылка на конкретный документ из БД Lotus Notes, как по этой гиперссылке получить ссылку (в программе) на конкретный документ Lotus Notes?
в конце ссылки - UNID - он и есть ссылка на документ
формат URL для нотус - тот же хэлп
0
Гринги
14.08.2016, 13:12 4
Спасибо за ответы
Список заявок в excel-файле - жесткое требование заказчика. Данный список рассылается многим пользователям внутри компании, для контроля статуса заявок (ответственных за их исполнение), при этом почтовая программа в компании другая (опять же жесткое требование заказчика). Установка ПО жестко регламентирована со стороны IT-службы, а макрос должен работать у любого конечного пользователя (не программиста) из группы контроля, у кого есть установленный Excel и Lotus в системе.

Спасибо за ссылку на хелп дизайнера - прочитаю

Имена БД, имя представления известно. Доступ и работу с Lotus Notes из Excel планируется организовать через создание экземпляров приложения Lotus Notes (CreateObject, GetObject) - лишь бы объектная модель Lotus позволяла так работать
Опыт автоматизации и минимизации ручной работы и связи данных из разных источников, агрегации у меня есть, поэтому, уверен, что данная задача имеет решение

Буду признателен, если есть что добавить
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
14.08.2016, 13:26 5
@Гринго может пригодится : [URL="https://www-01.ibm.com/support/docview.wss?uid=swg21092121"]http://www-01.ibm.com/support/docview.wss?uid=swg21092121[/NICK]

+ хелп по лотусовым классам.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.08.2016, 13:48 6
Цитата Сообщение от Гринго
Список заявок в excel-файле - жесткое требование заказчика.
никак не связано с программированием под LDN


Цитата Сообщение от Гринго
Данный список рассылается многим пользователям внутри компании, для контроля статуса заявок (ответственных за их исполнение), при этом почтовая программа в компании другая (опять же жесткое требование заказчика).
абсолютно никак не мешает программировать в LDN, есть домино - есть возможность рассылок в др. почтовую систему


Цитата Сообщение от Гринго
Установка ПО жестко регламентирована со стороны IT-службы, а макрос должен работать у любого конечного пользователя (не программиста) из группы контроля, у кого есть установленный Excel и Lotus в системе.
а вот работоспобность макроса, при такой постановке, маловероятный вариант (вернее- сделать можно, грабли собирать будете регулярно)


Цитата Сообщение от Гринго
поэтому, уверен, что данная задача имеет решение
да - имеет - писать java с библиотекой POI, запускать на сервере (т.е. библиотека копируется на сервер LDN. Даже в случае огромных выборок - тормоза будут меньшими, чем при использовании COM объекта из MSO (кот. может вовсе забить доступную память)
какой бы не была массовая инсталяция LDN - отличия будут, т.к. могут отличаться групповые политики и настройки безопасности, добавим сюда изменения в безопасности, во всяких МС патчах (как пример - недавняя история, описанная на хабре)
и как правильно отметил @garrick - написать без ошибок и кастылей выгрузку из LDN, для большого кол-ва документов, может спец. В вашем варианте, для еще через COM - это будет мучительный и долгий процесс (да и ломаться, потом, будет регулярно)

Логика из ТЗ извращена до наоборот (подгоняли под низкий уровень писателей, на VBA, видать) и следовать ей, буквально - это потеря времени и сил
Вариант, описанный мной - не требует, вовсе, Excel, и будет работать на серверах, стало-быть - будет меньше "особенностей"
0
Гринги
14.08.2016, 13:48 7
@savl - спасибо!
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.08.2016, 14:18 8
вспомнил, тут...
у домины вполне себе есть способ общения без KOM и называется он Domino Data Service
для того кто "привык" в VBA - "берет в руки" COM для работы с хттп и...
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
14.08.2016, 16:39 9
Предлагаю построить в Notes вьюху, отображающую всю необходимую информацию по заявкам, открыть к ней доступ по HTTP, а в Excel воткнуть URL этой вьюхи. ... а можно даже и не "втыкать" и чтобы посмотреть информацию по заявкам, ни Notes, ни даже Excel не будет нужен.
0
Гринги
15.08.2016, 12:28 10
Всем спасибо за критику и предложения, 2@savl - особенно. Реализовал, работает, достаточно шустро.
Да, не идеальное решение, его невозможно масштабировать, но такой задачи и не стоит. Даже в текущей версии это сэкономит десятки человеко-часов в месяц - за счет того, что не придется вручную открывать каждую заявку в Lotus для просмотра значений для определенных полей. Есть отдельные моменты, которые реализованы "криво", но пока не нашел, как обойти это ограничение, может подскажете


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Sub DemandParser()
 
Dim oSession As Object
Dim oDB As Object
Dim oNotesView As Variant
Dim oColumn As Variant
Dim doc As Object
Dim oItems As Variant
Dim oItem As Variant
 
Dim lngCounter As Long, lngFResult As Long, lngRow As Long
Set oSheet = ThisWorkbook.Worksheets("Data")
lngRow = oSheet.Cells(1, 3).End(xlDown).Row
If lngRow > 1000000 Then
MsgBox "Нет данных для анализа!"
Exit Sub
End If
Set oSession = CreateObject("Notes.NotesSession")
Set oDB = oSession.GetDatabase("<servername>", "<DBName>")
Set oNotesView = oDB.GetView("All")
при выполнении следующей строки выдается ошибка, приходится перебирать элементы коллекции
Set oColumn = oNotesView.Columns(5)
For Each oColumn In oNotesView.Columns
If oColumn.ItemName = "DemandNumber" Then
oColumn.IsSorted = True
Exit For
End If
Next oColumn
For lngCounter = 2 To lngRow
Application.StatusBar = "Обработка строки " & CStr(lngCounter) & " из " & CStr(lngRow)
 
sTTNumber = Left(oSheet.Cells(lngCounter, 21).Value, 6)
 
If IsNumeric(sTTNumber) Then
sSearchString = Replace("[DemandNumber] = {DemandNumber}", "{DemandNumber}", sTTNumber)
lngFResult = oNotesView.FTSearch(sSearchString)
If lngFResult = 0 Then
oSheet.Cells(lngCounter, 24).Value = "!!! Заявка не найдена"
Else
Set doc = oNotesView.GetFirstDocument
 
 
здесь реализуется соответствующая обработка
 
как получить первое значение? - аналогично ситуации выше, работает через перебор элементов коллекции
oItems = doc.GetItemValue("DemandNumber")
For Each oItem In oItems
 
Exit For
Next oItem
 
 
End If
End If
Next
Application.StatusBar = ""
MsgBox "Готово!"
Set doc = Nothyng
Set oNotesView = Nothyng
Set oDB = Nothyng
Set oSession = Nothyng
End Sub
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.08.2016, 14:12 11
Цитата Сообщение от Гринго
при выполнении следующей строки выдается ошибка, приходится перебирать элементы коллекции
Set oColumn = oNotesView.Columns(5)
зачем это? (сортировать колонку из кода)


Цитата Сообщение от Гринго
lngFResult = oNotesView.FTSearch(sSearchString)
вам предложили почитать дизайнер хэлп, но не для поиска схожего с SQL
LDN - NoSQL БД
в нотусе, для поиска ключей, используют ключевую колонку, для чего - создают вьюшку с сортированной колонкой, по ключу (первую, можно больше одной колонки - но это др. история)
получать документ - это очень накладно для памяти и времени
во вьюшке (вернее в выборке по ключу - NotesViewEntryCollection) есть NotesViewEntry , а у него ColumnValues (типа Variant - массив значений, по колонкам)
т.е. создается спец. вьюшка, с нужной ключевой колонкой (сортированной) и колонками для нужных значенией
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.08.2016, 14:28 12
Цитата Сообщение от Гринго
oItems = doc.GetItemValue("DemandNumber")
всегда выдает массив (даже если там одно значение), нулевым элементом будет первое значение doc.GetItemValue("DemandNumber")(0)
НО не делайте так (причина - выше)
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
15.08.2016, 15:18 13
Цитата Сообщение от lmike
а у него ColumnValues (типа Variant - массив значений, по колонкам)
...но тут тоже есть тонкости, которые могут вынести мозг человеку, который не в теме и при том не читающий хелп. Я же говорил "уметь надо".
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.08.2016, 18:10 14
Цитата Сообщение от garrick
...но тут тоже есть тонкости, которые могут вынести мозг человеку, который не в теме и при том не читающий хелп. Я же говорил "уметь надо".
оно понятно, получается ТС сочиняет велосипед, с кривыми колесами, при том что есть легальные методы взаимодействия с платформой - через хттп
безо всяких "кривых" COM
но как я уже не раз отмечал - мышление похаченное использованием windows трудно направить в "нужное" русло
0
Гринги
15.08.2016, 20:38 15
Ситуацию нужно рассматривать с разных сторон и понимать задачу, которую просят помочь решить. Лучшее решение не всегда выигрывает у просто хорошего. Я не писал всю ситуацию, чтобы не засорять топик, но возможно, это была моя ошибка. Мне нужно простое прикладное решение, работающее - для себя и моих сотрудников. Также им поделюсь с коллегами. Не требуется промышленное "железное" решение - Lotus Notes живет в компании до конца этого года, потом будет совсем другое ПО для работы с заявками и совсем другая процедура работы с ними и текущее решение мы спокойно выкинем на свалку. На его создание я суммарно потратил 4 часа своего чистого времени.

За счет текущей, пусть "кривой", не оптимальной реализации экономия времени получилась за одну итерацию - в 180 раз (с 30 минут ручным способом до 10 секунд данным решением - обработка 170 позиций). Таких итераций - около 10 в месяц по моему направлению. Оптимизировать работу одной итерации из текущих 10 секунд до 1 секунды (условно) - это дополнительно к уже полученной экономии в 29 мин. 50 секунд добавить еще 9 секунд - с моей точки зрения, овчинка выделки не стоит.
Для этого (справедливо отмечено) действительно пришлось бы серьезно изучить документацию к Lotus, классы, проштудировать форумы. Если бы я был программистом (это уже в прошлом) - безусловно, это то, с чего бы я начал. Но на это бы у меня ушло совсем другое время, которого сейчас у меня не сказать, что много и кто бы тогда делал остальную мою работу?.

Менять текущий процесс работы с заявками (который с изъянами - не спорю) - нет смысла, т.к. он и так изменится в январе. На изменение текущего, на согласования, доработки уйдет уже не 4 часа, и потребует большего количества вовлеченных...

Я свое время теперь смогу переключить на решение и других своих задач, в т.ч. на пересмотр и изменение других процессов, не связанных явно с программированием, но направленных на эффективность работы подразделения\компании.

В любом случае, спасибо за конструктивную критику и советы.
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.08.2016, 10:33 16
Цитата Сообщение от Гринго
Не требуется промышленное "железное" решение - Lotus Notes живет в компании до конца этого года, потом будет совсем другое ПО для работы с заявками и совсем другая процедура работы с ними и текущее решение мы спокойно выкинем на свалку.
оно и не требовалось, в варианте с http...
просто распарсить xml/json
слезать с LDN (вот даже интересно - на что?) достаточно непростой процесс, почему-то мне кажется - заявки там не единственная БД
у нас, в организации, уж клялись уйти от домино раз 100500, прошло овер 15лет (почта давно уже на чанге)
и ШП (Share Point) разные решения пихали (тоже пытались для документ-процесса пристроить)..., но юзеры! (именно) эти убожественые решения завернули
Нам рассказывали как придет велики SAP - и будет фсё... , ога - в тысячи раз выросло кол-во эхелей на файлопомойке (уже засрали 6Тб)
Есть гейроаейский спец. кот. "доказал" - 1С более затратна (это для нашего-то законодательство), чем SAP, на секунду - внедрение решения на SAP, в нашей стране, уже обошлось (приблизительно) десятки лярдов грина

не... - разумеется, "назло кондуктору - возьму билет, сойду с трамвая, пойду пешком", могут сделать "эффективные манагеры"
эффект от этого тоже известен - велосипедные файлы с макросами и хитровынебанными формулами заполняют файло-помойки
этот путь, у нас в компании, уже проходили не раз
но как говориться - время идет, а кол-во дураков только растет... ;)
а вам - успехов, только стоило ли с вопросами по VBA приходить сюда ? ;)
0
Гринги
16.08.2016, 12:27 17
2@lmike:
SAP - тема отдельного разговора, в том виде, в котором его могут внедрить. Действительно, количество с excel-файлов с ним растет на порядок, через них пытаются закрывать дыры, которые не покрываются функционалом данной ERP. Самое интересно, что при внедрении SAP одним из аргументов приводилось то, что "мы откажемся от большого количества excel-файлов, которые у нас есть".

Куда стоило обращаться тогда? На какой форум?

А в целом с нестандартной обработкой относительно небольшого объема данных лучше excel никто не справится (имхо). И гибкость высокая, формулы\инструменты, возможности автоматизации (макросы) - широкие. Если решение требуется стандартное\масштабированное - то тут excel проигрывает конкретным решениям.

P.S. Решение уже проверили у других пользователей, работает - для них шок, что оказывается, такое можно вообще возможно было реализовать. БД в LDN заявок реализовывала сторонняя компания еще в 2006 году, наши IT ее только поддерживают в рабочем состоянии, доработок никаких не делают, технической документации по полям не было. Так что я результатом доволен, с учетом того, что приступал к задаче ничего не зная об объектах LDN и о внутреннем устройстве данной БД в частности.
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.08.2016, 13:10 18
Цитата Сообщение от Гринго
Куда стоило обращаться тогда? На какой форум?
гугл VBA lotus notes field
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.08.2016, 13:17 19
Цитата Сообщение от Гринго
не зная об объектах LDN и о внутреннем устройстве данной БД в частности.
знать пришлось - т.к. COM объекты именно к этому и привязывают, а вот распарсить ответ от http сервера LDN - вполне понятный вариант
ибо там текст


Цитата Сообщение от Гринго
БД в LDN
и вы только ради этого купили LDN (1 БД)?
я вам больше скажу - есть готовое решение на LDN - XPD называется, единственная "засада" - разработчики на украине, т.е. потенциально могут быть сложности с закупкой ПО (для России, на сайте сказано - для резидентов Украины)
про - на что менять - вы так и не сказали ;)
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.08.2016, 13:22 20
Цитата Сообщение от Гринго
А в целом с нестандартной обработкой
а вот для этого и есть построение архитектуры, чтобы не было (минимизировать) нестандартного
а "здесь" получается как жить на стройке - оно конечно можно, но...
и вот в чем для меня загадка...
существуют репортинговые системы (и бесплатные), есть ИТ отдел - неужто сложно построить процесс, чтобы делать все через них?!
когда "каждая кухарка" будет..., т.е. - каждый должен заниматься своими обязанностями (прямыми), а не изучением VBA, Excel, Word и т.п.
и самое смешное - везде встречаются требования - уметь пользоваться Word и Excel
Именно эти инструменты насаждаются, в то время как "никто" (>80%) ими пользоваться не умеют (и в первую голову - руководители)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2016, 13:22
Помогаю со студенческими работами здесь

Открытие доступа к ящику lotus одного сотрудника для другого сотрудника средствами сервера lotus notes 8.5
Доброго времени суток! Как открыть доступ к ящику lotus одного сотрудника для другого сотрудника...

Доступ к атрибутам
Как в Delphi получить доступ к атрибутам файла (*.txt), например &quot;считывание/запись&quot;, &quot;Только...

Lotus Notes
оставляйте свои коменты.....будем учиться на чужих ошибках если есть чем научить то ДОБРО...

Lotus Notes
Здравствуйте, у меня вопрос такой: есть таблица, в неё вставлена подформа, можно ли как-нибудь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru