С Новым годом! Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/149: Рейтинг темы: голосов - 149, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31

Обработка документов и перенос в другую папку на PHP

04.08.2008, 10:29. Показов 27585. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Свела судьба с Лотусом ... учусь разбирать почту.
В папку spider\atm\upc с помощью правил в Notes переносятся пришедшие документы.

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

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 $n_session = new COM("Lotus.NotesSession");
$n_session->initialize($conf->get(notes_password)); // Подключаемся ...
$n_dir = $n_session->GetDbDirectory($conf->get(notes_server))->
OpenMailDatabase()->
GetView(spider\atm\upc); // получаю объект папки
$n_doc = $n_dir->GetFirstDocument();
while(is_object($n_doc)){
/* здесь была обработка документа ... она работает нормально */
$n_doc_next = $n_dir->GetNextDocument($n_doc); // получаем объект следующего док.
$n_doc->PutInFolder(spider\arh\atm-upc); // копируем в архив
$n_doc->RemoveFromFolder($n_dir->name); //удаляем текущий док из рабочей папки !!!!! ПРОБЛЕМА
print_r($n_doc->GetItemValue(Subject)); //отладочная штука - дабы видеть, сколько доков обработали
$n_doc = $n_doc_next; //Следующий док становится текущим.
}
echo "End of script.\n";
В папке имею пять док. При запуске скрипта сперва обрабатывается три, при следующем - два.
Если убрать строку удаления документа - все пять при первом запуске.

Документы приходили на ящик тоже сперва два, потом (через пару часов) три - так "группами" и обрабатываются.

Откройте секрет ... в чем загвоздка ... понимаю, что теряется ссылка на след. документ ... но как исправить - не могу придумать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2008, 10:29
Ответы с готовыми решениями:

Как скопировать папку с файлами в другую папку с заменой средствами php?
Как скопировать папку с файлами в другую папку с заменой средствами php? Из "Z:/home/post.ru/www/style/" в...

Перенос Документов Из Одной Бд В Другую
Всем привет! Есть несколько БД с одинаковой структурой (дизайн обновляется из одного шаблона), задача в следущем: Необходимо...

Перенос Wordpress в другую корневую папку
Здравствуйте. Не давно нужно было перенести сайт в другой корневой каталог. Был он к примеру с адресом - http://site.com.ua, а стал с -...

14
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.08.2008, 10:37
Я бы взял коллекцию записей в папке с помощью NotesViewEntryCollection. И обрабатывал бы эту коллекцию.
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
04.08.2008, 13:52
метод NotesDataBase->Search() -- возвращает коллекцию документов по ВСЕЙ базе ... в том числе и с уже обработанными доками в папке архива. (как бы отобрать только нужное ...)

метод NotesView->GetAllDocumentsByKey() -- массив поиска задавать ... как?
Под каждое поле View задаем элемент таблицы соответствующего типа и с нужной маской?
Представление ($inbox) - шесть полей ... но скрипт не ругается только при двух элементах в таблице... видать полей много, но индексированные только два (догадка ) .. как узнать, что это за поля?
маски поиска .. стандартные * ?

Может есть более элегантное решение?
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.08.2008, 14:28
Я предлагал что-то типа этого:

Code
1
2
3
4
5
6
7
8
9
10
11
12
...
Set vc = NotesView.AllEntries
Set ve = vc.GetFirstEntry( )
While Not (ve is Nothyng)
If ve.IsDocument Then
Set doc = ve.Document
...
Call doc.PutInFolder(...)
Call doc.RemoveFormFolder(...)
End If
Set ve = vc.GetNextEntry(ve)
Wend
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
04.08.2008, 16:46
Спасибо! Заработало ... всё забрало с первого прохода.

Если не лень ... можете пояснить в двух словах, что такое Entry и в чем отличие от Document?
И почему первый вариант не работал?

Глубоко и серьезно Лотус я изучать не собираюсь (просто столкнулся с ним) но в общих чертах узнать бы, что за беда была...
___
P.S. Вдруг кому интересно будет ...

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 $n_session = new COM("Lotus.NotesSession");
$n_session->initialize($conf->get(notes_password));
$n_list = $n_session
->GetDbDirectory($conf->get(notes_server))
->OpenMailDatabase()
->GetView(spider\atm\upc)
->AllEntries;
echo "Docs: ".$n_list->Count."\n";
$n_entry = $n_list->GetFirstEntry();
while(is_object($n_entry)){
if($n_entry->IsDocument){
$n_doc = $n_entry->Document;
echo  Date: .$n_doc->GetFirstItem("PostedDate")->text."\n";
$n_doc->PutInFolder(spider\arh\atm-upc);
$n_doc->RemoveFromFolder(spider\atm\upc);
}
$n_entry = $n_list->GetNextEntry($n_entry);
}
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.08.2008, 17:26
Цитата Сообщение от AndryG
Если не лень ... можете пояснить в двух словах, что такое Entry и в чем отличие от Document?
Entry - строка в представлении. Может быть как документом, так и категорией, например.



