• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Attachments

  • Автор темы Gor
  • Дата начала

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
дополню еще...
айтемов с названием $File будет не один (в случ. нескольких файлов - точно)
у вас нет цикла и... разумеется ситуация не отслеживается с множеством файлов
полагаю, в этом ваша основная трабла
также я бы задумался над DXL вариантом, в нем просто будут ноды <file> с атрибутами и его чайлд <filedata>
 
G

Gor

вы мой пост прочли? И ссылки в конце видели?
там есть конкретное решение для домины
Ей (домине) надо определенное имя, ей плевать на ваши доморощенные! (это я к тому, что можно JS скриптом надобавлять кучу одинаковых контролов)
Я не добавляю JS scriptom одинаковые контролы. Я для каждого FileInputa прописал свой ID по которому я и обращаюсь. Т.е. вы хотите сказать что определение по ID для FileInput не подходит? Странно(... но JS работает каждое относительно своего FileInput... Это же видно при Submite...(
Код:
function Attachment()

{
n = 0;

if (document.getElementById("Fup1").value!= "") n++;
if (document.getElementById("Fup2").value!= "") n++;
if (document.getElementById("Fup3").value!= "") n++;
if (document.getElementById("Fup4").value!= "") n++;
if (document.getElementById("Fup5").value!= "") n++;

if (n>1) 
{
alert ('You can not attach few files at the same time');
return false
}
if (n=1)
{
document.getElementById("Attach1").value = document.getElementById("Fup1").value;
document.getElementById("Attach2").value = document.getElementById("Fup2").value;
document.getElementById("Attach3").value = document.getElementById("Fup3").value;
document.getElementById("Attach4").value = document.getElementById("Fup4").value;
document.getElementById("Attach5").value = document.getElementById("Fup5").value;
return true
}

return true
};

Код:
айтемов с названием $File будет не один (в случ. нескольких файлов - точно)
Я сделал проверку на JS чтобы одновременно можно было прицепить только один файл.
Я читал ваш пост и юзаю именно оттуда код для вставки аттачмента в Рт поле...
но именно там есть пункт 4 с несколькими аттачменами в одной форме...
Код:
У FileUpload Control можно задать идентификатор. Затем, на JS записываем название аттача в скрытое текстовое поле (каждому FileUpload Control соответствует свое поле), а дальше все просто.

И у меня Аттачмент моим Лотусовым Агентом прицепляется в нужное поле, но только первоначально. Далее если повторно прицепить аттач в другое поле получается билеберда, а она изза того, что При первом прицеплении аттачмента его итем ($File)не стирается... Я вот и не пойму почему

Спасибо!



хех=) Понял свою ошибку) Просто я не совсем догонял значение поля $File...


у вас нет цикла и... разумеется ситуация не отслеживается с множеством файлов

Да вы право именно в этом моя ошибка...

А как получить массив значений на скриптах всех итемов $File ? Если у меня их 5 к примеру в документе...??
У них же имена одинаковые... $File....

Ну если одно поле $File в документе, то понятно...

Set v2File = doc.GetFirstItem ( "$File" )
ileName = v2File.Values(0)

А если несколько прицепленых файлов в доке???
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
значить по-порядку...
поля $File хранят сами файлы, НО один файл может быть "размазан" по нескольким
перебирать айтемы можно в массиве Items:
Код:
Dim doc As NotesDocument
'...set value of doc...
Forall i In doc.Items
Messagebox( i.Name )
End Forall
а далее по условию (совпадения имени с $File) исполнять свою процедуру
тока предусмотрите обработку v2File.Values потому как я уже выше указал на особенности поля $File
и одинаковые файлы надо запрещать аттачить (JS)

т.е. прицепив сабформу с аплоадом и взяв его код, могете в сабформе поставить Hide для текста в строке с аплоадом
в эт. случае сам контрол не будет отображатся...
а вот код можете вставлять JS типа:
Код:
var new_element = document.createElement( 'input' );
new_element.type = 'file';

// Add new element
this.parentNode.insertBefore( new_element, this );
но не забывайте, что имена у них д.б. вышеоговоренные
вариантов масса, самым удобным будет вставка и сокрытие <div> с элементами, с пом. jQuery
тамже возможен и контроль дублирования имен

в дополнение, я уже указывал на большую предсказуемость DXL...

в РТ поле, приложенные файлы, отображаются с пом. "хинтов", вот как их воссаздать - я не знаю (не пробывал)
можно посравнивать РТ с приложенными файлами (обычным образом) и безхинтовый (кот. получается при аттаче через хттп, например)
это достигается анализом ДХЛ
на интертрасте я выкладывал VTD имплементацию работы с ДХЛ и ссылки на библу, она может изменять XML (DXL как частный случай)
др. словами - можно попробовать вставлять заготовленные заранее хинты
 
G

Gor

Мда( Вроде бы перебрал всё в цикле, просмотрел логику, должно работать....

Непонятная вещь происходит... Вставляю предположим аттачмент агентом на WebQuerySave
Код:
	Dim session As New NotesSession
'	Dim v2File As NotesItem
Dim rtItem As NotesRichTextItem
Dim inputAttachment As NotesEmbeddedObject
Dim tempDirectory As String
Dim fileName As String
Dim filePath As String
Dim doc As NotesDocument

Set doc = session.DocumentContext

p1 = doc.GetItemValue("l58")
p1 = Strrightback(p1(0),"\")
p2 = doc.GetItemValue("l59")
p2 = Strrightback(p2(0),"\")

'здесь должна быть выборка всех аттачментов

Forall v2File In doc.Items
If v2File.Name = "$FILE" Then 

fileName = v2File.Values(0)

If fileName = p1 Then

Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

'--Save the file on the server
Call inputAttachment.ExtractFile ( filePath )
'--Delete the original attachment
Call doc.RemoveItem ( "$File" )

If doc.HasItem ("l58_a") Then
Set rtItem = doc.GetFirstItem ("l58_a")
'--CUSTOMIZE the code below if you want to add a couple of lines to the rich text field before re-attaching the file
'--rtItem.AddNewLine(2)
Else
Set rtItem = New NotesRichTextItem ( doc,"l58_a")
End If


Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

End If

If fileName = p2 Then

Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

'--Save the file on the server
Call inputAttachment.ExtractFile ( filePath )
'--Delete the original attachment
Call doc.RemoveItem ( "$File" )

If doc.HasItem ("l59_a") Then
Set rtItem = doc.GetFirstItem ("l59_a")
'--CUSTOMIZE the code below if you want to add a couple of lines to the rich text field before re-attaching the file
'--rtItem.AddNewLine(2)
Else
Set rtItem = New NotesRichTextItem ( doc,"l59_a")
End If


Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath)

End If
End If
End Forall

Call doc.ReplaceItemValue("l58","")
Call doc.ReplaceItemValue("l59","")
Kill FilePath
Call doc.Save ( True, True )

А потом хочу предположим исправить какое нибудь другое поле обычное текстовое в доке т.е. перехожу в EditMode чёнить там пишу и нажимаю на кнопку которая вызывает:

@Command([FileSave]);
@Command([FileCloseWindow])

Причём!!!! предварительно отлючив агента WebQuerySave в котором находится вышеприведённый код.
Т.е. Я просто редактирую документ с аттачментом и сохраняю.
В итоге приаттаченый файл исчезает из РТ поля, и там остаётся только его название... Чё за глюк...
??((((
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
как бы делал я:
-получилбы все нужные Items в Dim listItems List As NotesItem, тагом будет имя файла
-сохранилбы все файлы на диск (в цикле) forall itm in listItems
-удалил бы все айтемы из списка в цикле itm.Remove()
-прицепил файло в РТ прочесав listItmes по тагам

потому как то, что делает ваш код - я вижу неоднозначность удаления $File, ведь вы не знаете какой удаляете!
 
G

Gor

В общем я немного переписал код...

Дело в том что мне много плодить циклов не надо, так как у меня стоит проверка на одновременное прицепление только одного аттачмента на JS, и код немного проще.

Но код я немного переделал, переделал удаление $File для того чтобы именно нужный Итем удалялся

Алгоритм такой:
Перебираем все имеющиеся итемы по условиям имени итема $File и совпадению значения тага имя файла item.Values(0)
Как только итем совпал аттачим файл в соответствующее поле и выходим, т.к. одновременно файл прицепить можно только один

Код:
	Dim session As New NotesSession
Dim v2File As NotesItem
Dim rtItem As NotesRichTextItem
Dim inputAttachment As NotesEmbeddedObject
Dim tempDirectory As String
Dim fileName As String
Dim filePath As String
Dim doc As NotesDocument

Set doc = session.DocumentContext

p1 = doc.GetItemValue("l58")
p1 = Strrightback(p1(0),"\")
p2 = doc.GetItemValue("l59")
p2 = Strrightback(p2(0),"\")

v = p1 + p2 + p3 + p4 + p5

Forall item In doc.Items

If (item.Name = "$FILE") Then 

If item.Values(0) = v Then

fileName = item.Values(0)
Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

'--Save the file on the server
Call inputAttachment.ExtractFile ( filePath )

Call item.Remove

If v = p1 Then
Set rtItem = doc.GetFirstItem ("l58_a")

Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )						Goto label
End If
If v = p2 Then
Set rtItem = doc.GetFirstItem ("l59_a")

Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )
Goto label
End If
End If


End If
End Forall

Label:


Call doc.ReplaceItemValue("l58","")
Call doc.ReplaceItemValue("l59","")
Call doc.ReplaceItemValue("l60","")
Call doc.ReplaceItemValue("l61","")
Call doc.ReplaceItemValue("l62","")
Kill FilePath
Call doc.Save ( True, True )

Так вот и этот код тоже не работает))) При первичном прицеплении файла работает, когда к доку пытаемся прицепить второй файл тогда глючит...
Выяснил почему - при прицеплении второго файла когда скрипт проходит по итемам Forall item In doc.Items он не находит совпадений
по item.Values(0) . Я вернул значение всех полей $File когда в документу пытаешься прикрепить второй файл, получилось что то необъяснимое, в итемах $File - Values(0) были РАвнЫ... хотя к FileUpload я цеплял разные аттачи на каждом этапе.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
как я и упоминал - проверьте все Values
for i=Lbound(item.Values) to Ubound(item.Values)
itemValues(i)
чему они равны
и зачем вы item.Values(0) = v сравниваете?
ведь имя файла домина может дать и другое (теоретически), в случ. одинаковых аттачей - так и будет

и второе - как я и грил - DXL более предсказуем :blink:
а здесь все приходится наощупь...
 
G

Gor

и зачем вы item.Values(0) = v сравниваете?
...
В переменной v находится имя текущего аттачмента который надо прицепить... Он JS копируется из нужного FileUpload перед сохранением в поле соответсвующее... А в item.Values(0) также хранится имя аттачмента от поля $File...
По идее если к документу в первый раз был прикреплен файл 1.txt , а во второй 2.txt и мы как раз рассматриваем второй случай то:

Код:
v = 2.txt

делаем перебор по всем итемам
Forall item In doc.Items
если первый итем $File то
If (item.Name = "$FILE") Then
если значение этого итема = с текущим значением то записать его в определённое поле
If item.Values(0) = v Then

Если первый item.Name попался = 1.txt то проверку он не пройдёт, если 2.txt то пройдёт
И массива значений item.Values(0) в полях $File не должно быть... Ведь с каждым новым аттачментом он влодит новый итем $File, а не добавляет новый контейнер (i) к созданому итему... по идее значение у него будет всегда только в (0) контейнере...

Хотя может быть уже пятница, вечер, я загнался и мало что понимаю =))))))
Не судите строго, отнеситесь с пониманием =))))))

