BOM Structure. Add a field

Good morning companions,
I am trying to add a field to the "BOM Structure", impossible, I can't find the key.

In the form "Part MultiLevel BOM Grid" in "HTML Code" there is the function:

function getItemTree(itemID, queryLevel) {
debugger;
		var treeLoadXml = top.aras.createXMLDocument();
		treeLoadXml.load(xmlFileBase + "query.xml");
		if (treeLoadXml.parseError.errorCode != 0) {
			var loadError = treeLoadXml.parseError;
			top.aras.AlertError("You have error:\n" + loadError.reason);
			return;
		}
		var partBom = treeLoadXml.selectSingleNode("Item/Relationships/Item[@repeatTimes]");
		partBom.setAttribute("repeatTimes", queryLevel);

		var query = innovator.newItem();
		query.loadAML(treeLoadXml.xml);
		query.setID(itemID);
		var results = query.apply();
		if (results.isError()) {
			top.aras.AlertError(results.getErrorString());
			return;
		}
		return results;
	}

Which loads the Query.xml file. In that file is the AML that loads the data:

<Item type="Part" select="name,item_number,locked_by_id,major_rev,state,make_buy" action="GetItemRepeatConfig">
	<Relationships>
     		<Item type="Part BOM" select="related_id,quantity,sort_order,reference_designator" repeatProp="related_id" repeatTimes="0">
			<related_id>
				<Item type="Part"></Item>
			</related_id>
		</Item>
	</Relationships>
</Item>

It seems simple, but no. The function that loads the XML file with the AML code never enters it. I have even deleted the file from the server and it continues to show the same data.

I have managed to add the column to the grid, but I don't know where to add the field from which the value should be taken.

Any ideas?. Keep in mind that I use Version 11.0 SP9 which does not have TGV or anything at all.

This is the code of the method "PE_GetMultilBom":

		Innovator inn = this.getInnovator();
		
		if (!String.Equals(this.getType(), "Part", StringComparison.Ordinal))
		    return inn.newError("Item of type Part required");
		
		string partId = this.getID();
		if (String.IsNullOrEmpty(partId))
		    return inn.newError("Part ID not specified");
		
		DictsForMultiBom dictOfData = new DictsForMultiBom();
		
		GetDataForParsing getDataForParsing = new GetDataForParsing(inn.getUserID(), this);
		getDataForParsing.SetDataToDict(dictOfData);
				
		GetMultiBom ret = new GetMultiBom(CCO);		
		string parsedData4Return = ret.GetCompleteBom(dictOfData);
		
		return inn.newResult(parsedData4Return);
	}
}

class DictsForMultiBom
{
	public Dictionary<string, List<InfoOfItem>> dictAllItems;
	public List<InfoOfItem> zeroLevelItems;
}

class InfoOfItem
{
	public string level;
	public string id;
	public string item_number;
	public string revision;
	public string state;
	public string sort_order;
	public string quantity;
	public string lockedId;
	public string name;
	public string brd;
	
	public string make_buy; //fer
}

class GetDataForParsing
{
	private string thisUserID;
	private Item item;
	
	public GetDataForParsing(string userId, Item part)
	{
		this.thisUserID = userId;
		this.item = part;
	}
	
	public void SetDataToDict(DictsForMultiBom dictOfData)
	{
		Dictionary<string, List<InfoOfItem>> dictItemProp = new Dictionary<string, List<InfoOfItem>>();
		List<InfoOfItem> zeroLevelItems = new List<InfoOfItem>();
		Item itemList = this.GetAllItems();
		
		int itemsCount = itemList.getItemCount();
		if (itemsCount == 0) return;
		
		for (int i = 0; i < itemsCount; i++)
		{
			Item itm =  itemList.getItemByIndex(i);
			InfoOfItem infoOfItem = new InfoOfItem();
			infoOfItem.level = itm.getProperty("level", "");
			infoOfItem.id = itm.getProperty("related_id", "");
			infoOfItem.item_number = itm.getProperty("related_item_number", "");
			infoOfItem.revision = itm.getProperty("related_revision", "");
			infoOfItem.state = itm.getProperty("related_state", "");
			infoOfItem.sort_order = itm.getProperty("sort_order", "");
			
			infoOfItem.make_buy = itm.getProperty("make_buy", ""); // fer
			
			infoOfItem.quantity = itm.getProperty("quantity", "");
			string lockedBY = itm.getProperty("related_locked_by_id", "");
			if (lockedBY != "")
				infoOfItem.lockedId = (lockedBY == this.thisUserID) ? "<img src=\"../images/LockedByMe.svg\" />" : "<img src=\"../images/LockedByMe.svg\" />";
			else
				infoOfItem.lockedId = "<emptytag />";
			infoOfItem.name = itm.getProperty("related_name", "");
			infoOfItem.brd = itm.getProperty("bom_ref_desg", "");
			
			if (infoOfItem.level == "0") zeroLevelItems.Add(infoOfItem);
			
			string source_id = string.Empty;
			source_id = itm.getProperty("source_id", "");
			
			if (source_id == "") continue;
			
			List<InfoOfItem> dataOfItemList;
			
			dictItemProp.TryGetValue(source_id, out dataOfItemList);
			if (dataOfItemList != null)
			{
				dataOfItemList.Add(infoOfItem);
			}
			else
			{
				List<InfoOfItem> datList = new List<InfoOfItem>();
				datList.Add(infoOfItem);
				dictItemProp.Add(source_id, datList);
			}
		}
		
		dictOfData.dictAllItems = dictItemProp;
		dictOfData.zeroLevelItems = zeroLevelItems;
	}
	
	private Item GetAllItems()
	{
		Item callframe = item.newItem("SQL", "SQL PROCESS");
		callframe.setProperty("name", "MultiBom_GetCompleteBom1");
		callframe.setProperty("PROCESS", "CALL");
		callframe.setProperty("ARG1", item.getID());
		
		return callframe.apply();
	}
}

class GetMultiBom
{
	private const String InnovatorCCOUID = "PE_GetRelatedParts_InnovatorCCO";
	
	public GetMultiBom(Aras.Server.Core.CallContext CCO)
	{
		HttpContext.Current.Items[InnovatorCCOUID] = CCO;
	}
	
	private Aras.Server.Core.CallContext GetCCO()
	{
		return (Aras.Server.Core.CallContext)HttpContext.Current.Items[InnovatorCCOUID];
	}
	
	public string GetCompleteBom(DictsForMultiBom dictOfData)
	{
		Dictionary<string, List<InfoOfItem>> dictAllItems = dictOfData.dictAllItems;
		List<InfoOfItem> zeroLevelItems = dictOfData.zeroLevelItems;
		
		StringBuilder itemStylesheet = new StringBuilder();
		this.GetBaseTamplate(itemStylesheet);
		
		if (dictAllItems != null && dictAllItems.Count != 0)
		{
			foreach(InfoOfItem parentItem in zeroLevelItems)
			{
				this.GetParsedData(parentItem, 0, itemStylesheet, dictAllItems);
			}
		}
		itemStylesheet.Append("</table>");
		return itemStylesheet.ToString();
	}
	
	private string Escape(string data)
	{
		return System.Security.SecurityElement.Escape(data);
	}
	
