<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Introduce a new tab in WTDocument Page in Windchill Customization</title>
    <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851681#M2225</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/390417"&gt;@Sha11&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You need to define own JSP page and crate action definition in the customAction and customActionModel&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;definition in customAction&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;&amp;lt;objecttype name="MYACTIONS"&amp;gt;
		&amp;lt;action name="ownJSPPageTab"  &amp;gt;
			&amp;lt;component name="cz.aveng.NewDocTab.DetailTabBuilder" windowType="page" /&amp;gt;
		&amp;lt;/action&amp;gt;
	&amp;lt;/objecttype&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;Put the action to the customActionModel to show in the document tab menu&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;third_level_nav_doc&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;   &amp;lt;model name="third_level_nav_doc" defaultActionName="iterationHistory" defaultActionType="history"&amp;gt;
       &amp;lt;submodel name="general"/&amp;gt;
       &amp;lt;submodel name="relatedItems"/&amp;gt;
       &amp;lt;submodel name="changes"/&amp;gt;
       &amp;lt;submodel name="history"/&amp;gt;
       &amp;lt;submodel name="collaboration"/&amp;gt;
       &amp;lt;submodel name="security3rdnav"/&amp;gt;                &amp;lt;!-- Security --&amp;gt;
       &amp;lt;submodel name="configLinks"/&amp;gt;
       &amp;lt;submodel name="thingworxCustomizeMenu"/&amp;gt;
       &amp;lt;submodel name="quality"/&amp;gt;
       &amp;lt;action name="ownJSPPageTab" type="MYACTIONS"/&amp;gt;
   &amp;lt;/model&amp;gt;
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="HelesicPetr_0-1674650064107.png" style="width: 400px;"&gt;&lt;img src="https://www.ptcusercommunity.com/t5/image/serverpage/image-id/74961i8116B763ADF6BC9E/image-size/medium?v=v2&amp;amp;px=400" role="button" title="HelesicPetr_0-1674650064107.png" alt="HelesicPetr_0-1674650064107.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the builder class&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;package cz.aveng.NewDocTab;

import com.ptc.mvc.components.*;
import org.apache.logging.log4j.Logger;
import wt.util.WTException;

@ComponentBuilder(value = "cz.aveng.NewDocTab.DetailTabBuilder", type = ComponentBuilderType.CONFIG_AND_DATA)
public class DetailTabBuilder extends AbstractComponentBuilder
{
	protected static Logger logger = ShowChangesInBOMLogger.GetShowChangesInBOMLogger();

	@Override
	public ComponentConfig buildComponentConfig(ComponentParams componentParams) throws WTException
	{
		MultiComponentConfig multiComp = new MultiComponentConfig();
		//multiComp.addNestedComponent("cz.aveng.AVChangeInBOM.AVFilterBuilder");
		multiComp.addNestedComponent("cz.aveng.NewDocTab.TreeBuilder");
		multiComp.setView("/cz/aveng/NewDocTab/DetailTabBuilder.jsp");

		return multiComp;
	}

	@Override
	public Object buildComponentData(ComponentConfig componentConfig, ComponentParams componentParams) throws Exception
	{
		return null;
	}
}
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NestedComponent is definition of table or attribute panel builder..&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PetrH&lt;/P&gt;</description>
    <pubDate>Wed, 25 Jan 2023 12:36:46 GMT</pubDate>
    <dc:creator>HelesicPetr</dc:creator>
    <dc:date>2023-01-25T12:36:46Z</dc:date>
    <item>
      <title>Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851658#M2224</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to introduce a new tab under a specific type of WTDocument page and populate it with some of the attributes, could you shed some light on how to approach this requirement?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Sha&lt;/P&gt;</description>
      <pubDate>Fri, 15 Mar 2024 14:03:19 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851658#M2224</guid>
      <dc:creator>Sha11</dc:creator>
      <dc:date>2024-03-15T14:03:19Z</dc:date>
    </item>
    <item>
      <title>Re: Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851681#M2225</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/390417"&gt;@Sha11&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You need to define own JSP page and crate action definition in the customAction and customActionModel&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;definition in customAction&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;&amp;lt;objecttype name="MYACTIONS"&amp;gt;
		&amp;lt;action name="ownJSPPageTab"  &amp;gt;
			&amp;lt;component name="cz.aveng.NewDocTab.DetailTabBuilder" windowType="page" /&amp;gt;
		&amp;lt;/action&amp;gt;
	&amp;lt;/objecttype&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;Put the action to the customActionModel to show in the document tab menu&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;third_level_nav_doc&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;   &amp;lt;model name="third_level_nav_doc" defaultActionName="iterationHistory" defaultActionType="history"&amp;gt;
       &amp;lt;submodel name="general"/&amp;gt;
       &amp;lt;submodel name="relatedItems"/&amp;gt;
       &amp;lt;submodel name="changes"/&amp;gt;
       &amp;lt;submodel name="history"/&amp;gt;
       &amp;lt;submodel name="collaboration"/&amp;gt;
       &amp;lt;submodel name="security3rdnav"/&amp;gt;                &amp;lt;!-- Security --&amp;gt;
       &amp;lt;submodel name="configLinks"/&amp;gt;
       &amp;lt;submodel name="thingworxCustomizeMenu"/&amp;gt;
       &amp;lt;submodel name="quality"/&amp;gt;
       &amp;lt;action name="ownJSPPageTab" type="MYACTIONS"/&amp;gt;
   &amp;lt;/model&amp;gt;
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="HelesicPetr_0-1674650064107.png" style="width: 400px;"&gt;&lt;img src="https://www.ptcusercommunity.com/t5/image/serverpage/image-id/74961i8116B763ADF6BC9E/image-size/medium?v=v2&amp;amp;px=400" role="button" title="HelesicPetr_0-1674650064107.png" alt="HelesicPetr_0-1674650064107.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the builder class&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;package cz.aveng.NewDocTab;

