Focal Point Banner


As of December 1, 2020, Focal Point is retired and repurposed as a reference repository. We value the wealth of knowledge that's been shared here over the years. You'll continue to have access to this treasure trove of knowledge, for search purposes only.

New TIBCO Community Coming Soon
In early summer, TIBCO plans to launch a new community—with a new user experience, enhanced search, and expanded capabilities for member engagement with answers and discussions! In advance of that, the current myibi community will be retired on April 30. We will continue to provide updates here on both the retirement of myibi and the new community launch.

What You Need to Know about Our New Community
We value the wealth of knowledge and engagement shared by community members and hope the new community will continue cultivating networking, knowledge sharing, and discussion.

During the transition period, from April 20th until the new community is launched this summer, myibi users should access the TIBCO WebFOCUS page to engage.


Focal Point    Focal Point Forums  Hop To Forum Categories  WebFOCUS/FOCUS Forum on Focal Point     [SOLVED] Reusing an XML hold file between Web Pages

Read-Only Read-Only Topic
Go
Search
Notify
Tools
[SOLVED] Reusing an XML hold file between Web Pages
 Login/Join
 
Silver Member
posted
I am using chained list boxes on an HTML pages. However, the dataset is large (over 6000 departments in 25 organizations) and takes over four minutes to populate. This is mainly due to DBMS security processing. I would like to be able to populate an XML file once, and reuse it as a data source between different HTML pages. Once the browser is closed, I would need the XML file cleaned up. I started looking at AJAX, but I don't know if that would be the way to go.
I have searched other posts in this forum but couldn't find anything that would help. Is there some way to save a temp file to the user's PC that would be available to all requests in a session?

This message has been edited. Last edited by: Kerry,


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
Guru
posted Hide Post
Here's one reference that might help. There are more if you search for 'keep temp files'.

Check this reference



Greg



current client: WF 8.1.05 & 8.2 - Windows 7 64bit - Tomcat 7 - MRE / BID - IE11

local: WF 8.2 - Windows 7 64bit - Tomcat 6 - MRE / BID - FOCUS - IE11

PMF 8
 
Posts: 274 | Location: Boston/New England | Registered: February 12, 2006Report This Post
Silver Member
posted Hide Post
Thanks Greg, I did get some useful information on that thread, among others I found with those keywords. I was able to create a temp directory on the server using the users ID (captured by javascript on the logon page) and create a focus hold file (userID_value.foc).

However, userID_value.foc is 8.5 MB. This still takes a substantial amount of time to download to the client. So, I am now looking at creating a client-side hold file that I can reuse between pages. I believe I can use the ActiveXObject("Scripting.FileSystemObject") to generate flat files and use those to populate the listboxes. I am not sure if chaining supports flat files so I may also need to write my own routines to populate them.

I will be working on this so I will post a follow-up soon in case my solution can help others.


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
Silver Member
posted Hide Post
I have found my solution and I would like to post it here, since others may benefit from this. You will need to know WebFOCUS, HTML and JavaScript to use it.

Here are the benefits:
Cut the HTML page initial load time from 10 minutes to 10 seconds.
Much, much faster response for chained listboxes.

Here are the drawbacks:
Only works in IE due to ActiveX controls.
Requires that the user add the server's base URL to IE's Trusted Zone. It is also advisable to set the Trusted Zone to Low Level security to avoid those annoying ActiveX prompts on every page.

There are really three steps here:

---- 1 -----
Capture the login ID from the login page. This will allow multiple users to use the same machine, and stores the local file for each as [USERID].txt.
This requires some hidden controls:




I added some javascript to assign the login ID to RUSER.
<script type="text/javascript">
function setUserId()
{
	document.getElementById("RUSER").value = document.getElementById("IBIC_user").value;

}

function setDataPath()
{
	var tempDir = "C:\\myWebFocusFiles\\";
	var userName = document.getElementById("RUSER").value;
	document.getElementById("DATAPATH").value =  tempDir + userName + ".xml";

}
</script>


To run the scripts after the login ID is enterd, I used:


