<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.aras.com/community/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>BOM Structure. Add a field</title><link>https://www.aras.com/community/f/development/38269/bom-structure-add-a-field</link><description>Good morning companions, I am trying to add a field to the &amp;quot;BOM Structure&amp;quot;, impossible, I can&amp;#39;t find the key. 
 
 
 In the form &amp;quot;Part MultiLevel BOM Grid&amp;quot; in &amp;quot;HTML Code&amp;quot; there is the function: 
 
 
 Which loads the Query.xml file. In that file is the</description><dc:language>ja-JP</dc:language><generator>Telligent Community 12</generator><item><title>RE: BOM Structure. Add a field</title><link>https://www.aras.com/community/thread/10184?ContentTypeID=1</link><pubDate>Fri, 01 Mar 2024 10:38:01 GMT</pubDate><guid isPermaLink="false">916d3f7e-8ddc-42f8-8d45-380822f51406:976137ee-67ec-48d4-a5d3-5ae04fb9169b</guid><dc:creator>AngelaIp</dc:creator><description>&lt;p&gt;Haha thanks!&amp;nbsp;&lt;span class="emoticon" data-url="https://www.aras.com/community/cfs-file/__key/system/emoji/1f605.svg" title="Sweat smile"&gt;&amp;#x1f605;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And congrats: You unlocked a new Innovator achievement by discovering the SQL ItemType.&lt;/p&gt;
&lt;p&gt;This one is not documented very well, but is commonly used.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;You are probably familiar with applySQL.&amp;nbsp;&lt;br /&gt;Instead of using applySQL, a more professional variant is to use SQL procedure and functions.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: BOM Structure. Add a field</title><link>https://www.aras.com/community/thread/10179?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 12:12:24 GMT</pubDate><guid isPermaLink="false">916d3f7e-8ddc-42f8-8d45-380822f51406:b82d33d0-0ec0-46b9-bd5d-053fe2a450ca</guid><dc:creator>FernandoCG</dc:creator><description>&lt;p&gt;Ohhh yeah!!!!.&lt;/p&gt;
&lt;p&gt;&lt;img style="height:102px;max-height:102px;max-width:154px;" height="102" src="/community/resized-image/__size/308x204/__key/communityserver-discussions-components-files/3/pastedimage1709208124671v1.png" width="153" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Thank you very much, it was there. I was blinded by the XML file and I didn&amp;#39;t see that call to that SQL procedure.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Although to be honest I had never seen or messed around with that part of ARAS. We keep learning!!!&lt;/p&gt;
&lt;p&gt;The most curious thing is that the field that I used to test, randomly, was already in the SQL, but it assigned a value to the name of the field.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/community/resized-image/__size/640x480/__key/communityserver-discussions-components-files/3/pastedimage1709206705746v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Too many thanks!!!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: BOM Structure. Add a field</title><link>https://www.aras.com/community/thread/10177?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 11:18:34 GMT</pubDate><guid isPermaLink="false">916d3f7e-8ddc-42f8-8d45-380822f51406:0b1aa234-279c-4b9c-8905-71be3b5c18b0</guid><dc:creator>AngelaIp</dc:creator><description>&lt;p&gt;You are one the right track, there is just something missing for the actual data. Have you check the SQL procedure &amp;quot;MultiBom_GetCompleteBom1&amp;quot;?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: BOM Structure. Add a field</title><link>https://www.aras.com/community/thread/10176?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 10:15:10 GMT</pubDate><guid isPermaLink="false">916d3f7e-8ddc-42f8-8d45-380822f51406:cb21deee-d496-45b9-91bd-981c0e779591</guid><dc:creator>FernandoCG</dc:creator><description>&lt;p&gt;Hello Angela, yes, here are some pics!!:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/community/resized-image/__size/640x480/__key/communityserver-discussions-components-files/3/pastedimage1709200217233v3.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="/community/resized-image/__size/640x480/__key/communityserver-discussions-components-files/3/pastedimage1709200460245v6.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/community/resized-image/__size/640x480/__key/communityserver-discussions-components-files/3/pastedimage1709200236924v4.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="/community/resized-image/__size/640x480/__key/communityserver-discussions-components-files/3/pastedimage1709200275598v5.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Code of this HTML:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="xml"&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
	@import &amp;quot;../public/styles/controls.css&amp;quot;;
	
	html, body {
		overflow: hidden;
		width: 100%;
		height: 100%;
		margin: 0px;
		padding: 0px;
	}
	.sys_f_container, .sys_f_table {
		width: 100%;
		height: 100%;
	}
