Dear Tom,
Officially Info*Engine is the way to query IBAs; however we do write code to do it using SearchConditions, for example a custom search page like this one and you want to add together a number of IBA and other queries to make one very large query to get the data you need.
The IBA is held in two connected tables
e.g.
StringValue and StringDefinition
IntegerValue and IntegerDefinition
etc.
So if we say wanted to query for *MYVALUE* in all IBAs that are called "myibaname" we need to use this code
QuerySpec queryspec = new QuerySpec();
int defindex = queryspec.addClassList(StringDefinition.class,false);
int valueindex = queryspec.addClassList(StringValue.class,true);
queryspec.appendWhere(new SearchCondition(StringDefinition.class, StringDefinition.NAME, SearchCondition.EQUAL , "myibaname"),defindex );
queryspec.appendAnd();
queryspec.appendWhere(new SearchCondition(StringValue.class, StringValue.VALUE, "%MYVALUE%"),valueindex );
queryspec.appendAnd();
thisQuerySpec.appendWhere(new SearchCondition(StringDefinition.class,"thePersistInfo.theObjectIdentifier.id" , StringValue.class,"definitionReference.key.id"), new int[] { defindex ,valueindex });
// Now you need to add the link to the business object
// and get only the data you actually ned
*Coded from memory so no warranty!
Note the String has VALUE and VALUE2 one is always upper case. Again as Dave said a real gray area and gets quickly very complicated, and very easy to write some poor server stopping queries
Best Regards,
Simon