---- 2 ----
Set up a data management page. This will allow users to regenerate their local file when needed.
IMPORTANT: The web page MUST be called from inside a procedure using HTMLFORM. This provides access to the RUSER variable. This applies to the Data Management page as well as any page that uses the local data file.
-* File _testDFM.fex
-HTMLFORM DataFileMgmt.html



I created a FEX that generated the dataset I wanted:

TABLEF FILE synonymName
PRINT
     Field3
BY Field1
BY Field2
ON TABLE SET PAGE-NUM OFF
ON TABLE NOTOTAL
ON TABLE PCHOLD FORMAT XML
END


I added my hidden controls:
<INPUT TYPE="HIDDEN" NAME="RUSER" ID=RUSER >
<INPUT TYPE="HIDDEN" NAME="DATAPATH" ID=DATAPATH>


Then, I used the onload event for a hidden IFRAME object to run the report and store the result.

< !-- Begin DataLoad IFRAME -->
<iframe id=dataFrame title=procedureName.fex style="DISPLAY: none" tabIndex=3 name=dataFrame width=770 onload=getRemoteFile(thisDataPathID) height=550 requests_list="0" autoExecute="False" elementtype="2"></IFRAME>
< !-- End DataLoad IFRAME -->


You will notice my getRemoteFile(thisDataPathID) function in there. I created an external javascript file and put it in ibi_html/javaassist. Most of the javascript is provided here.

I retrieve the RUSER variable's value from the Reporting Server. The setUserData and setFormFields are just taking care of some page layout stuff and assigning more values to other hidden controls.
function window_onload() {
	UpdateData();
	document.getElementById("RUSER").value = "!IBI.AMP.RUSER;";
	setUserData();
	setFormFields();
}


Also, I assigned my button to a function:
<INPUT language=java_script id=generateEDB onclick=generateEDB_OnClick[this) type=button value=Generate name=procedureName requests_list="0" autoExecute="False">

which works with my request:
<request requestid="0" targettype="iframe" targetname="dataFrame" sourcetype="typeFex" ibif_ex="procedureName.fex" ibic_server="" ibiapp_app="testing_app baseapp" activereport="0" reportcolumns=""></request>


Here is where the magic happens. I used the FileSystemObject to copy the contents of the IFRAME into memory, and then I extracted the data into a flat file using a pipe delimiter for each field and line feed for each record.

//  Data Management variables
var	PYH = "PYH";
var	EDB = "EDB";
var	HDB = "HDB";
var	thisDataPathID = "EDB";

function needFolder(fso)
{

   	var f, folderspec;
	try {
		folderspec = "C:\\myWebFocusFiles";
   		f = fso.GetFolder(folderspec);
   		return false;
	}
	catch(err) {
		return true;
	}
}

function getRemoteFile(dFile)
{
   var fso, f, dataLoaded, thisDataPathID;
   dataLoaded = (document.frames("dataFrame").document.body.innerText  ? true : false);
   if (dataLoaded) {
		document.getElementById("loadStatus").innerText = "Loading dataset into memory...";
		clearFormFields();
		try {
   			var ForReading = 1, ForWriting = 2;
			var xmlDataString = document.frames("dataFrame").document.body.innerText;
			document.frames("dataFrame").document.body.innerText = "";

			document.getElementById("loadStatus").innerText = "Processing " + dFile + " dataset...";

			var fileLength = xmlDataString.length;
			var fieldDelimiter = "|";
			var recordDelimiter = "\n";
			var fieldEndTag = "</td>";
			var orgStartTag = "<td colnum=\"c0\">";
			var deptStartTag = "<td colnum=\"c1\">";
			var jobclStartTag = "<td colnum=\"c2\">";
			var cursorLocation = 0;
			var fileString = "";
			var currentRecord = "";

			//find the beginning of the actual data

			for (cursorLocation = xmlDataString.indexOf(orgStartTag); cursorLocation < fileLength; ) {
				//extract the data into delimited records
				currentRecord = xmlDataString.substring(cursorLocation + orgStartTag.length, xmlDataString.indexOf(fieldEndTag, cursorLocation));
				currentRecord += fieldDelimiter;
				cursorLocation = xmlDataString.indexOf(deptStartTag, cursorLocation);
				currentRecord += xmlDataString.substring(cursorLocation + deptStartTag.length, xmlDataString.indexOf(fieldEndTag, cursorLocation));
				currentRecord += fieldDelimiter;
				cursorLocation = xmlDataString.indexOf(jobclStartTag, cursorLocation);
				currentRecord += xmlDataString.substring(cursorLocation + jobclStartTag.length, xmlDataString.indexOf(fieldEndTag, cursorLocation));
				currentRecord += recordDelimiter;
				cursorLocation = (xmlDataString.indexOf(orgStartTag, cursorLocation) == -1 ? fileLength : xmlDataString.indexOf(orgStartTag, cursorLocation));
				if (fileString.indexOf(currentRecord) == -1)
					fileString += currentRecord;
			}

			document.getElementById("loadStatus").innerText = "Copying " + dFile + " dataset to local file system...";

			thisDataPathID = "DATAPATH_" + dFile;
   			fso = new ActiveXObject("Scripting.FileSystemObject");

			if (needFolder(fso)) {
				fso.CreateFolder("C:\\myWebFocusFiles");
			}

   			f = fso.CreateTextFile(document.getElementById(thisDataPathID).value, ForWriting, false);
   			f.Write(fileString);
   			f.Close();
			f = null;
			fso = null;
			fileString = "";
			document.getElementById("loadStatus").innerText = dFile + " dataset generated for user " + document.getElementById("RUSER").value + ".";
		}
		catch(err) {
			document.getElementById("loadStatus").innerText = "Error copying the " + dFile + " dataset to local file system.";
			return "Error: " + err.description;
		}
		setFormFields();
		thisDataPathID = "";
	}
}

function getFileDate(dFile)
{
	var fso, f, s, filespec, thisDataPathID;
	thisDataPathID = "DATAPATH_" + dFile;
	try {
		fso = new ActiveXObject("Scripting.FileSystemObject");
   		filespec = document.getElementById(thisDataPathID).value;
   		f = fso.GetFile(filespec);
		return f.DateLastModified;
	}
	catch(err) {
		return err.description;
	}
}

function getFilePath(dFile)
{
		var fso, f, s, filespec, thisDataPathID;
		thisDataPathID = "DATAPATH_" + dFile;
		try {
   			fso = new ActiveXObject("Scripting.FileSystemObject");
   			filespec = document.getElementById(thisDataPathID).value;
   			f = fso.GetFile(filespec);
			return f.Path;
		}
		catch(err) {
			return err.description;
		}
}

function getFileSize(dFile)
{
	var myObject, fso, f, size, thisDataPathID;
	thisDataPathID = "DATAPATH_" + dFile;
	try {
        fso = new ActiveXObject("Scripting.FileSystemObject");
        f = fso.GetFile(document.getElementById(thisDataPathID).value);
        size = f.Size / 1024;
		return size.toFixed(3) + " KB";
	}
	catch(err) {
		return err.description;
	}
}

function generateEDB_OnClick(ctrl) {
	thisdataPathID = EDB;
	document.getElementById("loadStatus").innerText = "Retrieving EDB dataset from server...";
	OnExecute(ctrl);
}

function generateHDB_OnClick(ctrl) {
	thisDataPathID = HDB;
	document.getElementById("loadStatus").innerText = "Retrieving HDB dataset from server...";
	OnExecute(ctrl);
}

function generatePYH_OnClick(ctrl) {
	thisDataPathID = PYH;
	document.getElementById("loadStatus").innerText = "Retrieving PYH dataset from server...";
	OnExecute(ctrl);
}



So now I have a flat file sitting at C:\myWebFocusFiles\123456789.txt. Stripping the tags from the xml file reduced the file size from 8.5 MB to 110 KB.

---- 3 ----
Create a report to use the data in select boxes.
Add in your hidden controls again.
Also add the select box objects:
<SELECT id=ORGID tabIndex=5 onchange=ORGID_onchange[this) multiple size=3 name=ORGID addalloption="0" accept="0" operation="OR" datafield="ORGID" datasource="synonymName.mas" datatype="0" datafieldtype="CHAR" sourcetype="typeMaster" ibiapp_app="testing_app baseapp" ibic_server dfformat="A13" ibiformat="A13" newchainnumber="0" dynalldisplayvalue="ALL" numofrecords="-1"></SELECT>
<SELECT id=HOMEDEPT tabIndex=6 onchange=HOMEDEPT_onchange[this) multiple size=3 name=HOMEDEPT addalloption="0" accept="0" operation="OR" datafield="Department" datasource datatype="0" datafieldtype="INTIGER" sourcetype="typeMaster" ibiapp_app="testing_app baseapp" ibic_server dfformat="A8" ibiformat="A8" newchainnumber="0" dynalldisplayvalue="ALL" numofrecords="-1">
</SELECT>
<SELECT id=JOBCLASS tabIndex=7 multiple size=3 name=JOBCLASS addalloption="0" accept="0" operation="OR" datafield="Job_Class" datasource datatype="0" datafieldtype="CHAR" sourcetype="typeMaster" ibiapp_app="testing_app baseapp" ibic_server dfformat="A6" ibiformat="A6" newchainnumber="0" dynalldisplayvalue="ALL" numofrecords="-1">
</SELECT>


Put in your required function into the window onload event:
function window_onload() {
UpdateData();
// TODO: Add your event handler code here

	document.getElementById("RUSER").value = "!IBI.AMP.RUSER;";
	setUserData();
	createNewArray(document.getElementById("DATAPATH_EDB").value);

}


And here are the functions that I use to populate the select boxes.


//  Selectbox variables
var dataArray = new Array();
var sOrgid = 0, sHomedept = 1, sJobclass = 2;
var orgArray = new Array();
var homedeptArray = new Array();
var jobArray = new Array();

//Begin function ORGID_onchange
function ORGID_onchange(ctrl) {

	// Clear the jobclass selectbox
	document.getElementById("JOBCLASS").options.length = 0;

	// Copy selected orgids to orgArray
	populateArrayFromSelections(document.getElementById("ORGID"), orgArray);

	// Add related departments to homedeptArray
	populateHomedeptArrayFromOrgArray();

	// Add homedeptArray contents to the HOMEDEPT selectbox
	populateSelectboxFromArray(document.getElementById("HOMEDEPT"), homedeptArray);
	
	addOption(document.getElementById("HOMEDEPT"), "ALL", "FOC_NONE");

}
//End function ORGID_onchange


//Begin function HOMEDEPT_onchange
function HOMEDEPT_onchange(ctrl) {

	// Copy selected departments to homedeptArray
	populateArrayFromSelections(document.getElementById("HOMEDEPT"), homedeptArray);

	// Add related jobclasses to jobArray
	populateJobArrayFromArrays();

	// Add jobArray contents to the JOBCLASS selectbox
	populateSelectboxFromArray(document.getElementById("JOBCLASS"), jobArray);
	
	// Add ALL option
	addOption(document.getElementById("JOBCLASS"), "ALL", "FOC_NONE");

}
//End function HOMEDEPT_onchange


function addOption(selectbox, text, value)
{
/*
 *	Sorts and adds an entry to any select box.
 */

	var insertLocation = 0;
	var opt = document.createElement("OPTION");

	if (value == "BLANK") value = " ";

	opt.text = text;
	opt.value = value;

	if (selectbox.length == 0)
	{
		selectbox.options.add(opt, insertLocation);
	}
	else if (text == "ALL")
	{
		selectbox.options.add(opt, 0);
	}
	else
	{
		for (var i = 0; i < selectbox.length; i++)
		{
			if (value > selectbox.options(i).value)
				insertLocation = i + 1;
			if (value < selectbox.options[i).value)
				i = selectbox.length;
		}
		selectbox.options.add(opt, insertLocation);
	}
}


function validateSelections(selectbox)
{
	var hasSelections = false;
	for (var i = 0; i < selectbox.length; i++)
	{
		if (selectbox.options[i].selected == true)
		{
			hasSelections = true;
		}
	}
	
	if (!hasSelections)
	{
		alert("Please make selections from all options.");
	}
	return hasSelections;
}


