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

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

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

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

Проблема с агентом.

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

kilcher

Добрый день,всем!
Возникла проблема в работе агента. Мне необходимо просмотреть все документы,затем выцепить из них id. По этим id я нахожу коллекцию документов ответов. И заношу значение из документа ответа в родительский документ. Все вроде функционирет,но почему то только для первого документа ответа. Как-будто коллекция не перебирается :)
Помогите пожалуйста ошибку найти.
Вот эта часть кода
Set item1 = doc.GetFirstItem( "soglasovali" )
Set view = db.GetView("Answer" )
Set dc = view.GetAllDocumentsByKey(doc.order_id, False)
If dc.Count =0 Then
doc.flag="1"
Else
Set doc1= dc.GetFirstDocument
Call item1.AppendToTextList( doc1.GetItemValue("From") )
'сравниваем значение полей кто должен проставить отметку и кто уже проставил.
f1 = doc.GetFirstItem("answer1").Values
f2 = doc.GetFirstItem("soglasovali").Values
f3 = Fulltrim(Arrayreplace(f1, f2, ""))
Call doc.ReplaceItemValue("ne_soglasovali", f3)
doc.ComputeWithForm False, False
doc.Save True, True
Set doc1 = dc.GetNextDocument (doc1)
End If
 
A

alb

судя по куску кода все правильно
ты ведь не проходишь ведь по всем документам в коллекции

Set item1 = doc.GetFirstItem( "soglasovali" )
Set view = db.GetView("Answer" )
Set dc = view.GetAllDocumentsByKey(doc.order_id, False)
If dc.Count =0 Then
doc.flag="1"
Else
Set doc1= dc.GetFirstDocument
*******************************************************
Call item1.AppendToTextList( doc1.GetItemValue("From") )
'сравниваем значение полей кто должен проставить отметку и кто уже проставил.
f1 = doc.GetFirstItem("answer1").Values
f2 = doc.GetFirstItem("soglasovali").Values
f3 = Fulltrim(Arrayreplace(f1, f2, ""))
Call doc.ReplaceItemValue("ne_soglasovali", f3)
doc.ComputeWithForm False, False
doc.Save True, True
Set doc1 = dc.GetNextDocument (doc1)
*******************************************************
End If


звездочкой выделенная часть кода должна быть в цикле
 
K

kilcher

А разве Set doc1 = dc.GetNextDocument (doc1) это не переход к следующему документу коллекции? Что то торможу я :)
 
A

alb

да вы взяли этим следующий документ но чтоб его обработать нужно ведь вернутся и повторитьте действия которые делали предшествующим документом
 
K

kilcher

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

Но ведь я не знаю сколько у меня документов. Т.е. не знаю когда остановить цикл.
 
A

alb

while not(doc1 is nothing)
*******************************************************
Call item1.AppendToTextList( doc1.GetItemValue("From") )
'сравниваем значение полей кто должен проставить отметку и кто уже проставил.
f1 = doc.GetFirstItem("answer1").Values
f2 = doc.GetFirstItem("soglasovali").Values
f3 = Fulltrim(Arrayreplace(f1, f2, ""))
Call doc.ReplaceItemValue("ne_soglasovali", f3)
doc.ComputeWithForm False, False
doc.Save True, True
Set doc1 = dc.GetNextDocument (doc1)
*******************************************************
wend

Но ведь я не знаю сколько у меня документов. Т.е. не знаю когда остановить цикл.
dc.count на что?
 
K

kilcher

Ну если число документов в коллекции =0.
Спасибо за совет,все получилось. :)
 
A

abbatik

если кол-во 0, то doc сразу вернет nothing

хотя лично я пользуюсь do while - loop
 
Мы в соцсетях:

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