2016-08-10 4 views
1

Это код в DXLПротиворечивые связь между объектами

string path = "blablabla..."; 
Module mod = read(path, false); 

Object obj = object(1337, mod); 

string nameObject; 
Object objectObject; 
Link lnk_in; 
Link lnk_out; 

print "The objects for IN links:\n"; 
for lnk_in in obj <- "*" do 
{ 
    nameObject = source(lnk_in); 
    objectObject = source(lnk_in); 
    print identifier(objectObject) " " ; 
    print nameObject "_" objectObject."Absolute Number" "\n"; 
} 

print "\nThe objects for OUT links:\n"; 
for lnk_out in obj -> "*" do 
{ 
    nameObject = target(lnk_out); 
    objectObject = target(lnk_out); 
    print identifier(objectObject) " "; 
    print nameObject "_" objectObject."Absolute Number" "\n"; 
} 

В основном он заинтересован в печати объектов, связанных с нашим объектом OBJ что имеет данные абсолютное число, равное 1337. Я выбрал тщательно этот объект, чтобы он имел как внутренние, так и внешние связи с другими объектами. Однако, несмотря на простоту, у меня есть некоторые проблемы.

На своем собственном, выходы сценария:

The objects for IN links: 

The objects for OUT links: 
-R-E- DXL: <Line:25> null Object parameter was passed into argument position 1 
-I- DXL: execution halted 

Как вы можете заметить, существует серьезная проблема. Сценарий не возвращает внутренние объекты, несмотря на то, что obj имеет связанные внутренние объекты. В то время как для выходных ссылок я заметил, что nameObject действительно возвращает строковое имя объекта, но objectObject - это нуль.

Если второй для изменяется на:

print "\nThe objects for OUT links:\n"; 
for lnk_out in obj -> "*" do 
{ 
    nameObject = target(lnk_out); 
    objectObject = target(lnk_out); 
    //print identifier(objectObject) " "; 
    print nameObject "\n"; 
    print nameObject "_" objectObject."Absolute Number" "\n"; 
} 

выход становится:

The objects for OUT links: 
etc...System_Req...etc 
-R-E- DXL: <Line:27> null Object parameter was passed into argument position 1 
-I- DXL: execution halted 

Что бы быть проблема? Это не должно быть так.

ответ

1

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

Когда вы перебираете ссылки, у вас есть доступ к атрибутам самой ссылки, например. target (объекта типа), модуль (модуля типа). Итак, вам нужно открыть целевой модуль перед тем, как получить доступ к целевому объекту.

Для inlinks это даже немного сложнее, так как модуль сохраняет только ссылки. В ссылках не хранятся в модуле. Вместо этого у вас есть LinkRefs, который вы также можете использовать для открытия исходного модуля, тогда у вас есть доступ к ссылкам и исходным объектам.

Я предлагаю создать два столбца макета DXL, используя мастер анализа ссылок, один для входящих ссылок, один для исходящих ссылок. Код, созданный мастером, показывает вам, как получить доступ к этим атрибутам.

Имейте в виде, что следующие ссылки на исходные линии еще один шаг сложнее, так как вы должны открыть («нагрузку») правильную базовую линию (см «версированы ссылки» в руководстве DXL)

Есть также многочисленные сообщения о ссылках на форуме Rational DXL по адресу https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000001527, поиск таких терминов, как LinkRef, showOut, showIn

+0

Из того, что я тестировал, кажется, что с помощью мастера анализа это действительно помогло мне вывести правильные значения. –

Смежные вопросы