function doSupport() { // Available options: validateSubmit, validateView, update, submit, view var list = "validateSubmit,view,submit"; console.println("platform:" + xfa.host.platform); console.println("version:" + xfa.host.version); if ( xfa.host.platform == "WIN" ) { list = "validateSubmit,update,view,submit"; } if ( xfa.host.version < "9.1" ) { list = "validateSubmit,submit"; } console.println("doSupport: " + list); return list; } function doGetUpdateDelay() { if ( xfa.host.platform == "WIN" ) { return 20; } else { return 2000; } } function doChrome(bOn) { console.println("doChrome: " + bOn); var oDataObjects = docRoot.dataObjects; if ( oDataObjects == null || oDataObjects.length == 0 ) { bOn = "true"; // turn on chrome when in maintenance mode dealing with raw bootstrap file. } // app.toolbar = (bOn == "true"); console.println("doChrome done: " + bOn); } function doGetAttachmentList() { console.println("doGetAttachmentList:" ); var list = Array(); var oDataObjects = docRoot.dataObjects; if ( oDataObjects != null ) { var nChildren = oDataObjects.length; console.println(" found " + nChildren + " attachments."); for (var iChild = 0; iChild < nChildren; iChild++) { // Check each attachment: console.println(" name: " + oDataObjects[iChild].name); list = list.concat(oDataObjects[iChild].name); } } console.println("Attachments: (" + list.length + ")" ); return list; } function doGetAttachment(attachName) { console.println("doGetAttachment:" ); var bytesOut = "Could not load Attachment:"; var oDataObjects = docRoot.dataObjects; var obj = null; if ( attachName.length > 0 ) { console.println(" name: " + attachName); obj = docRoot.getDataObjectContents(attachName); } else if ( oDataObjects != null ) { var nChildren = oDataObjects.length; console.println(" found " + nChildren + " attachments."); for (var iChild = 0; iChild < nChildren; iChild++) { // Check each attachment: console.println(" name: " + oDataObjects[iChild].name); if ( oDataObjects[iChild].name.indexOf(".swf") > 0 ) { bytesOut = "Could not load Attachment: " + oDataObjects[iChild].name + "!"; console.println(" Using: " + oDataObjects[iChild].name); obj = docRoot.getDataObjectContents(oDataObjects[iChild].name); break; } } } // var obj = docRoot.getDataObjectContents(attachName); if ( obj != null ) { bytesOut = ""; var bytes = obj.read(10000); while (bytes.length > 0) { bytesOut += bytes; bytes = obj.read(10000); } } console.println("BYTES: (" + bytesOut.length + ")" ); return bytesOut; } function doView(attachName, hexData) { console.println("doView: " + attachName); if ( oDoc ) { oDoc.closeDoc(); } var oDoc = docRoot.openDataObject(attachName); if ( oDoc ) { var theData = decodeBytes(hexData); console.println("Doc:" + oDoc.title); setData(oDoc.xfa, theData); console.println("Doc data set:" + oDoc.xfa.datasets.saveXML() ); try { // oDoc.save(); } catch (e){ xfa.host.messageBox("err1:" + e); } try { docRoot.exportDataObject({ cName: attachName, nLaunch: 2 }); console.println("Doc Viewed:" ); } catch (e){ xfa.host.messageBox("err2:" + e); } // oDoc.closeDoc(); return true; } return false; } function doEmail() { console.println("doEmail()"); docRoot.mailDoc(true, ""); return true; } function doPrint(attachName, hexData) { console.println("doPrint: " + attachName); if ( oDoc ) { oDoc.closeDoc(); } var oDoc = docRoot.openDataObject(attachName); if ( oDoc ) { var theData = decodeBytes(hexData); console.println("Doc:" + oDoc.title); setData(oDoc.xfa, theData); oDoc.print(docRoot.getPrintParams()); console.println("Doc Data:" + oDoc.xfa.datasets.saveXML() ); // oDoc.closeDoc(); return true; } return false; } function doSetAttachment(attachName, hexData) { console.println("doSetAttachment: " + attachName); var theData = decodeBytes(hexData); // Convert the modified string back to a FileStream: var oFile = util.streamFromString(theData, "utf-8"); // Save the modified FileStream contents: docRoot.setDataObjectContents(attachName, oFile); return true; } function doSubmit(sUrl, hexData) { console.println("doSubmit: " + sUrl); var theData = decodeBytes(hexData); var objXML = XMLData.parse(theData, false); docRoot.submitForm({cURL: "mailto:tward@adobe.com", cSubmitAs: "XDP", oXML: objXML}); return true; } function doGetData() { console.println("doGetData()"); console.println("XFA Data:" + xfa.datasets.saveXML()); return xfa.datasets.saveXML(); } function doSetDataHex(hexData) { console.println("doSetDataHex: " + hexData); var theData = decodeBytes(hexData); console.println("decoded data: " + theData); setData(xfa, theData); return true; } function getByteValue(char1, char2) { var value = parseInt(char1,16) * 16; value += parseInt(char2,16); return String.fromCharCode(value); } function decodeBytes(hexData) { var theBytes = ""; for ( var i = 0; i < hexData.length; i++ ) { theBytes += "" + getByteValue(hexData.substr(i,1), hexData.substr(i+1,1)); i++; } return theBytes; } /** Set the data dom with the passed data */ function setData(oXfa, data) { data = sanitizeData(data); try { // Call XFA to load the sanitized data and force a remerge console.println("setting data: " + data); oXfa.datasets.data.loadXML(data, 1, 1); oXfa.form.remerge(); console.println("success!"); } catch (err) { console.println("failure!"); throw E_SETDATA_LOADXML + ": " + err; } } /** Set the data dom with the passed data */ function sanitizeData(data) { var xfaData = data; // For certain forms XFA will not allow updates to the entire datasets so the data only portion // must be extracted. // The XML passed in can come in different flavours that have to be massaged in order to get XFA to accept // the data. // Check for standard first var searchFor = "xfa:data"; var xfaDataStart = data.indexOf("<" + searchFor, 50); // Start past the ever present = 0 ) { xfaDataEnd = data.indexOf(""; } else { // Did not find second searchFor = "data"; xfaDataStart = data.indexOf("<" + searchFor, 0); if ( xfaDataStart >= 0 ) { var i = xfaDataStart; while (i >= 0) { // Find the *last* "; // Have to remove the "FORMSERVER" variables as well as their enclosing .. // since loadXML will fail if they are left in var i = xfaData.search( /<(FS[A-Z]+)_\s*\/?>/ ); // Any tags? if (i >= 0) { xfaData = xfaData.replace( /<(FS[A-Z]+)_\s*>.*<\/\1_\s*>\s*/g , "" ); xfaData = xfaData.replace( /<(FS[A-Z]+)_\s*\/>\s*/g , "" ); xfaData = xfaData.replace( /\s*<\/root\s*>\s*/g , "" ); xfaData = xfaData.replace( /\s*/g , "" ); } } } return xfaData; } function doNoRIA_Available() { console.println("doNoRIA_Available: " + xfa.host.version); var attachName = "ExpenseClaimPrint.pdf"; if ( oDoc ) { oDoc.closeDoc(); } var oDoc = docRoot.openDataObject(attachName); if ( oDoc ) { console.println("Doc:" + oDoc.title); setData(oDoc, xfa.datasets.saveXML()); console.println("Doc data set:" + oDoc.xfa.datasets.saveXML() ); oDoc.closeDoc(); try { docRoot.exportDataObject({ cName: attachName, nLaunch: 2 }); console.println("Doc Viewed:" ); } catch (e){ xfa.host.messageBox("err2:" + e); } oDoc.closeDoc(); return true; } else { xfa.host.messageBox("Error: Could not find document " + attachName + " to open when RIA feature is not available. (" + xfa.host.version + ")"); } return false; }