Свойство parentView в классе NotesDocument

У меня есть функция, которая вызывает другую функцию - кости показаны ниже.

Когда вторая функция запускается и достигает строки set doc = view.getNextDocument (doc), свойство parentView в полностью несвязанном NotesDocument, doc1, также обновляется, тем самым прерывая исходный цикл.

Есть предположения?

function getDept(){
 dim doc1 as NotesDocument
 dim view1 as NotesView
 .
 .
 .
 set doc1 = view1.getFirstDocument

 while not(doc1 is nothing)
 .
 .
 .
  call getDeptNumber()
 .
 .
 .
  set doc1 = view1.getNextDocument(doc1)

 }

 function getDeptNumber(){
  dim doc as NotesDocument
  dim view as NotesView
  .
  .
  .
  set doc = view.getFirstDocument

  while not(doc is nothing)
  .
  .
  .
   set doc = view.getNextDocument(doc)

  }

Это сводит меня с ума!

Спасибо

Грэм


person NotesNut    schedule 11.11.2014    source источник


Ответы (2)


Это немного непонятно, если не увидеть больше кода, но я подозреваю, что ваша проблема может быть связана с кешированием. Если вы обращаетесь к одному и тому же NotesDocument из разных представлений, второй и последующие обращения могут закончиться использованием того же документа, который у вас уже есть в памяти в другой части вашего кода. Вероятно, поможет использование коллекции записей представления, как показано в другом ответе. Также установите для свойства autoupdate представления значение False.

Но я не могу не заметить, что ваш код не очень хорошо организован и не эффективен. Похоже, ваша подпрограмма (у которой нет параметров, поэтому я предполагаю, что она использует глобальные переменные - плохая идея, если вы можете этого избежать) создает новый объект View каждый раз, когда он вызывается. Это дорого. Кроме того, похоже, что он перебирает представление с целью поиска значения, что неэффективно. Используйте отсортированное представление и ищите значение, используя вместо этого методы View.

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

person Andre Guirard    schedule 11.11.2014

Если вы пробежитесь по представлению, и в документах есть изменения (которые повлияли на представление), то с первой функцией могут возникнуть проблемы.

Лучше использовать коллекцию для просмотра документов.

   function getDept(){
     dim doc1 as NotesDocument
     dim view1 as NotesView
     dim collEntries as NotesViewEntryCollection
     dim viewEntry as NotesViewEntry
     .
     .
     .
     set collEntries = view1.getAllEntries()
     set viewEntry = collentries.getFirstEntry

     while not(viewEntry is nothing)
     set doc1 = viewEntry.Document
     .
     .
      call getDeptNumber()
     .
     .
     .
      set viewEntry = collEntries.getNextEntry(viewEntry)

     }
    }

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

person poisonedYouth    schedule 11.11.2014
comment
Спасибо - вытащил меня из ямы! - person NotesNut; 11.11.2014