function isWhiteSpace(s)
{
/*
 *	Checks for missing orgids.
 */

	reWhiteSpace = new RegExp(/\s+/);

	// Test for whitespace
	return reWhiteSpace.test(s);
}


function createNewArray(DATAPATH)
{
 /*
  *	 Reads the values of the local data file into
  *  a three-dimensional array, dataArray.
  */

   	var fso, f, r;
	var dataFileContents = "";
	var currentRecord;
	var cursorLocation = 0;
	var numberOfRecords = 0;
   	var ForReading = 1, ForWriting = 2;
 
	try
	{
   		fso = new ActiveXObject("Scripting.FileSystemObject");
   		f = fso.OpenTextFile(DATAPATH, ForReading);

		while (!f.AtEndOfStream)
		{
			dataFileContents += f.ReadLine();
			dataFileContents += "\n";
			numberOfRecords++;
		}
		f.Close();
		f = null;

		var thisOrgid = "";

		// Extract data into array
		for ( currentRecord = 0; currentRecord < numberOfRecords; currentRecord++)
   		{
			// Create three columns for the row
       		dataArray[currentRecord] = new Array(3);

			// Check for a blank Orgid
			if (isWhiteSpace(dataArray[currentRecord][sOrgid])) {
				dataArray[currentRecord][sOrgid] = "BLANK";}
			// Extract the Orgid and assign to the first column
			thisOrgid = dataFileContents.substring(cursorLocation, dataFileContents.indexOf("|", cursorLocation));

			if (isWhiteSpace(thisOrgid)) {
				dataArray[currentRecord][sOrgid] = "BLANK";
			}
			else {
      			dataArray[currentRecord][sOrgid] = thisOrgid;
			}

			// Update cursorLocation and move forward one position (skip delimiter)
			cursorLocation = dataFileContents.indexOf("|", cursorLocation) + 1;

			// Extract the Homedept and assign to the second column
      		dataArray[currentRecord][sHomedept] = dataFileContents.substring(cursorLocation, dataFileContents.indexOf("|", cursorLocation));
			// Update cursorLocation and move forward one position (skip delimiter)
			cursorLocation = dataFileContents.indexOf("|", cursorLocation) + 1;

			// Extract the Jobclass and assign to the third column
      		dataArray[currentRecord][sJobclass] = dataFileContents.substring(cursorLocation, dataFileContents.indexOf("\n", cursorLocation));
			// Update cursorLocation
			cursorLocation = dataFileContents.indexOf("\n", cursorLocation) + 1;
		}


		// Initially populate ORGID selectbox with all values
		populateSelectbox(document.getElementById("ORGID"), sOrgid);
		document.getElementById("HOMEDEPT").options.length = 0;
		document.getElementById("JOBCLASS").options.length = 0;
		addOption(document.getElementById("ORGID"), "ALL", "FOC_NONE");

	}
	catch(err)
	{
		alert("Error creating data array: \n" + err.description);
	}
}


function populateSelectbox(selectbox, field)
{
/*
 *	Populates any selecttbox for initial load.
 *  Values are obtained from dataArray.
 */

	selectbox.options.length = 0;
	var itemExists = false;

	// Iterate through the entire array
	for (var i = 0; i < dataArray.length; ++i)
	{
		// Iterate through the selectbox values
		for (var j = 0; j < selectbox.length; j++ )
		{
			// Skip duplicate entries
			if (dataArray[i][field] == selectbox.options[j].value )
			{
				itemExists = true;
				j = selectbox.options.length;
			}
		}

		if (itemExists == false)
		{
			addOption(selectbox, dataArray[i][field], dataArray[i][field]);
		}
		itemExists = false;
	}
}


function populateSelectboxFromArray(selectbox, thisArray)
{
/*
 *	Populates a selectbox from an array.
 *  Removes duplicate entries.
 *  Options are sorted within addOption.
 */

	selectbox.options.length = 0;
	var itemExists = false;

	// Remove duplicate entries
	for (var i = 0; i < thisArray.length; ++i)
	{
		// Iterate through the selectbox values
		for (var j = 0; j < selectbox.length; j++ )
		{
			// Skip duplicate entries
			if (thisArray[i] == selectbox.options[j].value )
			{
				itemExists = true;
				// Stop processing selectbox values
				// for this array element
				j = selectbox.length;
			}
		}

		if (itemExists == false)
		{
			addOption(selectbox, thisArray[i], thisArray[i]);
		}
		itemExists = false;
	}
}


