18.02.2014

WebADI: правка LDT вручную

Функционал интегратора OeBS, прямо скажем, не совершенен.
Глюки, с которыми сталкивался я:
  • быстрее и проще создать интегратор с нуля, чем править уже имеющийся. При удалении объектов интегратора не удаляются внутренние связи, и если удалить, например, один контент и создать новый под другим именем, мэппинг будет упорно ссылаться на старый;
  • если в интеграторе нет ошибок, это ещё не значит, что он будет корректно выполнять свою задачу. Это касается, например, добавления новых колонок в шаблон и интерфейсную таблицу. Колонки созданы, изменения в интерфейсе, мэппинге и контенте проведены, шаблон выгружается и загружается нормально, но данные просто не попадают в таблицу. Никаких ошибок, никакого результата;
  • при создании разметки полей документа двигать их по одному, пока не добьешься нужного порядка - занятие неэффективное, но другого инструмента BNE не предоставляет. Почему бы не выводить окошко с номером сразу для всех колонок? Здесь глюк был в том, что если спускать колонку сверху вниз, то на середине пути она замирает и не реагирует на нажатия кнопок "вверх", "вниз".
Итак, когда у нас есть большой и сложный интегратор, а нам нужно туда добавить несколько колонок, можно поправить LDT вручную. Программа действий:
1. Добавление атрибутов в интерфейс
BEGIN BNE_INTERFACE_COLS "2" //увеличивать это число
      OWNER = "ANONYMOUS"
      OBJECT_VERSION_NUMBER = "2"
      INTERFACE_COL_TYPE = "1"
      INTERFACE_COL_NAME = "LOAD_CODE"
      ENABLED_FLAG = "Y"
      REQUIRED_FLAG = "N"
      DISPLAY_FLAG = "Y"
      READ_ONLY_FLAG = "N"
      NOT_NULL_FLAG = "N"
      SUMMARY_FLAG = "N"
      MAPPING_ENABLED_FLAG = "Y"
      DATA_TYPE = "1"
      FIELD_SIZE = "22"
      DEFAULT_TYPE = "PARAMETER"
      DEFAULT_VALUE = "XXIP361_CODE"
      VAL_COMPONENT = "" ""
      DISPLAY_ORDER = "2" //увеличивать это число
      PROMPT_LEFT = "Код загрузки"
      PROMPT_ABOVE = "LOAD_CODE"
      LAST_UPDATE_DATE = "2013/05/24"
      VAL_QUERY = "" ""
      EXPANDED_SQL = "" ""
    END BNE_INTERFACE_COLS 
2. Добавление атрибутов в контент
BEGIN BNE_CONTENT_COLS "3" //увеличивать это число
      OBJECT_VERSION_NUMBER = "1"
      OWNER = "ANONYMOUS"
      COL_NAME = "PROJECT_CODE"
      USER_NAME = "PROJECT_CODE"
      LAST_UPDATE_DATE = "2013/05/24"
      READ_ONLY_FLAG = "N"
    END BNE_CONTENT_COLS
3. Правка таблицы BNE_STORED_SQL. Запрос апдейтим напрямую, добавив новые поля интерфейсной таблицы.
4. Добавление атрибутов в мэппинг BNE_MAPPING_LINES (внимательно!)
BEGIN BNE_MAPPING_LINES "2"  //увеличиваем это число
      INTERFACE_ASN = "XXMY"
      INTERFACE_CODE = "XXMY_LOAD_X_INTF1"
      INTERFACE_SEQ_NUM = "12"  //ID атрибута интерфейса
      OWNER = "ANONYMOUS"
      DECODE_FLAG = "N"
      OBJECT_VERSION_NUMBER = "1"
      CONTENT_ASN = "XXRT"
      CONTENT_CODE = "XXMY_LOAD_CNT2"
      CONTENT_SEQ_NUM = "2"    //ID атрибута контента
      LAST_UPDATE_DATE = "2013/05/24"
    END BNE_MAPPING_LINES
5. Добавление атрибутов в LAYOUT (внимательно!)
BEGIN BNE_LAYOUT_COLS "520"  //увеличиваем число с шагом в 10
        OWNER = "APANIN"
        OBJECT_VERSION_NUMBER = "1"
        INTERFACE_ASN = "XXMY"
        INTERFACE_CODE = "XXMY_LOAD_X_INTF1"
        INTERFACE_SEQ_NUM = "45" //ID атрибута интерфейса
        DISPLAY_WIDTH = "15"
        LAST_UPDATE_DATE = "2014/02/13"
        READ_ONLY_FLAG = "N"
      END BNE_LAYOUT_COLS
После этих манипуляций интегратор должен работать с новыми колонками.
Порядок столбцов в формируемом документе excel можно узнать запросом:
with col_order as
 (select intr.interface_col_name, col.sequence_num
    from BNE_LAYOUTS_B        lay,
         BNE_LAYOUT_BLOCKS_B  blo,
         BNE_LAYOUT_COLS      col,
         BNE_INTERFACE_COLS_B intr
   where lay.layout_code = blo.layout_code
     and blo.layout_code = col.layout_code
     and blo.block_id = col.block_id
     and intr.sequence_num = col.interface_seq_num
     and intr.interface_code = 'XXMY_LOAD_X_INTF1'
     and lay.layout_code = 'XXMY_CORRECT_LOAD'
     and blo.block_id = 2  //номер блока (1 - шапка документа)
   order by col.sequence_num)
select co.interface_col_name, co.sequence_num from col_order co;
Для изменения порядка делаем апдейт таблицы BNE_LAYOUT_COLS.