А вот насчёт DXL я вообще ничего сказать к сожалению не могу =))) Никада этим не пользовался и к сожалению не знаю как...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
что вы делаете - я понял, я спросил зачем :blink:
и предложил анализировать полностью и имя брать доминошное (причину объяснил)
ктому же - русские имена могут хранится в кодированном состоянии!
 
G

Gor

ну предположим переписал=))
Сейчас полностью анализирую имя=)) не работает всё равно)

Код:
Sub Initialize

Dim session As New NotesSession
Dim v2File As NotesItem
Dim rtItem As NotesRichTextItem
Dim inputAttachment As NotesEmbeddedObject
Dim tempDirectory As String
Dim fileName As String
Dim filePath As String
Dim doc As NotesDocument

Set doc = session.DocumentContext

p1 = doc.GetItemValue("l58")
p1 = Strrightback(p1(0),"\")
p2 = doc.GetItemValue("l59")
p2 = Strrightback(p2(0),"\")
p3 = doc.GetItemValue("l60")
p3 = Strrightback(p3(0),"\")

Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
If item.Values(i%) = p1 Then
fileName = item.Values(i%)
Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

Call inputAttachment.ExtractFile ( filePath )

Call item.Remove					

Set rtItem = doc.GetFirstItem ("l58_a")

Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

End If
Next
End If

End Forall

Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
If item.Values(i%) = p2 Then
fileName = item.Values(i%)
Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

'--Save the file on the server
Call inputAttachment.ExtractFile ( filePath )

Call item.Remove					

Set rtItem = doc.GetFirstItem ("l59_a")

Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

End If
Next
End If

End Forall

Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
If item.Values(i%) = p3 Then
fileName = item.Values(i%)
Set inputAttachment = doc.GetAttachment ( fileName )

tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "\" + fileName

'--Save the file on the server
Call inputAttachment.ExtractFile ( filePath )

Call item.Remove					

Set rtItem = doc.GetFirstItem ("l60_a")

Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )

End If
Next
End If

End Forall


Label:

Call doc.ReplaceItemValue("l58","")
Call doc.ReplaceItemValue("l59","")
Call doc.ReplaceItemValue("l60","")

Kill FilePath
Call doc.Save ( True, True )

End Sub
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
я вам все уже рассказал...
вот рабочий код (как распихивать по разным РТ - сами догадаетесь)
Код:
Sub Initialize
Dim session As New NotesSession
Dim v2File As NotesItem
Dim rtItem As NotesRichTextItem
Dim inputAttachment As NotesEmbeddedObject
Dim tempDirectory As String
Dim fileName As String
Dim filePath As String
Dim doc As NotesDocument
Dim i As Integer

Set doc = session.DocumentContext
Forall item In doc.Items
If (item.Name = "$FILE") Then 
For i% = Lbound(item.Values) To Ubound(item.Values)
fileName = item.Values(i%)
Print "file:"fileName
Set inputAttachment = doc.GetAttachment ( fileName )
tempDirectory = session.GetEnvironmentString ( "Directory", True )
filePath = tempDirectory + "/" + fileName
Call inputAttachment.ExtractFile ( filePath )
Call item.Remove					
Set rtItem = doc.GetFirstItem ("body")
Set inputAttachment = rtItem.EmbedObject ( EMBED_ATTACHMENT, "",FilePath )
Kill filePath
Next
End If

End Forall
Call doc.Save ( True, True )
End Sub
 
G

Gor

Да, вы мне очень помогли. Я дошёл до этого немного раньше с вашей помощью.
Но у меня сейчас код точно в таком же виде, но только есть распределение по полям. Работает, но к сожалению на половину...
ОШИБКА НЕ В РАБОТЕ МОЕГО АГЕНТА.

Заметил такую вещь, именно она меня вводит в ступор. Файлы раскладываются по нужным местам с помощью агента, НО при простой сохранении формы @Command([FileSave]) из RT полей иисчезают прикрепления и остаются от них только одни названия. Это проблема не в агенте, какая то проблема существует при простом сохранении.

Если посмотреть на документ с уже прикреплённым файлом моим агентом у него в свойствах ДВА РТ поля с одинаковыми названиями.

К примеру l62_a и l62_a ... Но свойства у них разные, у одного свойства:

Field Name: l58_a
Data Type: Rich Text
Data Length: 82 bytes
Seq Num: 2
Dup Item ID: 0
Field Flags:

у другого:

Field Name: l58_a
Data Type: Rich Text
Data Length: 1568 bytes
Seq Num: 4
Dup Item ID: 1
Field Flags: SIGN SEAL

- New Text Document.txt

Если просто сохранить данный документ без запуска агента одно из полей исчезает, а именно вот это - Field Name: l58_a
Data Type: Rich Text
Data Length: 82 bytes
Seq Num: 2
Dup Item ID: 0
Field Flags:

И в документе сразу же пропадает ссылка в виде листа и остаётся только одно текстовое название аттача...
Это баг? Или где то я какую то галку не поставил?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
РТ поля - "вещь в себе"
не рекомендую с ними особо "играться", и уж тем более - давать им одинаковые имена
Возможно, надо самому убивать одно из полей (с одинаковым названием)
да и непонятна ситуация - зачем вам несколько РТ, ИМХО - это глюкало
 
P

P@Niker

Сталкивались с таким, в итоге решили пересмотреть структуру сохранения аттачей, банально создается дочерний документ, в котором и хранится аттач, один, причем внизу документа, так как в веб при пересохранении аттач всё равно к документу переприкрепляется.

А этот код будет работать только если РТ поле одно в документе и документ в вебе больше нигде потом не пересохраняется.
 
G

Gor

Сталкивались с таким, в итоге решили пересмотреть структуру сохранения аттачей,

Всё проблема решена, но я решил её несколько по другому, без дочерних документов.

Я вообще убрал РТ поля с формы. вместо них сделал скрытые текстовые, куда я пишу имя файла=)))
Рядом с каждым текстовым соответственно ему сделал поля Computed for fisplay с формулой

