Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/54: Рейтинг темы: голосов - 54, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 18.06.2010
Сообщений: 69
1

Не Сохраняется Документ. Создается Лишняя Копия.

14.09.2014, 09:46. Показов 10418. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите решить проблему.

Есть агент, который создает документ копированием. После заполнения полей пытаюсь сохранить док, но сохраняется
еще одна копия документа, при этом половина полей заполнена в одном, половина в другом.
З.ы. Ранее агент работал корректно.

Вот часть кода.

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
Function CreateProcess(mgr_doc As NotesDocument, target_db As NotesDatabase) As NotesDocument
On Error GoTo er
 
Dim example_doc As NotesDocument
Dim Process As NotesDocument
Set example_doc = target_db.GetDocumentByUNID("4B8361C435F3454544257D5100437C8C")
Set Process = example_doc.CopyToDatabase( target_db )
 
Process.Form = "Process"
 
здесь просто заполение полей
даты
основные поля
 
допонительная информация
 
 
Process.UniversalID = mgr_doc.MaimProccesID(0)
WriteLogToFile( "Process.UniversalID установлен: # " + Process.UniversalID)
 
 
Call Process.ComputeWithForm( False, False )
Call Process.Save( False, False )
 
Set CreateProcess = Process
 
Exit Function
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2014, 09:46
Ответы с готовыми решениями:

Не создается документ
Добрый день! Столкнулся с такой проблемой. Есть некий документ по форме. На ней кнопка. По нажатию...

Создается ответный документ
Кто-нибудь может объяснить почему происходит следующее. Я создаю документ. Потом нажимаю на...

Создается лишняя строка в Таблице данных
Доброго времени суток! У меня такая проблема: создается лишняя строка в таблице данных со...

Создается лишняя строка при выводе в таблицу из БД
Добрый день. Есть таблица в базе данных. Из таблицы выводим данные на страницу в виде таблицы....

12
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
14.09.2014, 10:27 2
Где вызов функции и где инициализация второго параметра target_db
По коду:

LotusScript
1
2
3
4
5
Set example_doc = target_db.GetDocumentByUNID("4B8361C435F3454544257D5100437C8C")
Это получение в базе назначения документа по UNID
 
Set Process = example_doc.CopyToDatabase( target_db )
А вот это уже в этой же базе назанчения создание копии документа.
Здесь нигде нет копирования из одной базы в другую, тут только копирование в пределах одной базы.
0
0 / 0 / 0
Регистрация: 18.06.2010
Сообщений: 69
14.09.2014, 11:00 3
Цитата Сообщение от savl
Где вызов функции и где инициализация второго параметра target_db
По коду:

LotusScript
1
2
3
4
5
Set example_doc = target_db.GetDocumentByUNID("4B8361C435F3454544257D5100437C8C")
Это получение в базе назначения документа по UNID
 
Set Process = example_doc.CopyToDatabase( target_db )
А вот это уже в этой же базе назанчения создание копии документа.
Здесь нигде нет копирования из одной базы в другую, тут только копирование в пределах одной базы.
Все происходит в одной базе.
Я беру документ по UNID, делаю его копию, после меняю почти все поля, в том числе и UNID нового документа.
После пытаюсь сохранить, но при этом создается еще один документ.
Т. е. я имею в итоге исходный док, промежуточный, который создан командой CopyToDatabase и документ созданный после сохранения.
Ранее у меня все это работало. Получалось два дока. Исходный и новый с измененым UNID. Почему так происходит не могу понять уже 2 дня.
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
14.09.2014, 11:33 4
до замены унида сохранение есть?
0
0 / 0 / 0
Регистрация: 18.06.2010
Сообщений: 69
14.09.2014, 11:53 5
Цитата Сообщение от OKEN
до замены унида сохранение есть?
Нет. Вся функция в первом сообщении. Удалил только кучу строк с Call Process.ReplaceItemValue("","")
При этом после вызова: Set Process = example_doc.CopyToDatabase( target_db ) в базе появляется документ


