As described here Configuring the Lookup for a Data Set Field [AX 2012] you can change how lookup look like. What you can also do you can range to the lookup to show i.e. only rooms which are in service. Following X++ shows how to achieve this:
void dataSetLookup(SysDataSetLookup sysDataSetLookup)
{
List list = new List(Types::String);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange qbr;
// Add the table to the query.
queryBuildDataSource = query.addDataSource(tableNum(FCMRooms));
// Specify the fields to use for the lookup.
list.addEnd(fieldStr(FCMRooms,RoomName));
list.addEnd(fieldStr(FCMRooms,RoomType));
list.addEnd(fieldStr(FCMRooms,InService));
// Supply the set of lookup fields.
sysDataSetLookup.parmLookupFields(list);
// Specify the field that is returned from the lookup.
sysDataSetLookup.parmSelectField(‘RoomName’);
//add the range
qbr = queryBuildDataSource.addRange( fieldnum(FCMRooms, InService));
qbr.value(NoYes::Yes);
//if we don’t want user to be able to change range we need to lock it
qbr.status(RangeStatus::Locked);
// Pass the query to the SysDataSetLookup so that the query is used.
sysDataSetLookup.parmQuery(query);
}
We need to lock the range in order user is unable to change the range. Otherwise if user in search will specify RoomName “Cubicle 8” (when inService == No) it will still appear because the range will be simply overwritten.