Событие BeforeDelete

Автор Антон_, 02.12.16, 14:11:33

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Антон_

Добрый день!
Возникла необходимость при удалении объекта удалять также и другой объект.
В событии BeforeDelete первого объекта мы прописали получение второго объекта, получении его родителя и удаление связи родителя со вторым объектом. Но при выполнении данного события возникает ошибка "Не удалось удалить выделенные объекты технологии, непредвиденная ошибка". При том что если мы записываем тот же самый код допустим в функцию showme первого
объекта, то все работает нормально. Мы попробовали удалить случайную операцию из техпроцесса, но все то же самое

function BeforeDelete( obj )
  i=0
  while i<obj.vrObjectsVector.vrObjectsCount-1
    if (obj.vrObjectsVector.vrItem(i).vrclass.vrname="detail") or (obj.vrObjectsVector.vrItem(i).vrclass.vrname="assembly") then
      set it = obj.vrObjectsVector.vrCreateIterator("operations",obj.vrObjectsVector.vrItem(i),true)
      if it.vrFirst then
        obj.vrObjectsVector.vrItem(i).vrDeleteChildLink(it.vrGetObject)
      end if
    end if
    i=i+1
  wend
end function 

Возможно в самой системе заложен запрет удаления других объектов в событии "Перед удалением"?

И может кто нибудь знает насчет события "Перед редактированием". Как написано в справке

procedure OnBeforeChange(const attribute: IDispatch);
Примечания:
Обработчик события может запретить редактирование атрибута, для чего следует вернуть код ошибки (Visual C++) или создать исключение COM (Delphi), и записать в IErrorInfo строку, объясняющую почему действие было запрещено.

Как можно программно отменить внесенные пользователем изменения использую язык Visual Basic? и что вообще значит
"вернуть код ошибки (Visual C++) или создать исключение COM (Delphi), и записать в IErrorInfo строку"

Антон_

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

Может кому нибудь будет интересно
function del1( obj )
  set obj2 = obj.vrObjectsVector.vrGetObjByStrID(obj.vrAttrByName("id_obj2").vrValue)
  set it2 = obj.vrObjectsVector.vrCreateIterator("filter_parent_obj2",obj2,false)
  if it2.vrNext then
    it2.vrGetObject.vrDeleteChildLink(obj2)
  end if
 
  set it1 = obj.vrObjectsVector.vrCreateIterator("filter_parent_obj1",obj,false)
  if it1.vrNext then
    it1.vrGetObject.vrDeleteChildLink(obj)
  end if
end function