Недавно пересоздал базу. Может где настройка бд не правильная?
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
14.09.2014, 11:54 6
CopyToDatabase - сама по себе уже сохраняет документ...
Новая копия создается только если меняется UniversalID проверял на 9-ке.
Если 2 дня назад работало, то недавно обновляли сервер/клиент?
Впрочем, может это так и в 8-ке работает.

Мой совет: заменить CopyToDatabase на CreateDocument.
Далее копируете необходимые поля и меняете UNID до первого сохранения.

Добавлено: OKEN
Ага, при CopyToDatabase
0
0 / 0 / 0
Регистрация: 18.06.2010
Сообщений: 69
14.09.2014, 12:07 7
Цитата Сообщение от savl
CopyToDatabase - сама по себе уже сохраняет документ...
Новая копия создается только если меняется UniversalID проверял на 9-ке.
Если 2 дня назад работало, то недавно обновляли сервер/клиент?
Впрочем, может это так и в 8-ке работает.

Мой совет: заменить CopyToDatabase на CreateDocument.
Далее копируете необходимые поля и меняете UNID до первого сохранения.

Добавлено: OKEN
Ага, при CopyToDatabase
Да, все логично. Поставил в тупик тот факт, что ранее агент работал. Вот и пытаюсь понять как он работал.
0
0 / 0 / 0
Регистрация: 25.07.2004
Сообщений: 109
14.09.2014, 12:35 8
А параметра CopyToDatabase_New_UNID со значением "1" в ini-файле случаем нету ?

Если да - то вот эта строка создает и сохраняет док с новым UNID:
Set Process = example_doc.CopyToDatabase( target_db )

Вот эта строка меняет у созданного дока UNID на другой
Process.UniversalID = mgr_doc.MaimProccesID(0)

А вот эта приводит к созданию еще одного документа, т.к. UNID установленный при CopyToDatabase изменен
Call Process.Save( False, False )
0
0 / 0 / 0
Регистрация: 18.06.2010
Сообщений: 69
14.09.2014, 13:06 9
Цитата Сообщение от Andre
А параметра CopyToDatabase_New_UNID со значением "1" в ini-файле случаем нету ?

Если да - то вот эта строка создает и сохраняет док с новым UNID:
Set Process = example_doc.CopyToDatabase( target_db )

Вот эта строка меняет у созданного дока UNID на другой
Process.UniversalID = mgr_doc.MaimProccesID(0)

А вот эта приводит к созданию еще одного документа, т.к. UNID установленный при CopyToDatabase изменен
Call Process.Save( False, False )
Параметра в notes.ini нет. Сейчас все происходит как описано. Интересно, почему ранее сохранялась одна копия?
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
14.09.2014, 13:11 10
Andre
Ну данный параметр был нужен для исправления ошибки CopyToDatabase, по которой новый UNID как раз таки НЕ генерился.
Это исправили, начиная с 7-ки такого больше нет.
Так же данный параметр для сервера.
Может быть он и работает.

Добавлено:


Интересно, почему ранее сохранялась одна копия?
Изменения были?
Сервер переустанавливали? Клиентов? Машины меняли?
Код где отрабатывает?
0
0 / 0 / 0
Регистрация: 25.07.2004
Сообщений: 109
14.09.2014, 16:02 11
Цитата Сообщение от savl
Ну данный параметр был нужен для исправления ошибки CopyToDatabase, по которой новый UNID как раз таки НЕ генерился.
Это исправили, начиная с 7-ки такого больше нет.
А откуда такая информация, что начиная с 7 этого нет ?

Согласно вот этим ссылкам - очень даже есть, и в качестве фикса предлагается использовать переменную в notes.ini :
Documents copied using CopyToDatabase method reuse same UNID
Some documents created using the LotusScript CopyToDatabase method do not replicate as expected