import com.ptc.mvc.components.*;
import org.apache.logging.log4j.Logger;
import wt.util.WTException;

@ComponentBuilder(value = "cz.aveng.NewDocTab.DetailTabBuilder", type = ComponentBuilderType.CONFIG_AND_DATA)
public class DetailTabBuilder extends AbstractComponentBuilder
{
	protected static Logger logger = ShowChangesInBOMLogger.GetShowChangesInBOMLogger();

	@Override
	public ComponentConfig buildComponentConfig(ComponentParams componentParams) throws WTException
	{
		MultiComponentConfig multiComp = new MultiComponentConfig();
		//multiComp.addNestedComponent("cz.aveng.AVChangeInBOM.AVFilterBuilder");
		multiComp.addNestedComponent("cz.aveng.NewDocTab.TreeBuilder");
		multiComp.setView("/cz/aveng/NewDocTab/DetailTabBuilder.jsp");

		return multiComp;
	}

	@Override
	public Object buildComponentData(ComponentConfig componentConfig, ComponentParams componentParams) throws Exception
	{
		return null;
	}
}
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;NestedComponent is definition of table or attribute panel builder..&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PetrH&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2023 12:36:46 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851681#M2225</guid>
      <dc:creator>HelesicPetr</dc:creator>
      <dc:date>2023-01-25T12:36:46Z</dc:date>
    </item>
    <item>
      <title>Re: Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851687#M2226</link>
      <description>&lt;P&gt;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/241117"&gt;@HelesicPetr&lt;/a&gt;&amp;nbsp; - Thank you for the info, will try to implement by following your steps. Could you let me know if there is any article or link which could provide more information on the implementation that you have mentioned?&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2023 12:44:43 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851687#M2226</guid>
      <dc:creator>Sha11</dc:creator>
      <dc:date>2023-01-25T12:44:43Z</dc:date>
    </item>
    <item>
      <title>Re: Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851690#M2227</link>
      <description>&lt;P&gt;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/390417"&gt;@Sha11&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;JSP Example&amp;gt;&lt;/P&gt;
&lt;LI-CODE lang="javascript"&gt;&amp;lt;%@ page import="java.util.List" %&amp;gt;
&amp;lt;%@ page import="java.util.ArrayList" %&amp;gt;
&amp;lt;%@ page import="wt.lifecycle.LifeCycleTemplate" %&amp;gt;
&amp;lt;%@ page import="wt.lifecycle.LifeCycleHelper" %&amp;gt;
&amp;lt;%@ page import="java.util.Vector" %&amp;gt;
&amp;lt;%@ page import="wt.lifecycle.State" %&amp;gt;
&amp;lt;%@ page import="wt.fc.Persistable" %&amp;gt;
&amp;lt;%@ page import="com.ptc.netmarkets.model.NmOid" %&amp;gt;
&amp;lt;%@ page import="wt.part.WTPart" %&amp;gt;
&amp;lt;%@ page import="wt.lifecycle.LifeCycleManaged" %&amp;gt;
&amp;lt;%@ taglib uri="http://www.ptc.com/windchill/taglib/jcaMvc" prefix="mvc"%&amp;gt;
&amp;lt;%@ taglib prefix="wrap" uri="http://www.ptc.com/windchill/taglib/wrappers" %&amp;gt;


&amp;lt;%@include file="/netmarkets/jsp/util/begin_comp.jspf"%&amp;gt;
&amp;lt;mvc:tree/&amp;gt;
&amp;lt;%@ include file="/netmarkets/jsp/util/end_comp.jspf"%&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PetrH&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2023 12:46:42 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851690#M2227</guid>
      <dc:creator>HelesicPetr</dc:creator>
      <dc:date>2023-01-25T12:46:42Z</dc:date>
    </item>
    <item>
      <title>Re: Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851697#M2228</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/390417"&gt;@Sha11&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;generally use a Windchill help center and custom documentation from Windchill&lt;/P&gt;