&amp;lt;/style&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;../javascript/include.aspx?classes=XmlDocument&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
	var grid;
	var toolbar;

	var innovator = new top.Innovator();
	var partItemType = top.aras.getItemTypeForClient(&amp;quot;Part&amp;quot;, &amp;quot;name&amp;quot;);
	var Part_rowIcon = partItemType.getProperty(&amp;quot;open_icon&amp;quot;);
	var xmlFileBase = top.aras.getScriptsURL() + &amp;quot;../Solutions/PLM/xml/&amp;quot;;
	var xmlParentBase = top.aras.getScriptsURL() + &amp;quot;../Solutions/PLM/&amp;quot;;
	var currentUserID = top.aras.getCurrentUserID();

	top.aras.registerEventHandler(&amp;quot;ItemSave&amp;quot;, window, ItemSaveListener);

	window.onresize = fixGridHeight;

	function ItemSaveListener(params) {
		if (!document.thisItem || document.thisItem.getId() != params.itemID) {
			return;
		}
		initTree();
	}

	var onload_handler = function () {
	
		clientControlsFactory.createControl(&amp;quot;Aras.Client.Controls.Public.Toolbar&amp;quot;, { id: &amp;quot;bom_toolbar&amp;quot;, connectId: &amp;quot;toolbarContainer&amp;quot; }, function (control) {
				toolbar = control;
				clientControlsFactory.on(control, {&amp;quot;onClick&amp;quot;: onToolbarButtonClick});
				initToolbar();	
		});
			
		clientControlsFactory.createControl(&amp;quot;Aras.Client.Controls.Public.TreeGridContainer&amp;quot;,  {connectId: &amp;quot;grid&amp;quot;, canEdit_Experimental: function () { return false; }}, function(control) {
			grid = control;
			grid.setMultiselect(false);
			clientControlsFactory.on(grid, {
				&amp;quot;gridClick&amp;quot;: onGridClick,
				&amp;quot;gridDoubleClick&amp;quot;: onGridDoubleClick,
				&amp;quot;gridMenuInit&amp;quot;: onGridMenuInit,
				&amp;quot;gridMenuClick&amp;quot;: onGridMenuClick
			});
			initTree();
			fixGridHeight();
		});
	}


	function fixGridHeight() {
		var el = document.getElementById(&amp;quot;grid&amp;quot;);
		top.aras.fixLiquidContainerHeight(document, el);
	}

	window.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, onload_handler);

	function initTree() {
		if (!document.item) //View form in FormTool
		{
			return;
		}

		var resItem = innovator.newItem(&amp;quot;Part&amp;quot;, &amp;quot;PE_GetMultilBom&amp;quot;);
		resItem.setID(document.item.getAttribute(&amp;quot;id&amp;quot;));
		resItem = resItem.apply();
		if (resItem.isError()) {
			top.aras.AlertError(resItem.getErrorString());
			return;
		}

		grid.InitXML(resItem.getResult());
	}

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

	// ============================= Toolbar &amp;amp; Menu  Handlers ===============================

	function initToolbar() {
		document.toolbar = toolbar;
		toolbar.loadXml(top.aras.getI18NXMLResource(&amp;quot;MultiLevelBomToolbar.xml&amp;quot;, &amp;quot;../Solutions/PLM/&amp;quot;));
		toolbar.show();
	}

	function setControlEnabled(ctrlName, b) {
		if (!toolbar)
			return;

		if (b === undefined)
			b = true;
		else
			b = Boolean(b);

		var AT = toolbar.getActiveToolbar();
		var tbi = AT.getElement(ctrlName);
		if (tbi)
			tbi.setEnabled(b);
	}

	function onToolbarButtonClick(item) {
		var btnId = item.getId();
		if (&amp;quot;expandall&amp;quot; == btnId)
			onExpandAll();
		else if (&amp;quot;collapseall&amp;quot; == btnId)
			onCollapseAll();
		else if (&amp;quot;refresh&amp;quot; == btnId)
			initTree();
		else if (&amp;quot;open_row_item&amp;quot; == btnId)
			onOpenRowItem();
	}

	function onGridMenuInit(row, col, p) {
		var mnu = grid.getMenu();
		mnu.removeAll();
		mnu.add(&amp;quot;open_row_item&amp;quot;, &amp;quot;Open Item&amp;quot;);
		mnu.menu.startup();
	}

	function onGridMenuClick(menuChoice, rowId, col) {
		if (&amp;quot;open_row_item&amp;quot; == menuChoice)
			onOpenRowItem(rowId);
	}

	function onExpandAll() {
		grid.expandAll(true);
	}

	function onCollapseAll() {
		grid.expandAll(false);
	}

	function onGridDoubleClick(rowId) {
		onOpenRowItem(rowId);
	}

	function onGridClick(rowId, column) {
		setControlEnabled(&amp;quot;open&amp;quot;, true);
	}

	function onOpenRowItem(rowId) {
		if (!rowId)
			rowId = grid.getSelectedId();

		if (!rowId)
			return;

		var partId = grid.GetUserData(rowId, &amp;quot;gridData_rowItemID&amp;quot;)
		top.aras.uiShowItem(&amp;quot;Part&amp;quot;, partId);
	}