Цитата Сообщение от AndryG
И почему первый вариант не работал?
Нужно было использовать обновление(notesView.Refresh), чтобы получать актуальное состояние папки после удаления. Но при этом кем-нибудь в папку могли бы добавляться/удаляться документы. Да и медленнее это. Поэтому лучше взять коллекцию и обработать её.
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
10.08.2008, 17:10
Понятно ... понятно, что "поверхам" не осилить

Ее вопрос небольшой - третий день не могу пометить письмо как прочитанное :(
Где этот флаг в документе прячется? Или он вне документа живет?
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
10.08.2008, 17:24
этот флаг прячется в спец. таблице вне базы... если то, что я знаю - правда, то эта таблица на самом клиенте строится...
попробуйте метод notesDocument.Save( force, createResponse [, markRead ] )
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
10.08.2008, 19:53
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 $n_entry = $n_list->GetFirstEntry();
while(is_object($n_entry)){ //проходим по докам в папке ящика
if($n_entry->IsDocument){
$n_doc = $n_entry->Document;
...
while($n_doc->HasItem($FILE)){//проходим по всем аттачам письма
...
$n_filenameitem->Remove;
} // while по $FILE
$n_doc->Save(true,false,true);   // СОХРАНЕНИЕ С СНЯТИЕМ МЕТКИ О ПРОЧТЕНИИ
$n_doc->PutInFolder(spider\arh\atm-upc);
$n_doc->RemoveFromFolder(spider\atm-upc);
} // if IsDoc
$n_entry = $n_list->GetNextEntry($n_entry);
} // while по entry
При таком раскладе из писем благополучно исчезают вложения (от этого нужно избавится), что означает, что документ сохраняется ... но "признак прочтения" не изменяется никак.
Пробовал и false и true третим параметром для прочтенных и новых писем -- признак прочтения не изменяется.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
11.08.2008, 11:41
подожди
признак прочтения где не меняется? у какого пользователя? где и от чьего имени выполняется вышеуказанный код?
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
11.08.2008, 12:53
У меня на компе стоит LotusNotes.
PHP cкрипт через COM подключается под моей же (я так думаю) учетной записью и шерстит почту.
подключение

Code
1
2
3
4
5
6
 $n_session = new COM("Lotus.NotesSession"); // создаем объект сессии
$n_session->initialize($conf->get(password,notes)); // подключаемся
 
//Через кучу методов/свойств получаем объект "вхождений" указанной папки почты
$n_list = $n_session->GetDbDirectory($conf->get(server,notes))->OpenMailDatabase()->GetView(spider\atm-upc)->AllEntries;
//дальше идет код с поста выше
Ложу в папку пару "прочтенных" и "непрочтенных" доков с вложениями - запускаю скрипт.
Документы перекладываются в другую папку, из них удаляются вложения (временный глюк), статус прочтения не изменяется.

Сам я админом сей системы не являюсь и о работе ее знаю .. ровно сколько в COM-интерфейсе разобрался.
Лень заставила взяться за написание скрипта
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
11.08.2008, 13:00
хм... чесгря, не знаю, работает ли через КОМ этот параметр...
а без ПХП, эту обработку никак? в смысле, в самом клиенте нельзя сделать?
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
11.08.2008, 14:57
Меня бы устроил агент, дабы при попадании писем в папку "ABC" они превращались в прочитанные, но я обладаю минимумом прав ... и не могу создать агента.
А больше вариантов у меня нет в голове.
Если через COM добраться до этого флага нельзя - значит придется смириться.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
11.08.2008, 15:56
я имел ввиду вообще сделать все то, что ты делаешь не через внешнюю программу, а с помощью средств лотуса
если нету прав на конкретную базу, то можно сделать свою локальную в которой будет нужный код, обрабатывающий доки в другой базе...
0
0 / 0 / 0
Регистрация: 12.07.2008
Сообщений: 31
11.08.2008, 16:08
Это сильно круто

Спасибо за помощь. Будем считать вопрос закрытым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2008, 16:08
Помогаю со студенческими работами здесь

Webbrowser перенос кэша в другую папку и загрузка от туда
Нужна помощь помогите, как можно реализовать так, чтобы кэш грузился в "свою" нужную мне директорию и после этого подгружался от...

Поиск и перенос файлов *.jpeg *.png *.jpg в другую папку
Get-ChildItem e:\img -Recurse -include *png,*jpg,*bmp,*jpeg После этого находит все файлы с указанным расширением в папке, но не могу...

Обработка. Поиск дублей и перемещение в другую папку(корзина)
1С:Предприятие 8.3 (8.3.10). В 1с совсем недавно, помогите пожалуйста. Есть справочник Номенклатура, в этом справочнике есть большое...

Поиск одинаковых файлов в папке и перенос копий в другую папку (оптимизация кода)
Программа ищет одинаковые файлы в папке где сама находится(по маске или расширению), по хэшу, и перемещает все копии в отдельную папку. ...

PHP перенос проекта на другую ОС
Здравствуйте. Писал проект на виндовс с PHP,JS. Без использования каких либо фреймворков. Решил перенести проект на ubuntu. Вообщем...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru