How can load the class name from the available child class details
Hi Team, I want to get the class name from the child (subclass)deatils. We have part & document as a class for the base class Item. I have sublass called “XYZ” and details of it like number, type etc , i am able to read it. But in my code i need to check for only Part type class not the Document type. Since i am reading the CO first to get Affected Item and iterate to get item deatils. while iteration only i want to check that the Affected item is of Document type and skip its check in my code. below code is available in the user guide . But i do not want to check it from the admin user deatils. IAgileClass[] classes = m_admin.getAgileClasses(IAdmin.CONCRETE); for (int i = 0; i < classes.length; i++) { if (classes[i].getTargetType() == IItem.OBJECT_TYPE) { System.out.println(“Class Name : ” + classes[i].getName()); System.out.println(“ID : ” + classes[i].getId()); } } }
Personally, I usually check this by fetching the IAgileClass of the affected item, and then using the isSubclassOf method:
ITable affectedItems = ichg.getTable(ChangeConstants.TABLE_AFFECTEDITEMS);
Iterator it = affectedItems.Iterator();
while(it.hasNext()){
IRow row =(IRow)it.next()
IAgileClass subcls = row.getReferent().getAgileClass();
if(subcls.isSubclassOf("Documents"){
//ignore
else if(subcls.isSubclassOf("Parts"){
//DoSomething
}
}
// This was added to the Actions menu of an Item. Groovy script. // How to come up with a single, unique list of all components in a BOM, including all levels. import com.agile.agileDSL.ScriptObj.IBaseScriptObj; import com.agile.agileDSL.ScriptObj.AgileDSLException; import com.agile.api.*; import java.util.*; import com.agile.px.IEventInfo; import com.agile.px.EventConstants; // import com.agile.px.IWFChangeStatusEventInfo; import com.agile.px.IObjectEventInfo; import java.util.*; import java.util.regex.*; import java.time.*; import java.time.format.DateTimeFormatter; import javax.activation.*; void invokeScript(IBaseScriptObj obj) { IAgileSession session = obj.getAgileSDKSession(); IEventInfo req = obj.getPXEventInfo(); int v_bomcnt = 0; try { IDataObject dataObject = eventInfo.getDataObject(); IAgileClass relObjectClass = dataObject.getAgileClass(); str_class = relObjectClass.getName(); obj.logMonitor("The subclass of the Items class is: " + str_class); IItem pitem = dataObject; String partnbr = (String) pitem.getValue(ItemConstants.ATT_TITLE_BLOCK_NUMBER); // ----- Look at the BOM Table ITable tblBom = pitem.getTable(ItemConstants.TABLE_BOM); Iterator bomit = tblBom.iterator(); IRow bomrow = null; while(bomit.hasNext()) { bomrow = (IRow)bomit.next(); v_bomcnt = v_bomcnt + 1; } if( v_bomcnt > 0 ) { ArrayList compList = []; // https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html ArrayList compListT = []; // compList will become an array of every component from every level of the BOM, and as a unique list of item numbers. compListT = explodeBOM(obj, pitem, 1, compListT); for( String cmTmpVala : compListT ) { if ( compList.contains( cmTmpVala )) { // do not add duplicate value } else { compList.add(cmTmpVala); } } // Output to the History tab of your item, a list of unique item numbers that are in the BOM of the top level parent. for( String abcValue : compList ) { obj.logMonitor("BOM component: " + abcValue ); } } catch (MessagingException ex) { ex.printStackTrace(); obj.logMonitor(ex.getMessage()); // throw new AgileDSLException(ex); } } // // ------ explodeBOM ------ // private static ArrayList explodeBOM(IBaseScriptObj obj, IItem item, int level, ArrayList cmList) throws APIException { // This will look at the BOM for an item and add the components to an array named cmList. IRow row; String bomNumber; ITable table = item.getTable(ItemConstants.TABLE_BOM); Iterator it = table.iterator(); int addFlag = 1; while (it.hasNext()) { row = (IRow)it.next(); bomNumber = (String)row.getValue(ItemConstants.ATT_BOM_ITEM_NUMBER); obj.logMonitor("level: " + (String)level + " part: " + bomNumber); cmList.add(bomNumber); IItem bomItem = (IItem)row.getReferent(); // This is a recursive routine. It calls itself. This way we can explode the BOM for every level. A full BOM explosion. // The end result will be a unique list of all the component item numbers, from every level, appended to the array named cmList. // We may end up with duplicate part numbers added to the array, but we will remove the dups later cmList = explodeBOM(obj, bomItem, level + 1, cmList); // recursive call, add 1 to go to next BOM level } return (cmList); }
In my post above, I forgot to define eventInfo. Add this:
try { if (req instanceof IObjectEventInfo) { eventInfo = (IObjectEventInfo)req; } else { obj.logMonitor("req IS NOT AN instanceof IObjectEventInfo"); } if (eventInfo!=null) { IDataObject dataObject = eventInfo.getDataObject(); IAgileClass relObjectClass = dataObject.getAgileClass(); :