&lt;P&gt;adress to the windchill&lt;/P&gt;
&lt;P&gt;&lt;A href="https://werverAdress.comp.com//Windchill/app/#ptc1/componentCatalog/componentCatalog?oid=OR%3Awt.org.WTUser%3A207&amp;amp;u8=1" target="_blank" rel="noopener"&gt;https://werverAdress.comp.com/Windchill/app/#ptc1/componentCatalog/componentCatalog?oid=OR%3Awt.org.WTUser%3A207&amp;amp;u8=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;specific example is in windchill&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://werverAdress.comp.com/Windchill/app/#ptc1/tcomp/infoPage?typeIdForTypeLookup=com.ptc.carambola.customization.examples.infoPage.Carambola" target="_self"&gt;https://werverAdress.comp.com/Windchill/app/#ptc1/tcomp/infoPage?typeIdForTypeLookup=com.ptc.carambola.customization.examples.infoPage.Carambola&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;and&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://werverAdress.comp.com//Windchill/app/#ptc1/comp/carambola.AboutInfoPageExample?portlet=poppedup" target="_self"&gt;https://werverAdress.comp.com//Windchill/app/#ptc1/comp/carambola.AboutInfoPageExample?portlet=poppedup&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;help Attribute panel&lt;/P&gt;
&lt;P&gt;&lt;A href="https://support.ptc.com/help/windchill/r12.1.2.0/en/#page/Windchill_Help_Center/customization/WCCG_UICust_CustHTMLClients_AttrPanel.html#" target="_blank" rel="noopener"&gt;https://support.ptc.com/help/windchill/r12.1.2.0/en/#page/Windchill_Help_Center/customization/WCCG_UICust_CustHTMLClients_AttrPanel.html#&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PetrH&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2023 13:26:59 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851697#M2228</guid>
      <dc:creator>HelesicPetr</dc:creator>
      <dc:date>2023-01-25T13:26:59Z</dc:date>
    </item>
    <item>
      <title>Re: Introduce a new tab in WTDocument Page</title>
      <link>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851700#M2229</link>
      <description>&lt;P&gt;I forgot mention very important point.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You should create own Validation class where you check if the action should be shown in the detailpage of your WTDocument subtype&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;definition in customaction&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;&amp;lt;action name="ownJSPPageTab"  &amp;gt;
&amp;lt;component name="cz.aveng.NewDocTab.DetailTabBuilder" windowType="page" /&amp;gt;
&amp;lt;includeFilter name="hideDocValidator"/&amp;gt;
&amp;lt;/action&amp;gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;definition in service.properties&lt;/P&gt;
&lt;P&gt;wt.services/svc/default/com.ptc.core.ui.validation.SimpleValidationFilter/hideDocValidator/null/0=cz.aveng.NewDocTab.DocValidator/duplicate&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;this validator hide the action if the subtype document is not "DOCINTERNALSUBSTRING" internal name ends with this string&lt;/P&gt;
&lt;P&gt;validator class&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="java"&gt;package cz.aveng.NewDocTab;

import com.ptc.core.ui.validation.DefaultSimpleValidationFilter;
import com.ptc.core.ui.validation.UIValidationCriteria;
import com.ptc.core.ui.validation.UIValidationKey;
import com.ptc.core.ui.validation.UIValidationStatus;
import wt.fc.Persistable;
import wt.fc.WTReference;
import wt.type.TypedUtilityServiceHelper;
import wt.util.WTException;
import wt.wvs.WVSLogger;

import java.rmi.RemoteException;

public class DocValidator extends DefaultSimpleValidationFilter
{
	private static final WVSLogger logger = WVSLogger.getLogger(DocValidator.class, "cz.aveng.DocValidator");

	public DocValidator()
	{
	}

	public UIValidationStatus preValidateAction(UIValidationKey valKey, UIValidationCriteria criteria)
	{
		UIValidationStatus validatioNStatus = UIValidationStatus.ENABLED;
		WTReference contextObject = criteria.getContextObject();
		if (contextObject != null)
		{
			Persistable persistObject = contextObject.getObject();
			String subtypeString = null;
			try
			{
				// get object type 
				subtypeString = TypedUtilityServiceHelper.service.getExternalTypeIdentifier(persistObject);

				//
				if (!subtypeString.endsWith("DOCINTERNALSUBSTRING"))
				{
					validatioNStatus = UIValidationStatus.HIDDEN;
				}
			} catch (WTException | RemoteException e)
			{
				e.printStackTrace();
			}
		}

		logger.debug("Exit DocValidator.preValidateAction()  status=" + validatioNStatus);
		return validatioNStatus;
	}
}
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PetrH&lt;/P&gt;</description>
      <pubDate>Wed, 25 Jan 2023 13:12:11 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Windchill-Customization/Introduce-a-new-tab-in-WTDocument-Page/m-p/851700#M2229</guid>
      <dc:creator>HelesicPetr</dc:creator>
      <dc:date>2023-01-25T13:12:11Z</dc:date>
    </item>
  </channel>
</rss>