&amp;lt;/script&amp;gt;

&amp;lt;table class=&amp;quot;claro&amp;quot; style=&amp;quot;width: 100%; height: 100%; position: absolute; top: 0px; left: 0px;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;
	&amp;lt;tr style=&amp;quot;vertical-align: top;&amp;quot;&amp;gt;
		&amp;lt;td id=&amp;quot;toolbarContainer&amp;quot;&amp;gt;
		&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr style=&amp;quot;vertical-align: top;&amp;quot;&amp;gt;
		&amp;lt;td id=&amp;quot;grid&amp;quot; style=&amp;quot;width: 100%; height: 100%;&amp;quot;&amp;gt;
		&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In the line 75 calls to method PE_GetMultilBom.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Code of&amp;nbsp;PE_GetMultilBom:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="xml"&gt;		Innovator inn = this.getInnovator();

//System.Diagnostics.Debugger.Launch(); // fer

		if (!String.Equals(this.getType(), &amp;quot;Part&amp;quot;, StringComparison.Ordinal))
		    return inn.newError(&amp;quot;Item of type Part required&amp;quot;);
		
		string partId = this.getID();
		if (String.IsNullOrEmpty(partId))
		    return inn.newError(&amp;quot;Part ID not specified&amp;quot;);
		
		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&amp;lt;string, List&amp;lt;InfoOfItem&amp;gt;&amp;gt; dictAllItems;
	public List&amp;lt;InfoOfItem&amp;gt; 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&amp;lt;string, List&amp;lt;InfoOfItem&amp;gt;&amp;gt; dictItemProp = new Dictionary&amp;lt;string, List&amp;lt;InfoOfItem&amp;gt;&amp;gt;();
		List&amp;lt;InfoOfItem&amp;gt; zeroLevelItems = new List&amp;lt;InfoOfItem&amp;gt;();
		Item itemList = this.GetAllItems();
		
		int itemsCount = itemList.getItemCount();
		if (itemsCount == 0) return;
		
		for (int i = 0; i &amp;lt; itemsCount; i++)
		{
		    
		    
		    
			Item itm =  itemList.getItemByIndex(i);
			InfoOfItem infoOfItem = new InfoOfItem();
			infoOfItem.level = itm.getProperty(&amp;quot;level&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.id = itm.getProperty(&amp;quot;related_id&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.item_number = itm.getProperty(&amp;quot;related_item_number&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.revision = itm.getProperty(&amp;quot;related_revision&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.state = itm.getProperty(&amp;quot;related_state&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.sort_order = itm.getProperty(&amp;quot;sort_order&amp;quot;, &amp;quot;&amp;quot;);
			
//			infoOfItem.make_buy = itm.getProperty(&amp;quot;make_buy&amp;quot;, &amp;quot;&amp;quot;); // fer
			
			infoOfItem.quantity = itm.getProperty(&amp;quot;quantity&amp;quot;, &amp;quot;&amp;quot;);
			string lockedBY = itm.getProperty(&amp;quot;related_locked_by_id&amp;quot;, &amp;quot;&amp;quot;);
			if (lockedBY != &amp;quot;&amp;quot;)
				infoOfItem.lockedId = (lockedBY == this.thisUserID) ? &amp;quot;&amp;lt;img src=\&amp;quot;../images/LockedByMe.svg\&amp;quot; /&amp;gt;&amp;quot; : &amp;quot;&amp;lt;img src=\&amp;quot;../images/LockedByMe.svg\&amp;quot; /&amp;gt;&amp;quot;;
			else
				infoOfItem.lockedId = &amp;quot;&amp;lt;emptytag /&amp;gt;&amp;quot;;
				
			infoOfItem.name = itm.getProperty(&amp;quot;related_name&amp;quot;, &amp;quot;&amp;quot;);
			infoOfItem.brd = itm.getProperty(&amp;quot;bom_ref_desg&amp;quot;, &amp;quot;&amp;quot;);
			
//vamos con las pruebas
//Innovator innovator = this.getInnovator();
//var this_item = innovator.applyAML(&amp;quot;&amp;lt;AML&amp;gt;&amp;lt;Item type=&amp;#39;Part BOM&amp;#39; action=&amp;#39;get&amp;#39;&amp;gt;&amp;lt;id&amp;gt;&amp;quot;+infoOfItem.id+&amp;quot;&amp;lt;/id&amp;gt;&amp;lt;/Item&amp;gt;&amp;lt;/AML&amp;gt;&amp;quot;);
//infoOfItem.make_buy = this_item.getProperty(&amp;quot;make_buy&amp;quot;);

		
			if (infoOfItem.level == &amp;quot;0&amp;quot;) zeroLevelItems.Add(infoOfItem);
			
			string source_id = string.Empty;
			source_id = itm.getProperty(&amp;quot;source_id&amp;quot;, &amp;quot;&amp;quot;);
			
			if (source_id == &amp;quot;&amp;quot;) continue;
			
			List&amp;lt;InfoOfItem&amp;gt; dataOfItemList;
			
			dictItemProp.TryGetValue(source_id, out dataOfItemList);
			if (dataOfItemList != null)
			{
				dataOfItemList.Add(infoOfItem);
			}
			else
			{
				List&amp;lt;InfoOfItem&amp;gt; datList = new List&amp;lt;InfoOfItem&amp;gt;();
				datList.Add(infoOfItem);
				dictItemProp.Add(source_id, datList);
			}
		}
		
		dictOfData.dictAllItems = dictItemProp;
		dictOfData.zeroLevelItems = zeroLevelItems;
	}
	
	private Item GetAllItems()
	{
		Item callframe = item.newItem(&amp;quot;SQL&amp;quot;, &amp;quot;SQL PROCESS&amp;quot;);
		callframe.setProperty(&amp;quot;name&amp;quot;, &amp;quot;MultiBom_GetCompleteBom1&amp;quot;);
		callframe.setProperty(&amp;quot;PROCESS&amp;quot;, &amp;quot;CALL&amp;quot;);
		callframe.setProperty(&amp;quot;ARG1&amp;quot;, item.getID());
		
		return callframe.apply();
	}
}

class GetMultiBom
{
	private const String InnovatorCCOUID = &amp;quot;PE_GetRelatedParts_InnovatorCCO&amp;quot;;
	
	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&amp;lt;string, List&amp;lt;InfoOfItem&amp;gt;&amp;gt; dictAllItems = dictOfData.dictAllItems;
		List&amp;lt;InfoOfItem&amp;gt; zeroLevelItems = dictOfData.zeroLevelItems;
		
		StringBuilder itemStylesheet = new StringBuilder();
		this.GetBaseTamplate(itemStylesheet);
		
		if (dictAllItems != null &amp;amp;&amp;amp; dictAllItems.Count != 0)
		{
			foreach(InfoOfItem parentItem in zeroLevelItems)
			{
				this.GetParsedData(parentItem, 0, itemStylesheet, dictAllItems);
			}
		}
		itemStylesheet.Append(&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;);
		return itemStylesheet.ToString();
	}
	
	private string Escape(string data)
	{
		return System.Security.SecurityElement.Escape(data);
	}
	
	private void GetParsedData(InfoOfItem iof, int level, StringBuilder itemStylesheet, Dictionary&amp;lt;string, List&amp;lt;InfoOfItem&amp;gt;&amp;gt; dictAllItems)
	{
		List&amp;lt;InfoOfItem&amp;gt; dataOfItemList;
		if (level.ToString() != iof.level) return;
		itemStylesheet.Append(&amp;quot;&amp;lt;tr level=\&amp;quot;&amp;quot;);
		itemStylesheet.Append(Escape(iof.level));
		itemStylesheet.Append(&amp;quot;\&amp;quot; icon0=\&amp;quot;../images/Part.svg\&amp;quot; icon1=\&amp;quot;../images/Part.svg\&amp;quot;&amp;gt;&amp;lt;userdata key=\&amp;quot;gridData_rowItemID\&amp;quot; value=\&amp;quot;&amp;quot;);
		itemStylesheet.Append(Escape(iof.id));
		itemStylesheet.Append(&amp;quot;\&amp;quot; /&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.item_number));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.revision));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.state));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.sort_order));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.quantity));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		
		itemStylesheet.Append(Escape(iof.make_buy));  //fer
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);    //fer
		
		itemStylesheet.Append(iof.lockedId);
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.name));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot;);
		itemStylesheet.Append(Escape(iof.brd));
		itemStylesheet.Append(&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;);
		level++;
		if (dictAllItems.TryGetValue(iof.id, out dataOfItemList))
		{
			foreach (InfoOfItem childBom in dataOfItemList)
				GetParsedData(childBom, level, itemStylesheet, dictAllItems);
		}
		
		itemStylesheet.Append(&amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;);
	}
	
	private void GetBaseTamplate(StringBuilder gridStyle)
	{
		Aras.Server.Core.CallContext CCO = this.GetCCO();
		gridStyle.Append(&amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;utf-8\&amp;quot;?&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;&amp;lt;table&amp;quot;);
		gridStyle.Append(&amp;quot; font=\&amp;quot;Microsoft Sans Serif-8\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; sel_bgColor=\&amp;quot;steelbue\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; sel_TextColor=\&amp;quot;white\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; header_BgColor=\&amp;quot;buttonface\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; expandroot=\&amp;quot;true\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; expandall=\&amp;quot;false\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; treelines=\&amp;quot;1\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; editable=\&amp;quot;false\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; draw_grid=\&amp;quot;true\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; multiselect=\&amp;quot;true\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; column_draggable=\&amp;quot;true\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; enableHtml=\&amp;quot;false\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; enterAsTab=\&amp;quot;false\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; bgInvert=\&amp;quot;true\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; xmlns:msxsl=\&amp;quot;urn:schemas-microsoft-com:xslt\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; xmlns:aras=\&amp;quot;http://www.aras.com\&amp;quot;&amp;quot;);
		gridStyle.Append(&amp;quot; xmlns:usr=\&amp;quot;urn:the-xml-files:xslt\&amp;quot;&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;thead&amp;gt;&amp;quot;);                                         
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;4F1AC04A2B484F3ABA4E20DB63808A88&amp;quot;, &amp;quot;item_number&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;4F1AC04A2B484F3ABA4E20DB63808A88&amp;quot;, &amp;quot;major_rev&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;4F1AC04A2B484F3ABA4E20DB63808A88&amp;quot;, &amp;quot;state&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;5E9C5A12CC58413A8670CF4003C57848&amp;quot;, &amp;quot;sort_order&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;5E9C5A12CC58413A8670CF4003C57848&amp;quot;, &amp;quot;quantity&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;4F1AC04A2B484F3ABA4E20DB63808A88&amp;quot;, &amp;quot;make_buy&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);  //fer
		
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;450906E86E304F55A34B3C0D65C097EA&amp;quot;, &amp;quot;locked_by_id&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;4F1AC04A2B484F3ABA4E20DB63808A88&amp;quot;, &amp;quot;name&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;th align=\&amp;quot;c\&amp;quot;&amp;gt;&amp;quot; + CCO.Cache.GetPropertyFromCache(&amp;quot;5E9C5A12CC58413A8670CF4003C57848&amp;quot;, &amp;quot;reference_designator&amp;quot;).GetAttribute(&amp;quot;label&amp;quot;) + &amp;quot;&amp;lt;/th&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;/thead&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;columns&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;220\&amp;quot; edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;l\&amp;quot; order=\&amp;quot;0\&amp;quot; /&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;40\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;1\&amp;quot; /&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;90\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;2\&amp;quot; /&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;70\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;3\&amp;quot; sort=\&amp;quot;numeric\&amp;quot;/&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;70\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;4\&amp;quot; sort=\&amp;quot;numeric\&amp;quot;/&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;40\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;5\&amp;quot; /&amp;gt;&amp;quot;);
        gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;40\&amp;quot;  edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;c\&amp;quot; order=\&amp;quot;6\&amp;quot; /&amp;gt;&amp;quot;);		
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;250\&amp;quot; edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;l\&amp;quot; order=\&amp;quot;7\&amp;quot; /&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot;  &amp;lt;column width=\&amp;quot;100\&amp;quot; edit=\&amp;quot;NOEDIT\&amp;quot;  align=\&amp;quot;l\&amp;quot; order=\&amp;quot;8\&amp;quot; /&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;/columns&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;menu&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; 	&amp;lt;emptytag/&amp;gt;&amp;quot;);
		gridStyle.Append(&amp;quot; &amp;lt;/menu&amp;gt;&amp;quot;);
	&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;i added the field &amp;quot;make_buy&amp;quot;, it appears in the grid but without any data.&lt;/p&gt;
