В DXL команда #include
вычисляется до того, как будет оценена любая другая команда DXL (в основном, препроцессор берет только содержимое файла, на который есть ссылка, и заменяет строку, содержащую #include
, содержимым сценария.
Итак, фрагмент вроде
string a = ..read_some_value_from_a_file..
#include <{a}/whatever.inc>
не будет работать (ну, только внутри оператора eval_, но это слишком сложно)
Я думаю, что самый простой способ решить вашу проблему - вызвать Java-код перед запуском DOORS, а затем вызвать doors.exe с параметром -addins
, см. https://www -01.ibm.com / support /docview.wss?uid=swg21324525 и https://www -01.ibm.com / support / docview.wss? uid = swg21421641 для получения подробной информации и альтернатив. Кроме того, взгляните на резюме Луи Лэндейла по адресу https://www.ibm.com/developerworks/community/forums/html/topic?id=d43c725f-bd74-4c1a-88d5-51fdf8eed0b9, в котором также упоминаются переменные среды, которые вы можете использовать.
Обновление:
Некоторое время назад мы провели несколько тестов порядка поиска dxl-файлов, вот отрывок из скрипта.
string sCur = currentDirectory() ; buf += sCur ; buf += ";"
string sInst = (getenv "DOORSHOME") "\\lib\\dxl"; buf += sInst ; buf += ";"
string sAddinsCmd = (getenv "DOORSADDINS") ; buf += sAddinsCmd ; buf += ";"
string sAddins = (getenv "ADDINS") ; if (null sAddinsCmd) buf += sAddins; buf += ";"
string sProjectAddinsCmd = (getenv "DOORSPROJECTADDINS") ; buf += sProjectAddinsCmd; buf += ";"
string sProjectAddins = (getenv "PROJECTADDINS") ; if (null sProjectAddinsCmd) buf += sProjectAddins ; buf += ";"
Итак, если вы запускаете DOORS с помощью команд
C:\> D:
D:\> cd \temp
D:\temp> "c:\Program Files\IBM\DOORS\9.6\bin\doors.exe" -addins E:\scripts
и у вас есть оператор включения с относительным путем, то есть #include <src/lib/hello.inc>
, DOORS сначала пытается найти каталог src в D: \ temp, затем в c: \ Program Files \ IBM ... \ lib \ dxl, затем в E: \ scripts.
Если ваш оператор включения имеет абсолютный путь, то есть #include <c:/myscripts/lib/dxl/goodmorning.inc>
или #include <\\\\myservername\\myshare\\dxllib\\helloibm.inc>
, он будет выглядеть именно в этих местах.