function populateArrayFromSelections(selectbox, thisArray)
{
/*
 *	Adds the users' selections to the specified Array.
 *  The selectbox and array must be related (i.e., orgSelectbox and orgArray).
 */

	thisArray.length = 0;
	var i = 0;
	var all = (selectbox.selectedIndex == 0 );
	
	if (all)
	{
		i = 1;
	}

	// Iterate through the selectbox values
	var j = 0;
	for ( ; i < selectbox.length; i++ )
	{
		// Add selections to thisArray
		if ((selectbox.options[i].selected == true) || (all))
		{
			thisArray[j] = selectbox.options[i].value;
			j++;
		}
	}
}



function populateHomedeptArrayFromOrgArray()
{
/*
 *	Compares the orgArray elements to dataArray orgids.
 *	If a match is found, the corresponding homeDept is
 *	added to the homedeptArray.
 */

	homedeptArray.length = 0;

	var k = 0;
	for (var i = 0; i < dataArray.length; i++)
	{
		for (var j = 0; j < orgArray.length; j++)
		{
			if (dataArray[i][sOrgid] == orgArray[j])
			{
				// found a matching org
				homedeptArray[k] = dataArray[i][sHomedept];
				k++;
			}
		}
	}
}


function populateJobArrayFromArrays()
{
/*
 *	Filters jobclasses depending on selected orgids and departments.
 *  Compares sOrgid and sHomedept in dataArray to orgArray and homedeptArray.
 */

	jobArray.length = 0;

	var m = 0;
	// Iterate through the orgids in dataArray
	// orgids and departments are checked with the same index to compare jobclasses
	for (var i = 0; i < dataArray.length; i++)
	{
		// Iterate through the orgids in orgArray
		for (var j = 0; j < orgArray.length; j++)
		{
			// Iterate through departments in homedeptArray
			for (var k = 0; k < homedeptArray.length; k++)
			{
				// Compare dataArray org/dept with selected departments
				if ((dataArray[i][sOrgid] == orgArray[j]) && (dataArray[i][sHomedept] == homedeptArray[k]))
				{
					// found a matching orgid and department
					jobArray[m] = dataArray[i][sJobclass];
					m++;
					k = homedeptArray.length;
				}
			}
		}
	}
}


I hope this helps someone out there. I know there is a lot of information in this post but it doesn't come close to covering everything I had to do, I just want to point you in the right direction!

This message has been edited. Last edited by: Kerry,


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
Silver Member
posted Hide Post
Thank you Kerry for cleaning up my post Smiler


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
Silver Member
posted Hide Post
I just remembered that you will also need the Windows Script Host 5.7 installed for this to work.


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
Virtuoso
posted Hide Post
I created an xml file with webfocus only.




Frank

prod: WF 7.6.10 platform Windows,
databases: msSQL2000, msSQL2005, RMS, Oracle, Sybase,IE7
test: WF 7.6.10 on the same platform and databases,IE7

 
Posts: 2387 | Location: Amsterdam, the Netherlands | Registered: December 03, 2006Report This Post
Silver Member
posted Hide Post
Did you create the xml file on the client's PC or on the server?


Local Development Environment:
WF 7.6.10 on Vista Ultimate 64-bit Edition
Client Environments:
WF 7.1.3, 7.6.4, and 7.6.10 on various Windows Server platforms using servlet implementation over SSL
Oracle and MSSQL DBs
Output formats: HTML, PDF, Excel 2000, XML
 
Posts: 26 | Location: Tampa Bay, FL | Registered: September 30, 2008Report This Post
  Powered by Social Strata  

Read-Only Read-Only Topic

Focal Point    Focal Point Forums  Hop To Forum Categories  WebFOCUS/FOCUS Forum on Focal Point     [SOLVED] Reusing an XML hold file between Web Pages

Copyright © 1996-2020 Information Builders