Это старая версия документа.


Ссылка для процесса с видом типа "Код"

Текущая ситуация

Для того чтобы в отчетах типа HTML (HTML-публикация, Business Studio Portal) названия Процессов, Субъектов и т.д. показывались ссылками (при условии, что есть куда ссылаться), необходимо, чтобы соответствующие привязки создавались как объекты, а не как параметры объекта. При этом текст такого объекта предопределен. Например, в отчетах ссылка будет только у процессов с текстом вида "Код НазваниеПроцесса". Если в отчет вывести параметр "Автокод процесса", то гиперссылки у такого кода процесса не будет.

Постановка задачи

В отчете формата Word по процессу в таблице с данными его подпроцессов столбец "Следующий процесс" должен быть:

  1. Представлен в формате "Код + Название процесса" если формируется как отдельный документ Word (т.е. обычный формат).
  2. Представлен в формате "Код"  с гиперссылкой на процесс, если формируется для HTML (HTML публикация или Business Studio Portal).

Ничего не делать с данными о следующем процессе для отчетов типа HTML в случаях если:

  • Процесс не является гиперссылкой;
  • Процесс обозначен как {Туннель} или {Граница}.

Исходные данные

Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа "Список", которую можно видеть таблицей. В таблице есть столбец "Следующий процесс", который представлен форматом "Код + Название процесса".  

Invalid Link
Рисунок 1. Вид необходимой привязки типа Список в шаблоне отчета
Invalid Link
Рисунок 2. Вид данных, сформированных по необходимой привязке, в выполненном отчете в HTML-публикации

Концепция решения

После того, как отчет будет сформирован и Business Studio создаст все необходимые ссылки, будем запоминать каждую ссылку и название столбца.

Шаги решения

Только если отчет формируется  для HTML-публикации или Business Studio Portal необходимо кодом VBA для каждой ячейки столбца "Следующий процесс":

  • запомнить текст ячейки и гиперссылку;
  • из текста взять только код процесса (весь текст ячейки слева до первого пробела) и запомнить;
  • заменить содержимое ячейки гиперссылкой с текстом типа "Код" и таким же адресом ссылки;
  • если ячейка не содержит информацию о процессе, не содержит ссылки на процесс, тогда оставить все без изменения.
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
ие вывода отчета (файл или HTML: публикатор или портал)
Dim HTMLCreate As Booл или HTML: публикатор или портал)
Dim HTMLCreate As Boolean
HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value
 
If HTMLCreate Then tring
    Dim SpecText As String
   или BS Portal
 
    ng
    DiНАЯ
 
    Dim BookmarkName As String
    Dim SpecText As String
    писок, формирующей нужну    Dim СolumnNextProc As Integer
 
    860073"
    СolumnNextProc = 4 'номер столбца "Следующий процесс" в табсок, формирующей нужную таблицу
    BookmarkName = "Подпроцессы_54860073"
    СolumnNextProc = 4    Dim KodText As String
    Dim hLinkAdress  процесс" в таблице
    SpecText = "{" РНАЯ ЧАСТЬ
 
    If BookmarkIs(BookmarkName) Then 'если есть нция о {Туннель} или {Граница}
 
    Codes = Notбные
    Dim CellText As String
    Dim KodText As String
    Dim hLinkAdress As String
    Dim spaceNum As Integer
 
    ent.Bookmarks(BookmАЯ ЧАСТЬ
 
    If BookmarkIs(BookmarkName) Then ableKod.Rows.Count 'количество симая закладка
 
        ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes     On Error Resume Next ' игнорирование <erй, а значения
 
        Set TableKod = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)
 
        TableKodRows = TableKod.Rows.Count Text = Left$(CellText, (Leрок таблицы
 
        For i = 2 To TableKodRows ки
 
            If Len(CellTextтаблицы кроме первой
 
            On Error Resume Next тая ячейка И не {Туннель} или {Границы}
 
                spaceNum = InStrют вертикальное объединение
 
            CellText = TableKod.Cell(i, СolumnNextProc).Range.Text робела
                   ение ячейки
            CellText = Left$(CellText, (Len(CellText) - 2)) й
 
                hLinkAdressбных символа ячейки
 
            If Len(CellText) <> 0 And _
                SpecText <> Left$(CellText, 1) Then nk.Address 'определяем адрес гиперссылки
           уннель} или {Границы}
 
                spaceNum = InStr(1, CellText, " ") оцесс имеет ссылку
    о пробела
 
                KodText = Mid(CellText, 1, spaceNum - 1)                     ActiveDocuого пробела
 
                TableKod.Cell(i, СolumnNextProc).Range.Select hLinkAdress, _
      ячейкой
 
                hLinkAdress = "" nTip:="", _
                     адреса ссылки
 
                For Each hLink In Selection.Hyperlinks
                    hLinkAdress = hLink.Address 
End Sub
 
 
Function BookmarkIsс гиперссылки
                Next hLink
 
                If Len(hLinkAdress) <> 0 Then адка
 
BookmarkIs = False 'смеет ссылку
 
                    ument.Bookmarks 'перебираем все закладки чейки гиперссылкой
                    ActiveDocument.Hyperlinks.Add _
                        Anchor:=Selection.Range, _
                        Address:=hLinkAdress, _
 

Результат

Invalid Link
Рисунок 3. Вид данных, сформированных по необходимой привязке, в выполненном отчете в HTML-публикации после решения задачи макросом

 

Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki