Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём неправильно. Необходимо обновить браузер или попробовать использовать другой.
Есть в базе в некоторых документах по два поля с одинаоквым именем.
Одно пустое, ненужное, другое непустое, нужное.
Как грамотно лотус-скриптом поудалять пустые дубли?
Только вариант - перебор циклом всех имен полей в каждом документе?
If multiple items in a document have the same name, programmatic access is limited to the first item. The remaining items yield invalid data. A work-around is to get the first item, process it, remove it, again get the first item (which was the second item), and so on until you process all the items with the same name. If you do not save the document, the items are not actually removed. However, the recommendation is that you avoid creating multiple items with the same name.
Ммм-дяяя....
Метод для дублирования item-ов онЕ оставили (doc.AppendItemValue), а метод для доступа к дублям (doc.GetNextItem. В 4.11 ещё был) - ликвидировали
шальная мысль: а вот если найти эту древнюю четверку где-нить, написать агента, скомпилировать и скопипастить в R7 например...
Добавлено: есть кстати еще апишный вариант( для настоящих джедаев ):
Код:
STATUS LNPUBLIC NSFItemInfoNext(
NOTEHANDLE note_handle,
BLOCKID NextItem,
const char far *item_name,
WORD name_len,
BLOCKID far *item_blockid_ptr,
WORD far *value_type_ptr,
BLOCKID far *value_blockid_ptr,
DWORD far *value_len_ptr);
Так и пишут в описании: The function is used primarily to find all the items in a note that have the same name.
Идея интересная, а LS разве линкуется в исполняемый код, разве он не исполняется виртуальной машиной, как Java?
Да и, в общем-то, перебор итемов тоже не накладный способ...
Подумав немного: хотя, возможно, пресловутая способность поддерживать старый код и тут сработает как надо
Call notesDocument.RemoveItem( itemName$ )
Parameters
itemName$
String. The name of the item to delete from the document. If more than one item has the specified name, all items with this name are deleted. If there is no item with the specified name, the method does nothin
Set item = doc.getFirstItem( ITEM_NAME )
while not item is nothing
' сюда код по сохранению значений поля, если надо....
Call item.remove()
Set item = doc.getFirstItem( ITEM_NAME )
wend
всё правильно
1) берем первый итем - удаляем
2) при необходимости повторить
я так в своё время антиспамер делал - в серверной записи было лишь одно поле куда можно было вносить "черные IP" приходилось создавать кучу одноименных полей дабы выйти за границы в 64K
Do While doc.HasItem(itemName)
Call doc.GetFirstItem(itemName).remove()
Loop
Кстати, поэкспериментировав обнаружил, что если в цикле нет получения значения итема, то все итемы удаляются за один раз! doc.AppendItemValue помещает итемы не "перед", а "позади" (FIFO). <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код агента:</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Initialize
Print "--------------"
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim doc As New NotesDocument(db)
Dim item As NotesItem
Const itemName = "i1"
Call doc.AppendItemValue(itemName, "1")
Call doc.AppendItemValue(itemName, "2")
Call doc.AppendItemValue(itemName, "3")
Do While doc.HasItem(itemName)
Print {item.Text = } + doc.GetFirstItem(itemName).Text 'если здесь закомментировать от плюса, цикл выполнится один раз
Call doc.GetFirstItem(itemName).remove()
Loop
End Sub
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.