Вертикаль Лоцман API

Автор Volna, 18.09.09, 16:52:07

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

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

Volna

Появилась необходимость перезагрузит в Лоцман все ТП написанные в Вертикали по тому же алгоритму, что использует модуль Лоцман-Технолог. Т.е. на данный момент необходимо каждый ТП Взят на изменения в Вертикали через Лоцман-Технолог и сразу Вернуть что бы перестроилось дерево ТП и заново выставились атрибуты.

LDL

1. руками: в Лоцман на документе - получить информацию
2. модуль: API функция RefreshDocumentData.

Volna

#2
При получении информации в Лоцмане из документа создаться дерево, к операция привязываются  вспомогательные материалы, но не создаеться связь между деталью и Основным материалом.
Я так понимаю дело в Прокси. Вот код Прокси на vtp
' Получение значения атрибута
Function GetPropValue(Obj, Attr)
  I = Obj.FindPropIdx(Attr)
  if (I >= 0) then
    GetPropValue = Obj.Props(I).Value
  else
    GetPropValue = ""
  end if
End Function

' Константы
const C_TYPE = "TYPE"
const C_PRODUCT = "PRODUCT"
const C_2DDRW = "Чертеж детали"
const C_2DASM = "Сборочный чертеж"
const C_DOCFILELINK = "Document-File link"
const C_ASM = "Сборочная единица"
const C_PART = "Деталь"
const C_KEYATTR = "Обозначение"
const C_MATOS = "Материал основной"

' Преобразование первоначального запроса к Прокси
Function fTransRequest(Model)
  Set fTransRequest = Model
End Function

' Преобразование модели для Прокси
' Цель: В случае, если у объекта много чертежей, то присвоить им заголовки
Function fTransForProxy(Model)
  ' Используем ту-же модель.
  Set fTransForProxy = Model
  ' Перебираем все объекты
  For O=0 To Model.ObjCount-1
    Set Obj = Model.Objs(O)
    ObjType = GetPropValue(Obj, C_TYPE)
    ' Работаем с 2D документами КОМПАС
    If ( (StrComp(ObjType, C_2DDRW, 1) = 0) OR (StrComp(ObjType, C_2DASM, 1) = 0) ) Then
      ObjProduct = GetPropValue(Obj, C_PRODUCT)
      ListNum = 1
      ' Перебираем связи объекта
      For L=0 To Obj.LinkCount-1
        Set Link = Obj.Links(L)
        LinkType = GetPropValue(Link, C_TYPE)
        ' Работаем с файлами
        If (StrComp(LinkType, C_DOCFILELINK, 1) = 0) Then
          ' Получим обозначение файла
          Caption = ObjProduct
          If ListNum > 1 Then
            Caption = Caption & " лист " & ListNum
          End If
          ' Добавим заголовок к файлу
          Link.Child.AddProp "caption", Caption
          ListNum = ListNum + 1
        End If
      Next
    End If
  Next
End Function

' Преобразование запроса по маске
Function fTransMask(Model)
  Set fTransMask = Model
End Function

' Преобразование модели для Лоцман
' Цель: У всех объектов ДСЕ надо переименовать атрибут "Обозначение" в "PRODUCT".
' Цель: Все связи, где привязывется ДСЕ, надо удалить.
Function fTransForLoodsman(Model)
  ' Используем ту-же модель.
  Set fTransForLoodsman = Model
  ' Перебираем все объекты
  For O=0 To Model.ObjCount-1
    Set Obj = Model.Objs(O)
    ObjType = GetPropValue(Obj, C_TYPE)
    ' Работаем с детялями и сборками
    If ( (StrComp(ObjType, C_ASM, 1) = 0) OR (StrComp(ObjType, C_PART, 1) = 0) ) Then
      ' Переименовываем "Обозначение" в "PRODUCT"
      I = Obj.FindPropIdx(C_KEYATTR)
      If (I >= 0) Then
        Obj.Props(I).Name = C_PRODUCT
      End If
    End If
    ' Работаем со всеми объектами
    L = 0
    While L < Obj.LinkCount
      ChildType = GetPropValue(Obj.Links(L).Child, C_TYPE)
      ' Удаляем связи с ДСЕ
      If ( (StrComp(ChildType, C_ASM, 1) = 0) OR (StrComp(ChildType, C_PART, 1) = 0) ) Then
        Obj.Links(L).Delete
      Else
        L = L+1
      End If
    WEnd
  Next
End Function