	private void GetParsedData(InfoOfItem iof, int level, StringBuilder itemStylesheet, Dictionary<string, List<InfoOfItem>> dictAllItems)
	{
		List<InfoOfItem> dataOfItemList;
		if (level.ToString() != iof.level) return;
		itemStylesheet.Append("<tr level=\"");
		itemStylesheet.Append(Escape(iof.level));
		itemStylesheet.Append("\" icon0=\"../images/Part.svg\" icon1=\"../images/Part.svg\"><userdata key=\"gridData_rowItemID\" value=\"");
		itemStylesheet.Append(Escape(iof.id));
		itemStylesheet.Append("\" /><td>");
		itemStylesheet.Append(Escape(iof.item_number));
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.revision));
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.state));
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.sort_order));
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.quantity));
		itemStylesheet.Append("</td><td>");
		
		itemStylesheet.Append(Escape(iof.make_buy));  //fer
		itemStylesheet.Append("</td><td>");    //fer
		
		itemStylesheet.Append(iof.lockedId);
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.name));
		itemStylesheet.Append("</td><td>");
		itemStylesheet.Append(Escape(iof.brd));
		itemStylesheet.Append("</td>");
		level++;
		if (dictAllItems.TryGetValue(iof.id, out dataOfItemList))
		{
			foreach (InfoOfItem childBom in dataOfItemList)
				GetParsedData(childBom, level, itemStylesheet, dictAllItems);
		}
		
		itemStylesheet.Append("</tr>");
	}
	
	private void GetBaseTamplate(StringBuilder gridStyle)
	{
		Aras.Server.Core.CallContext CCO = this.GetCCO();
		gridStyle.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
		gridStyle.Append("<table");
		gridStyle.Append(" font=\"Microsoft Sans Serif-8\"");
		gridStyle.Append(" sel_bgColor=\"steelbue\"");
		gridStyle.Append(" sel_TextColor=\"white\"");
		gridStyle.Append(" header_BgColor=\"buttonface\"");
		gridStyle.Append(" expandroot=\"true\"");
		gridStyle.Append(" expandall=\"false\"");
		gridStyle.Append(" treelines=\"1\"");
		gridStyle.Append(" editable=\"false\"");
		gridStyle.Append(" draw_grid=\"true\"");
		gridStyle.Append(" multiselect=\"true\"");
		gridStyle.Append(" column_draggable=\"true\"");
		gridStyle.Append(" enableHtml=\"false\"");
		gridStyle.Append(" enterAsTab=\"false\"");
		gridStyle.Append(" bgInvert=\"true\"");
		gridStyle.Append(" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\"");
		gridStyle.Append(" xmlns:aras=\"http://www.aras.com\"");
		gridStyle.Append(" xmlns:usr=\"urn:the-xml-files:xslt\">");
		gridStyle.Append(" <thead>");                                         
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("4F1AC04A2B484F3ABA4E20DB63808A88", "item_number").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("4F1AC04A2B484F3ABA4E20DB63808A88", "major_rev").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("4F1AC04A2B484F3ABA4E20DB63808A88", "state").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("5E9C5A12CC58413A8670CF4003C57848", "sort_order").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("5E9C5A12CC58413A8670CF4003C57848", "quantity").GetAttribute("label") + "</th>");
		
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("4F1AC04A2B484F3ABA4E20DB63808A88", "make_buy").GetAttribute("label") + "</th>");  //fer
		
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("450906E86E304F55A34B3C0D65C097EA", "locked_by_id").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("4F1AC04A2B484F3ABA4E20DB63808A88", "name").GetAttribute("label") + "</th>");
		gridStyle.Append("  <th align=\"c\">" + CCO.Cache.GetPropertyFromCache("5E9C5A12CC58413A8670CF4003C57848", "reference_designator").GetAttribute("label") + "</th>");
		gridStyle.Append(" </thead>");
		gridStyle.Append(" <columns>");
		gridStyle.Append("  <column width=\"220\" edit=\"NOEDIT\"  align=\"l\" order=\"0\" />");
		gridStyle.Append("  <column width=\"40\"  edit=\"NOEDIT\"  align=\"c\" order=\"1\" />");
		gridStyle.Append("  <column width=\"90\"  edit=\"NOEDIT\"  align=\"c\" order=\"2\" />");
		gridStyle.Append("  <column width=\"70\"  edit=\"NOEDIT\"  align=\"c\" order=\"3\" sort=\"numeric\"/>");
		gridStyle.Append("  <column width=\"70\"  edit=\"NOEDIT\"  align=\"c\" order=\"4\" sort=\"numeric\"/>");
		gridStyle.Append("  <column width=\"40\"  edit=\"NOEDIT\"  align=\"c\" order=\"5\" />");
        gridStyle.Append("  <column width=\"40\"  edit=\"NOEDIT\"  align=\"c\" order=\"6\" />");		
		gridStyle.Append("  <column width=\"250\" edit=\"NOEDIT\"  align=\"l\" order=\"7\" />");
		gridStyle.Append("  <column width=\"100\" edit=\"NOEDIT\"  align=\"l\" order=\"8\" />");
		gridStyle.Append(" </columns>");
		gridStyle.Append(" <menu>");
		gridStyle.Append(" 	<emptytag/>");
		gridStyle.Append(" </menu>");
	

Too many thanks!!!!