>>and get all the links tied to it
How did you do that? i.e. which api did you use?
If you called changerequest.getLinks(), which returns a Link[], then you can ask each link to resolve itself to a ViewMember
(see Link.resolveParent(), link.resolveChild())
cast the parent (or child) to a file - the 'other end' is the ChangeRequest
and then call the api file.getFullName() (java) or file.FullName (C#)
If you called changeRequest.getTraces(boolean),
or ProcessItem.resolveEx(), both of which return a ViewMemberCollection,
walk the Collection, cast each ViewMember to is most derived type, e.g. File and then call
file.getFullName() (java) or file.FullName (C#)
Note that changerequest.getLinks() only returns historical old style Links, whereas changeRequest.getTraces(boolean) returns directly connected new style Traces and old style Links.
ProcessItem.resolveEx() returns direct links, traces and indirect link/trace resolution through change packages
(We implemented ProcessItem.resolveEx() at the request of your colleague Patrick Park, who is also an excellent resource on the subject)
Note also that the 13.0 SDK does not produce old style links any longer.