воскресенье, 31 октября 2010 г.

Переносим объект из одного проекта ODI в другой.

Созданная в прошлом посте копия проекта W_Project1 поможет провести эксперимент по переносу объектов из одного проекта в другой. Если мы попробуем использовать переменную Variable1 из проекта W_Project1 в пакете проекта W_Project2 Дизайнер сообщит об ошибке:


Если необходимо использовать переменную из одного проекта в другом проекте, придется создать такую же переменную во втором проекте. Обычно, это не трудно. Достаточно перенести sql код обновления переменной и правильно установить тип и вид переменной.

А если необходимо использовать процедуру из десятка-другого шагов выполнения, копировать каждый шаг будет не очень быстрой процедурой. Моя попытка дуплицирования процедуры и последуюшего перетаскивания ее в другой проект тоже не завершилась успехом:


Чтобы перенести объект из одного проекта в другой необходимо использовать возможность ODI экспортировать и импортировать объекты через xml файлы.

Рассмотрим этот процесс подробнее.
Тестовая процедура для проверки создана в проекте W_Project1:


Попробуем сделать экспорт этой процедуры, удалим ее, а потом вставим в тот же проект при помощи импорта.


Особенности экспорта:
  • экспорт производится в локальную папку на той рабочей станции, с которой запущен Дизайнер;
  • папка для экспорта уже должна существовать;
  • файл со сгенерированным в формате xml описанием процедуры имеет вид TRT_имяпроцедуры.xml

Затем удалим процедуру и попробуем импортировать ее в наш проект:


Особенности импорта:
  • необходимо выбрать ту же папку на диске, куда мы производили экспорт;
  • необходимо выбрать из переченя файлов тот, в котором сохранена наша процедура;
  • необходимо выбрать тип импорта из четырех вариантов: дуплицирование, вставка, обновление, вставка-обновление (Duplication, Synonym Mode INSERT, Synonym Mode UPDATE, Synonym Mode INSERT_UPDATE).

У меня был выбран режим вставки-обновления, его и оставил. В итоге процедура успешной импортирована, но с ней произошло следующее:


Текст описания, который был введен кирилицей, после импорта превратился в последовательность вопросительных знаков. Так как проблемы русской кодировки мы уже решали, сверяемся со списком кодировок и ищем необходимые нам названия.

Попробуем повторить ту же последовательность действий, обновив предварительно описание процедуры, но укажем следующие кодировки при экспорте процедуры:


После удаления и импорта процедуры из файла с кодировкой будет все нормально:


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


После импорта процедура не появилась. После нескольких проб вида: {повторить экспорт, повторить импорт, подумать} - я обнаружил причину. Все дело в режиме импорта. Покажу, в чем тут дело, на примерах:


  1. Режим дуплицирования (Duplication).
    Первый импорт добавляет процедуру к процедурам папки, повторный - создает копию процедуры в той же папке, как и при обычном дуплицировании:


  2. Режим вставки (INSERT).
    При импорте вставкой, даже если импортировать в папку проекта W_Project2, процедура добавляется в проекта W_Project1!. Повторный импорт не приводит к дуплицированию процедуры.
    Если процедура после первого импорта была модифицирована, то она обновится. Что странно, так как такое поведение должно быть при режиме UPDATE:




  3. Режим обновления (UPDATE).
    В данном режиме результаты такие же, как и в предыдущем случае. Т.е. даже при импорте в папку во втором проекте процедура обновляется в первом проекте. Добавляется только такое окно предупреждения:





  4. Режим вставки-обновления (INSERT_UPDATE).
    Абсолютно аналогичное поведение, как и в режиме импорта UPDATE.



Выводы. Чтобы перенести процедуру из одного проекта в другой обязательно необходимо:
  1. Правильно указать кодировку при экспорте.
  2. При импорте обязательно выбрать режим дуплицирования (Duplication).

Комментариев нет:

Отправить комментарий