"[<a class=bodylink href=" + @Text(@DocumentUniqueID) + "/$FILE/" + @URLEncode("Domino";@Text(l58_:))+">" + @Text(l58_:(+ "</a>]"

И в агенте пишу в соответсвующее текстовое поле просто имя файла=))))
Наконецто... Код агента для двух полей c с аттачментами:

Код:
Sub Initialize

Dim session As New NotesSession
Dim v2File As NotesItem
Dim rtItem As NotesRichTextItem
Dim inputAttachment As NotesEmbeddedObject
Dim tempDirectory As String
Dim fileName As String
Dim filePath As String
Dim doc As NotesDocument

Set doc = session.DocumentContext

p1 = doc.GetItemValue("l58")
p1 = Strrightback(p1(0),"\")
p2 = doc.GetItemValue("l59")
p2 = Strrightback(p2(0),"\")


Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
If item.Values(i%) = p1 Then

'чистка итема если переписываем поле
q1 = doc.GetItemValue("l58_b") 

If q1(0) <> "" Then
Forall items In doc.Items
If (items.Name = "$FILE") Then 
For a% = Lbound(items.Values) To Ubound(items.Values)
If items.Values(a%) = q1(0) Then
Call items.Remove
End If
Next
End If
End Forall
End If



Call doc.ReplaceItemValue("l58_b",p1)					
End If
Next
End If

End Forall

Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
If item.Values(i%) = p2 Then

'чистка итема если переписываем поле
q2 = doc.GetItemValue("l59_b") 

If q2(0) <> "" Then
Forall items In doc.Items
If (items.Name = "$FILE") Then 
For a% = Lbound(items.Values) To Ubound(items.Values)
If items.Values(a%) = q2(0) Then
Call items.Remove
End If
Next
End If
End Forall
End If


Call doc.ReplaceItemValue("l59_b",p2)

End If
Next
End If

End Forall


Label:

Call doc.ReplaceItemValue("l58","")
Call doc.ReplaceItemValue("l59","")

Call doc.Save ( True, True )

End Sub
 
S

SkinGreek

Gor
Тут тоже придется поработать с атачами, почитал тему и подумал, зачем вы делаете
Код:
Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
....
Next
End If

End Forall
ведь сначала вы вроде правильно написали
Код:
set item = doc.GetFirstItem( "$File" )
или я что то путаю?
Я вообще убрал РТ поля с формы.
хм... а куды тогда атачи прикрепляются? примере я видел что есть РТ, поле а на кнопочке атача повешено
Код:
@Command([EditGotoField]; "Body");
@Command([EditInsertFileAttachment])


мне не для Web правда, а для notes клиента.
Можно каким то другим способом прикреплять файлы?
 
G

Gor

ведь сначала вы вроде правильно написали
Ну не знаю уж что я там раньше писал правильно=) Я просто в итоге пришёл к тому, что скрипть практически изначально был у меня написан правильно, а проблема была с РТ полями в вебе... затирались они после пересохранения... поэтому отказавшись от РТ полей сделал по другому.

Код:
хм... а куды тогда атачи прикрепляются? примере я видел что есть РТ, поле а на кнопочке атача повешено
Ну аттачи так и содержатся в поле $File в документе...
Просто поля File я скрываю с помощью опции $V2AttachmentOptions, чтобы они не отображались внизу документа. (т.е. я заменил РТ поля обычным текстовым)
И как я писал я формирую на него просто активную ссылку в простое текстовое поле computed for display...


Я вообще убрал РТ поля с формы. вместо них сделал скрытые текстовые, куда я пишу имя файла=)))
Рядом с каждым текстовым соответственно ему сделал поля Computed for fisplay с формулой


