The following snippets show two ways to remove parts using the SystemWeaver API.


Setting Up the Example

            IswLibrary library = SWConnection.Instance.Broker.GetLibrary(SWHandleUtility.ToHandle("x13000000000DEFA0"));

            // Create a component
            string componentSid = "ARAP";
            IswItem component = library.CreateItem(componentSid, "Component");

            // Create two interfaces
            string interfaceSid = "ARSI";
            IswItem interfaceItem1 = library.CreateItem(interfaceSid, "Interface1");
            IswItem interfaceItem2 = library.CreateItem(interfaceSid, "Interface2");

            // Add the interfaces as parts to the component. This is done twice to illustrate two different ways of removing a part.
            string partSid = "ARRP";
            component.AddPart(partSid, interfaceItem1);
            component.AddPart(partSid, interfaceItem1);
            component.AddPart(partSid, interfaceItem2);
            component.AddPart(partSid, interfaceItem2);


Option 1

Remove first part of type "ARRP" found for intefaceItem1.

            IswPart partToRemove1 = component.FindDefObjPart(partSid, interfaceItem1);

            // If any part found.Try to remove it.
            if( partToRemove1 != null)
            {
                // Check if you have write access for the part. 
                // This can also be done on the Item that owns the part since their access rights are equivalent.  
                if (partToRemove1.ObjectAccess.Contains(SWAccessCodes.Write))
                {
                    // Remove the part. The part's DefObj is left in the database.
                    partToRemove1.Remove();
                }
            }


Option 2

Remove all parts of type "ARRP" found for intefaceItem2.

            foreach (IswPart partToRemove2 in component.GetParts(partSid))
            {                
                if (partToRemove2.DefObj.Equals(interfaceItem2))
                {
                    // Check if you have write access for the part. 
                    // This can also be done on the Item that owns the part since their access rights are equivalent.
                    if (partToRemove2.ObjectAccess.Contains(SWAccessCodes.Write))
                    {
                        // Remove the part. The part's DefObj is left in the database.
                        partToRemove2.Remove();
                    }
                }
            }