• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Агент и вычисляемое поле

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

LIGHT

Ситуация такая, есть документ на котором болтается текстовое, многострочное поле.
При определенном действии в это поле дописываются данные.
При этом, это поле является вычесляемым, т.е. по некоторым соображениям нельзя допустить что бы там поправили что-то ручками. Сейчас сделано так, поле вычесляет само себя, + проверяет новый ли это документ и еще ряд параметров в случае если все нормально в него производится дозапись данных.

Захотелось сделать вот что:

В вьюшке где выбраны документы по этой форме, сделал кнопку, конопая на которую нужно сделать всего одно действие над выбраным(и) документами
Код:
AddItemValye (мое_поле, мое_значение)
Save(true,true,true)
Но чего-то в мое_поле мое_значение ни как не хотит колбасится, даже ошибок нет.
Может кто чего насоветует как такой винегрет приготовить.
 
K

K-Fire

А какая функция используется чтобы получить ссылку на документ из вьюхи?

Может быть uiview.Documents, затем GetFirstDocument и при этом напротив документа галочка не поставлена?
 
L

LIGHT

Код такой:

Код:
Sub Click(Source As Button)

'**********************************************
Dim s As NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim w As NotesUIWorkspace
Dim createDate As Variant
Dim i As Variant

'***********************************************
Set s = New NotesSession
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set w = New NotesUIWorkspace

'**********************************************

Do Until doc Is Nothing

Let TOrig=doc.Orig(0)						
Let TOrigP=doc.OrigP(0)			

Call doc.AppendItemValue( "OrigP" , doc.Orig(0))


'******************************************************

Call doc.save(True,True,True)
Messagebox(doc.OrigP(0))
Set doc = dc.GetNextDocument (doc) 

Loop

End Sub

PS Orig="ля-ля-ля" т.е. пуременная существует
Делал тупо Call doc.AppendItemValue( "OrigP" , "проверочка") не работает :(

Может быть еще будет важен код поля, хотя ... для моего случая должно быть по барабану.
@If(@IsNewDoc & OrigP!="";fieldValue :="";fieldValue := OrigP);
addValueTime := @Text(@Now([ServerTime]));
addValue := addValueTime +" --> "+Orig;
fieldValue1 := ed;
@If (@IsDocBeingSaved &fieldValue1 = "edit";
@If ( fieldValue = "" | @IsNewDoc; addValue;fieldValue:addValue);
fieldValue
)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Читай хелп.
AppendItemValue создает новое поле. А если такое уже есть, то создает второе с таким же именем.
Тебе нужно использовать ReplaceItemValue или через Evaluate.

А еще есть функции @Command([ToolsRefreshSelectedDocs]) или @Command([ToolsRefreshAllDocs]), которые делают перевычисление всех полей в документе. Но пользоваться ими надо осторожно.
 
L

LIGHT

<!--QuoteBegin-Medevic+14:06:2007, 11:47 -->
<span class="vbquote">(Medevic @ 14:06:2007, 11:47 )</span><!--QuoteEBegin-->Тебе нужно использовать ReplaceItemValue или через Evaluate.
[snapback]69303" rel="nofollow" target="_blank[/snapback]​
[/quote]
Для: Medevic а не могбы примерчик привести как Evaluate прикрутить к ReplaceItemValue?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Это:
<!--QuoteBegin-LIGHT+14:06:2007, 11:35 -->
<span class="vbquote">(LIGHT @ 14:06:2007, 11:35 )</span><!--QuoteEBegin-->Call doc.AppendItemValue( "OrigP" , doc.Orig(0))
[snapback]69298" rel="nofollow" target="_blank[/snapback]​
[/quote]
заменить на это:
Код:
doc.OrigP = Evaluate({OrigP : Orig}, doc)
 
J

johny

а еще проще на собаках все написать

tmp:= твое_поле;
FIELD второе_твое_поле := tmp;
 
R

Ronchik

Для: LIGHT
@SEtField("OrigP";OrigP:"Value")
и все
 
Мы в соцсетях:

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