<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.infopathdev.com:443/utility/FeedStylesheets/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>Newbie Questions</title><link>https://www.infopathdev.com:443/forums/39.aspx</link><description>New to InfoPath? Search to see if your question has already been answered. If it has not, then ask it here or the appropriate topic forum.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP3 (Build: 31118.962)</generator><item><title>Re: sorting repeating table</title><link>https://www.infopathdev.com:443/forums/thread/3848.aspx</link><pubDate>Fri, 02 Feb 2007 19:20:50 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:3848</guid><dc:creator>oz213</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/3848.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=39&amp;PostID=3848</wfw:commentRss><description>i tried that a while back with no luck. if you can get it going that would be great. thanks for checking it out.</description></item><item><title>Re: sorting repeating table</title><link>https://www.infopathdev.com:443/forums/thread/3847.aspx</link><pubDate>Wed, 31 Jan 2007 17:59:06 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:3847</guid><dc:creator>jackinthegreen</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/3847.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=39&amp;PostID=3847</wfw:commentRss><description>Check this out; it's targeting IP 2007 but I'm seeing if I can hack a 2003 solution fom it:&lt;br /&gt;&lt;br /&lt;a target="_blank" href=http://blogs.msdn.com/infopath/archive/2006/12/15/another-way-of-sorting-repeating-data.aspx&gt;http://blogs.msdn.com/infopath/archive/2006/12/15/another-way-of-sorting-repeating-data.aspx&lt;/a&gt;</description></item><item><title>Re: sorting repeating table</title><link>https://www.infopathdev.com:443/forums/thread/3846.aspx</link><pubDate>Thu, 18 Jan 2007 11:43:20 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:3846</guid><dc:creator>oz213</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/3846.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=39&amp;PostID=3846</wfw:commentRss><description>Thanks but I don't think that is going to help. Not sure what will at this moment.</description></item><item><title>Re: sorting repeating table</title><link>https://www.infopathdev.com:443/forums/thread/3845.aspx</link><pubDate>Thu, 18 Jan 2007 06:05:09 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:3845</guid><dc:creator>Shilpa Pitta</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/3845.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=39&amp;PostID=3845</wfw:commentRss><description>Hi, &lt;br /&gt;Check these links&lt;br /&lt;a target="_blank" href=http://www.infopathdev.com/howto/tutorials/default.aspx?i=075c4e8e56db4fa5bd63615b712c0d91&gt;http://www.infopathdev.com/howto/tutorials/default.aspx?i=075c4e8e56db4fa5bd63615b712c0d91&lt;/a&gt;&lt;br /&gt;&lt;br /&lt;a target="_blank" href=http://www.infopathdev.com/howto/tutorials/default.aspx?i=9f6fda3a14c14ac4924cf0a382928432&gt;http://www.infopathdev.com/howto/tutorials/default.aspx?i=9f6fda3a14c14ac4924cf0a382928432&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope this helps!</description></item><item><title>sorting repeating table</title><link>https://www.infopathdev.com:443/forums/thread/1800.aspx</link><pubDate>Wed, 17 Jan 2007 16:06:18 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:1800</guid><dc:creator>oz213</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/1800.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=39&amp;PostID=1800</wfw:commentRss><description>I'm new to Infopath and have built a form so that we can keep track of current jobs we are working on. This form has a repeating table to create categories and in that table, another repeating table to list the jobs in that category.&lt;br /&gt;&lt;br /&gt;My problem is...when i go to sort the jobs by the ones completed (used to Asset Tracking sample for code) the only category that sorts is the first one. When I try to sort the jobs in the second category it also just sorts category 1. &lt;br /&gt;&lt;br /&gt;The code I used is below. Does anyone know a way to sort only the current category you are in (button to sort is in a column header).&lt;br /&gt;&lt;br /&gt;//&amp;lt;namespacesDefinition&amp;gt;&lt;br /&gt;XDocument.DOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-06T19:05:06" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');&lt;br /&gt;//&amp;lt;/namespacesDefinition&amp;gt;&lt;br /&gt;&lt;br /&gt;// Counter used to create a unique key for each Asset.&lt;br /&gt;var g_iCounter = 1;&lt;br /&gt;&lt;br /&gt;// The relative XPath from &amp;lt;asset&amp;gt; to the element used for comparison.&lt;br /&gt;// It has value only when the sort is in progress.&lt;br /&gt;var g_xpathSortBy = "";&lt;br /&gt;&lt;br /&gt;// The nodes of double type should be compared as numbers, not as text.&lt;br /&gt;var g_parseAsNumber = false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*==============================================================================&lt;br /&gt;	Private functions&lt;br /&gt;==============================================================================*/&lt;br /&gt;&lt;br /&gt;function getValue(xmlNode)&lt;br /&gt;{&lt;br /&gt;	if (g_parseAsNumber &amp;&amp; !isInvalidOrEmpty(xmlNode))&lt;br /&gt;	{&lt;br /&gt;		var value = convertXMLNumberToJScript(xmlNode.nodeTypedValue);&lt;br /&gt;	&lt;br /&gt;		if (!isNaN(value))&lt;br /&gt;			return value;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	return xmlNode.text.toLowerCase();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function compareAssets(xmlAssetLeft, xmlAssetRight)&lt;br /&gt;{&lt;br /&gt;	var xmlLeft = xmlAssetLeft.selectSingleNode(g_xpathSortBy);&lt;br /&gt;	var xmlRight = xmlAssetRight.selectSingleNode(g_xpathSortBy);&lt;br /&gt;	&lt;br /&gt;	var valueLeft  = getValue(xmlLeft);&lt;br /&gt;	var valueRight = getValue(xmlRight);&lt;br /&gt;&lt;br /&gt;	if ((valueLeft &amp;lt; valueRight) || (typeof(valueLeft) == "number" &amp;&amp; typeof(valueRight) == "string"))&lt;br /&gt;		return -1;&lt;br /&gt;	else if ((valueLeft &amp;gt; valueRight) || (typeof(valueLeft) == "string" &amp;&amp; typeof(valueRight) == "number"))&lt;br /&gt;		return 1;&lt;br /&gt;	else&lt;br /&gt;		return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* =============================================================================&lt;br /&gt;	Node value operations&lt;br /&gt;============================================================================= */&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	isInvalidOrEmpty()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function isInvalidOrEmpty(xmlNode)&lt;br /&gt;{&lt;br /&gt;	// If there is no value, ignore it.&lt;br /&gt;	if (!xmlNode || !xmlNode.text)&lt;br /&gt;		return true;&lt;br /&gt;&lt;br /&gt;	// The caller can pass additional error types as optional arguments.&lt;br /&gt;	var aErrorTypes = new Array;&lt;br /&gt;	if (arguments.length &amp;gt; 1)&lt;br /&gt;	{&lt;br /&gt;		for (var i=1; i&amp;lt;arguments.length; i++)&lt;br /&gt;			aErrorTypes.push(arguments&lt;i&gt;);&lt;br /&gt;	}&lt;br /&gt;	else&lt;br /&gt;	{&lt;br /&gt;		aErrorTypes.push("SCHEMA_VALIDATION");&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	// If there is a validation error related to this node,&lt;br /&gt;	// then the node is invalid.&lt;br /&gt;	for (var i=0; i&amp;lt;XDocument.Errors.Count; i++)&lt;br /&gt;	{&lt;br /&gt;		var oError = XDocument.Errors(i);&lt;br /&gt;&lt;br /&gt;		if (xmlNode == oError.Node)&lt;br /&gt;		{&lt;br /&gt;			for (var j in aErrorTypes)&lt;br /&gt;			{&lt;br /&gt;				if (oError.Type == aErrorTypes[j])&lt;br /&gt;					return true;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	// Is valid (no error was found).&lt;br /&gt;	return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	getNodeValue()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function getNodeValue(xpath, defaultValue)&lt;br /&gt;{&lt;br /&gt;	var xmlNode = getNode(xpath);&lt;br /&gt;&lt;br /&gt;	if (isInvalidOrEmpty(xmlNode))&lt;br /&gt;		return (arguments.length &amp;gt; 1) ? defaultValue : "";&lt;br /&gt;	else&lt;br /&gt;		return xmlNode.text;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	getNode()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function getNode(xpath)&lt;br /&gt;{&lt;br /&gt;	// Both XML node and absolute XPath are allowed.&lt;br /&gt;	if (typeof(xpath) == "string")&lt;br /&gt;		return XDocument.DOM.selectSingleNode(xpath);&lt;br /&gt;	else&lt;br /&gt;		return xpath;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	getNodeList()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function getNodeList(xpath)&lt;br /&gt;{&lt;br /&gt;	// Both XML node and absolute XPath are allowed.&lt;br /&gt;	if (typeof(xpath) == "string")&lt;br /&gt;		return XDocument.DOM.selectNodes(xpath);&lt;br /&gt;	else&lt;br /&gt;		return xpath;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	count()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function count(xpath)&lt;br /&gt;{&lt;br /&gt;	var xmlNodeList = getNodeList(xpath);&lt;br /&gt;&lt;br /&gt;	if (xmlNodeList)&lt;br /&gt;		return xmlNodeList.length;&lt;br /&gt;	else&lt;br /&gt;		return -1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*------------------------------------------------------------------------------&lt;br /&gt;	sort()&lt;br /&gt;------------------------------------------------------------------------------*/&lt;br /&gt;function sort(xpathParent, xpathChildren, fnCompare)&lt;br /&gt;{&lt;br /&gt;	// Retrieve the parent node; all the children will be sorted.&lt;br /&gt;	var xmlOrigParent = getNode(xpathParent)&lt;br /&gt;	var xmlItems = xmlOrigParent.selectNodes(xpathChildren);&lt;br /&gt;&lt;br /&gt;	if (1 &amp;lt; count(xmlItems))&lt;br /&gt;	{&lt;br /&gt;		// Store the (pointers to) items in an array for faster access.&lt;br /&gt;		rgItems = new Array();&lt;br /&gt;		&lt;br /&gt;		while (xmlItem = xmlItems.nextNode())&lt;br /&gt;			rgItems.push(xmlItem);&lt;br /&gt;			&lt;br /&gt;		// Sort the array (the XML does not change).&lt;br /&gt;		rgItems.sort(fnCompare);&lt;br /&gt;&lt;br /&gt;		// Now that the array is sorted the DOM should be updated.&lt;br /&gt;		var xmlSortParent = xmlOrigParent.cloneNode(true);&lt;br /&gt;		var xmlClones = xmlSortParent.selectNodes(xpathChildren);&lt;br /&gt;		xmlClones.removeAll();&lt;br /&gt;		&lt;br /&gt;		// Update the nodelist, each item is moved only once.&lt;br /&gt;		// (each change is causing several notifications to be fired.)&lt;br /&gt;		for (var i=0; i&amp;lt;rgItems.length; i++)&lt;br /&gt;			xmlSortParent.appendChild(rgItems&lt;i&gt;.cloneNode(true));&lt;br /&gt;		&lt;br /&gt;		xmlOrigParent.parentNode.replaceChild(xmlSortParent, xmlOrigParent);&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;//=======&lt;br /&gt;// The following function handler is created by Microsoft Office InfoPath.&lt;br /&gt;// Do not modify the name of the function, or the name and number of arguments.&lt;br /&gt;//=======&lt;br /&gt;function btnSortChecked::OnClick(eventObj)&lt;br /&gt;{&lt;br /&gt;	// Avoid side effects when DOM is read only.&lt;br /&gt;	if (XDocument.IsDOMReadOnly)&lt;br /&gt;		return;&lt;br /&gt;&lt;br /&gt;	// It is used by comparison function, and to flag sort in progress.&lt;br /&gt;	// The generation of unique keys is suppressed while sort is in progress.&lt;br /&gt;	g_xpathSortBy = "my:Completed";&lt;br /&gt;	&lt;br /&gt;	if (!g_xpathSortBy)&lt;br /&gt;		return;&lt;br /&gt;&lt;br /&gt;	sort("/my:Job_Tracker/my:Category", "my:JobList", compareAssets);&lt;br /&gt;&lt;br /&gt;	// Unblock generation of unique keys.&lt;br /&gt;	g_xpathSortBy = "";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks for any help.&lt;br /&gt;</description></item></channel></rss>