' Создание новой версии
' Скрипт на кнопку в карточке
' v 2.0.0
Option Explicit
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
DoEvent = 0 or 16
Dim CardData2, FileList2, Ver, State, Flag, FlagModif, FlagNewVer, FolderID2, LinkedID, LinkedCard
If MsgBox("Вы уверены что хотите создать новую версию этого дизайна?", vbYesNo Or vbInformation, "Внимание!") = vbNo Then
Exit Function
End If
If GetProp(CardData, "Состояние", vbNullString) <> "действующий" Then
MsgBox "Внимание! Новую версию дизайна можно создавать только по действующему дизайну. Текущий дизайн не является действующим.", vbOKOnly, "Ошибка создания новой версии дизайна"
Exit Function
End If
If GetProp(CardData, "Флаг модификации", vbNullString) <> "False" Then
MsgBox "Внимание! По данному дизайну уже идет модификация.", vbOKOnly, "Предупреждение"
Exit Function
End If
' Копируем карточку
Set CardData2 = CardData.Copy
' Чистим файлы
Set FileList2 = UserSession.CardManager.CardData(MainInfo(CardData2).Value("FilesID"))
Sect(FileList2, "FileReferences").Rows.Clear
MainInfo(FileList2).Value("Count") = 0
' Чистим ссылки
Sect(CardData2, "CardReferences").Rows.Clear
' Проставляем версию
Ver = GetProp(CardData, "Версия дизайна", 0) + 1
SetProp CardData2, "Версия дизайна", Ver, CStr(Ver)
' Пишем состояние на свойствах
State = "проект"
SetProp CardData2, "Состояние", State, State
' Пишем флаг согласования на свойствах
Flag = "False"
SetProp CardData2, "Флаг согласования", Flag, "Нет"
' Пишем флаг новой версии на свойствах
FlagNewVer = "True"
SetProp CardData2, "Флаг новой версии", Flag, "Да"
' Пишем флаг модификации на свойствах
FlagModif = "True"
SetProp CardData, "Флаг модификации", FlagModif, "Да"
' Пишем состояние на основной секции
MainInfo(CardData2).Value("DocState")="{5C82A353-3F9D-4C1A-BAD4-103F85BAB54F}"
' Помещаем в папку
FolderID2 = GetProp(CardData, "папка", FolderID)
FolderCard(UserSession).CreateShortcut FolderID2, CardData2.ID, True
' Создаем двустороннюю ссылку на карточки
LinkedID = CardData2.ID
Set LinkedCard = UserSession.CardManager.CardData(LinkedID)
AddCardReference CardData, UserSession, LinkedCard.ID, "Следующая версия"
AddCardReference LinkedCard, UserSession, CardData.ID, "Предыдущая версия"
DoEvent = 2 or 16
' Выводим на экран новую карточку
CardFrame.Host.ShowCard CardData2.ID
End Function
' Получение карточки папок
Function FolderCard(UserSession)
Set FolderCard = UserSession.CardManager.Dictionary("{DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2}")
End Function
' Получение секции карточки по имени
Function Sect(CardData, Alias)
Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID)
End Function
' Получение подчиненной секции по имени
Function SubSect(RowData, Alias)
Set SubSect = RowData.ChildSections(RowData.Section.Type.ChildSections.GetByAlias(Alias).ID)
End Function
' Нулевая строка секции MainInfo
Function MainInfo(CardData)
Set MainInfo = Sect(CardData, "MainInfo").FirstRow
End Function
' Строка свойства
Function Prop(CardData, Alias)
Set Prop = Nothing
Dim Row: For Each Row In Sect(CardData, "Properties").Rows
If Row.Value("Name") = Alias Then
Set Prop = Row
Exit Function
End If
Next
End Function
' Получение значения свойства
Function GetProp(CardData, Alias, DefaultValue)
Dim Row: Set Row = Prop(CardData, Alias)
If Row Is Nothing Then
GetProp = DefaultValue
Else
GetProp = Row.Value("Value")
If IsNull(GetProp) Then GetProp = DefaultValue
End If
End Function
' Установка значения свойства
Sub SetProp(CardData, Alias, Value, DisplayValue)
Prop(CardData, Alias).Value("Value") = Value
Prop(CardData, Alias).Value("DisplayValue") = DisplayValue
End Sub
' Добавление ссылки
Sub AddCardReference(CardData, UserSession, Link, LinkDesc)
Dim Refs, Row
Set Refs = Sect(CardData, "CardReferences")
Set Row = Refs.CreateRow
Row.Value("Link") = Link
Row.Value("CreationDate") = Now
Row.Value("CreatedBy") = StaffObject(UserSession).GetCurrentUserID
Row.Value("LinkDesc") = LinkDesc
End Sub
' Получение StaffObject
Function StaffObject(UserSession)
Set StaffObject = CreateObject("TOHelperObjects.StaffObject")
Set StaffObject.UserSession = UserSession
End Function
' Получение секции карточки по имени
Function Sect(CardData, Alias)
Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID)
End Function |