Допускаю, что при установке клиента или сервера последних версий (или начиная например с 8) этот параметр прошивается автоматически в ini-шку.
Но чтобы менялось поведение метода на противоположное (создание нового UNID вместо сохранения оригинального), вроде информации не встречал.

P.S. Да и функциональность по умолчанию с "сохранением" оригинального UNID бывает очень полезной, например при архивации.
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
14.09.2014, 16:31 12
Andre
Нет данного параметра на сервере, проверил на наших (правда у нас 8-9), так что если и прошивается, то где-то глубже.
Либо сам метод переопределили, за IBM это водится. Опять же, может настройка и работает, проверять не буду, так как это серверная часть.
Да и на локале это работает именно так - новый UNID, по факту тот же сервер.
Ну и SPR# ASHW4X9P8R
Однако, справедливости ради стоит отметить, что если документа с таким UNID в базе нет, то копирование таким образом - сохранит первоначальный UNID, но вот если уже есть - создаст новый.
Для первой архивации документа да, это хорошо, для второй (если был восстановлен) - нет.
Лучше использовать запасной вариант с CWC-полем UNID.
А для копирования: связку - CreateDocument + copyAllItems.


Добавлено:


Но чтобы менялось поведение метода на противоположное (создание нового UNID вместо сохранения оригинального), вроде информации не встречал
Да сам так же - опытным путем узнал.
0
0 / 0 / 0
Регистрация: 25.07.2004
Сообщений: 109
14.09.2014, 19:40 13
Цитата Сообщение от savl
Нет данного параметра на сервере, проверил на наших (правда у нас 8-9), так что если и прошивается, то где-то глубже.
Либо сам метод переопределили, за IBM это водится. Опять же, может настройка и работает, проверять не буду, так как это серверная часть.
Да и на локале это работает именно так - новый UNID, по факту тот же сервер.

Ну и SPR# ASHW4X9P8R
Спс, посмотрел.
Вроде, как все то же самое, поведение метода не меняли - ввели параметр в ini - хочешь включай, хочешь выключай. И это вроде-как единственный фикс по этому методу.



Цитата Сообщение от savl
Однако, справедливости ради стоит отметить, что если документа с таким UNID в базе нет, то копирование таким образом - сохранит первоначальный UNID, но вот если уже есть - создаст новый.
Тут все логично, как в букваре и написано.
Хотя, на самом деле, при таком копировании сохраняются только последние 16 символов из UNID и ЕМНИП простое сравнение не покажет идентичноcть UNID. Но к теме топика это не относится



Цитата Сообщение от savl
Для первой архивации документа да, это хорошо, для второй (если был восстановлен) - нет.
Лучше использовать запасной вариант с CWC-полем UNID.
А для копирования: связку - CreateDocument + copyAllItems.
Ну, если уж строить архивацию на этом методе, то и про подводные камни и варианты спасения в случае ЧП подумать заранее. Поле CWC обычно дублирует UNID - это да, есть такое дело.
Тут советов и рекомендаций не давал, просто привел в качестве возможного примера использования ;-)
0
14.09.2014, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2014, 19:40
Помогаю со студенческими работами здесь

Если с документом работать с флешки, сохраняется ли где-то в системе его копия
Здравствуйте. Ситуация следующая: велась на компьютере работа в Microsoft Word 2003 с флешки...

Если с документом работать с флешки, сохраняется ли где-то в системе его копия
я работала в WORDе с документом на флешке, потом потеряла флешку. сохранилась ли где то копия моей...

Создается ли копия объекта при индексации вектора?
for (size_t i = 0, n = v.size(); i < n; ++i) { //элементы вектора - string string &s = v; // тут...

Если объект копируется по ссылке, то почему копия сохраняется при обнулении оригинала?
Господа, почему срабатывает alert(b.p); ? var a = {}; var b = a; a.p = 1; a = null; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru