This article provides an example of how to Find items in a limited context, i.e., not in the entire database. In this example, the result is to return all items of a specific item type based on the item type specified in the search criteria.

Example
private static void GetAllItemsWithSid(IswItem topItem, string wantedSid)
{
var visitedItemHandels = new HashSet<long>();
IswItems foundItems = topItem.Broker.Lists.NewItemList();
GetItemsWithSidRecursive(topItem, wantedSid, foundItems, visitedItemHandels);
}
private static void GetItemsWithSidRecursive(IswItem topItem,string wantedSid, IswItems foundItems, HashSet<long> visitedItemHandels)
{
//Read all parts that is connected to topItem
foreach(IswPart part in topItem.GetAllParts())
{
//Get the parts DefObj as IswItem
IswItem item = part.DefObj as IswItem;
//If part.DefObj isn't an IswItem go to next.
if (item != null)
{
//Since SystemWeaver allows cirkular references the program must control that the item isn't already visited
if (visitedItemHandels.Add(item.Handle))
{
//If the item is of the wanted SID save it in the foundItem list
if (item.IsSID(wantedSid))
foundItems.AddUnique(item);
//Do the same operation on this item as its owner
GetItemsWithSidRecursive(item, wantedSid, foundItems, visitedItemHandels);
}
}
// Do the same control on RefObj
item = part.RefObj as IswItem;
if (item != null)
{
if (visitedItemHandels.Add(item.Handle))
{
if (item.IsSID(wantedSid))
foundItems.AddUnique(item);
GetItemsWithSidRecursive(item, wantedSid, foundItems, visitedItemHandels);
}
}
}
}