&lt;p&gt;In the HTML code of &amp;quot;Part MultiLevel BOM Grid&amp;quot; i see that call a xml file, in the line 89:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;treeLoadXml.load(xmlFileBase + &amp;quot;query.xml&amp;quot;);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Code of query.xml:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="xml"&gt;&amp;lt;Item type=&amp;quot;Part&amp;quot; select=&amp;quot;name, item_number, locked_by_id, major_rev, state, make_buy&amp;quot; action=&amp;quot;GetItemRepeatConfig&amp;quot;&amp;gt;
	&amp;lt;Relationships&amp;gt;
     		&amp;lt;Item type=&amp;quot;Part BOM&amp;quot; select=&amp;quot;related_id, quantity, sort_order, reference_designator&amp;quot; repeatProp=&amp;quot;related_id&amp;quot; repeatTimes=&amp;quot;0&amp;quot;&amp;gt;
			&amp;lt;related_id&amp;gt;
				&amp;lt;Item type=&amp;quot;Part&amp;quot;&amp;gt;&amp;lt;/Item&amp;gt;
			&amp;lt;/related_id&amp;gt;
		&amp;lt;/Item&amp;gt;
	&amp;lt;/Relationships&amp;gt;
&amp;lt;/Item&amp;gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I added &amp;quot;make_buy&amp;quot; to the AML code.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The problem in that never enters to the function that contain it,&amp;nbsp;line 86.&lt;/p&gt;
&lt;p&gt;It never enters that function, so I can&amp;#39;t load the data and of course, then I can&amp;#39;t take that data.&lt;/p&gt;
&lt;p&gt;You must prepare the data elsewhere.&lt;/p&gt;
&lt;p&gt;Now that I&amp;#39;m thinking about it, I didn&amp;#39;t restart the server when I made the changes to the XML file.&lt;/p&gt;
&lt;p&gt;PS: yes, my nightmare is not ARAS INNOVATOR; It&amp;#39;s the version of ******* that I&amp;#39;m using, hahaha. I tried to update to version SP10 or SP11, but it gives errors and does not finish updating. We are talking to a company that will budget us for an update. But I don&amp;#39;t have much faith.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Thank you very much.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: BOM Structure. Add a field</title><link>https://www.aras.com/community/thread/10159?ContentTypeID=1</link><pubDate>Tue, 27 Feb 2024 10:36:56 GMT</pubDate><guid isPermaLink="false">916d3f7e-8ddc-42f8-8d45-380822f51406:b8bc8fdd-eac3-4b26-9d93-f52eab7bac12</guid><dc:creator>AngelaIp</dc:creator><description>&lt;p&gt;Hi Meupe,&lt;/p&gt;
&lt;p&gt;this question would be easy to answer - if it would not be Innovator 11 :).&lt;/p&gt;
&lt;p&gt;I cannot remember if the BOM structure was database or codetree based. But as far as I remembered I added a &amp;quot;minor_rev&amp;quot; column in the past.&lt;/p&gt;
&lt;p&gt;Can you make a screenshot of the Realtionship View tab? What is used there to render the view? You mentioned the F&lt;span&gt;orm &amp;quot;Part MultiLevel BOM Grid&amp;quot;. Is this one linked?&amp;nbsp;I expected something in the &amp;quot;Start Page&amp;quot; column.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>