Цитата
"[<a class=bodylink href=" + @Text(@DocumentUniqueID) + "/$FILE/" + @URLEncode("Domino";@Text(l58_:))+">" + @Text(l58_B)+ "</a>]"


И в агенте пишу в соответсвующее текстовое поле просто имя файла=))))

Честно говоря никогда из под клиента Лотусового не сталкивался с прикреплением файлов из файловой системы... ну разве кроме того как File -> Attach :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
я пытался объяснить про поля $File - не простые они :rolleyes:
прикрепите достаточно большой файл к доку (из клиента) и посмотрите сколько таких полей будет
РТ и файлы могут реплицироваться "чанками" (размер их не знаю) и это основной плюс (ИМХО)
но это же и накладывает ограничения на их способ хранения

Аттачи можно крепить по-разному, я бы крепил через DXL (о чем и упоминал выше) - ИМХО, это не сложнее "обычного" способа (надо только пройти этот путь 1-ин раз)
единственная особенность - работает DXL только с бэкэндом (увы)
 
S

SkinGreek

lmike
расстроили вы меня(
попытка пробежать по файлам таким образом
Код:
Forall item In doc.Items
If (item.Name = "$FILE") Then 

For i% = Lbound(item.Values) To Ubound(item.Values)
....
Next
End If

End Forall
не увенчалась у меня успехом item.Values(i%) всегда был равен одинаковому имени, хотя заходил он туда столько же раз сколько прикреплено фалов.
Решил эту проблему удалением текущего item.
Но после того как вы сказали что он еще и самостоятельно разбивает файлы совсем грусно стало(
По вашему совету посмотрю через DXL не разу его не юзал но судя по форумским обсуждениям он иногда спасает. В общем спасиб за совет как время появится переделаю. Надеюсь он адекватнее обычного API лотуса

РТ и файлы могут реплицироваться "чанками" (размер их не знаю) и это основной плюс (ИМХО)
и всеж же "основным плюсом" это было бы когда это было прозрачно для API. Не думаю что мне(как пользователю API) стоило знать об этом работая с Notes API...в идеале я имею ввиду)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
DXL - это тоже АПИ Домины, просто реализовано через XML
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!