Prevent changing the xml source
Hi,
we are developing Interactive Forms with WebDynpro for use in an Internet portal. I understand from another post that the LiveCycle Policy Server is not supported in the current SAP environment. From a security perspective, we would like to make sure the xml source of a pdf is not changed before it is sent to the ADS server. Currently it is possible to save a pdf locally, change the file with designer and upload it back to the server (the upload function is a business requirement).
Is is possible to protect the source in this scenario? Alternatively we would like to prevent javascripts to be executed server-side (ADS). Is it possible to prevent this?
Software: SAP EP 6.0 SP 15, LiveCycle Designer 7.0
Thanks for your input,
Marijn.
For starters your xsd is missing the Root element.
Here's an xsd that I created from your xml that validates
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///D:/Projects/Test/test.xsd">
<Customer xmlns="CustomerXSDSchema">
<CustomerName>Microsoft</CustomerName>
<CustomerNumber>1</CustomerNumber>
<CustomerCountry>USA</CustomerCountry>
</Customer>
</Root>
Similar Messages
-
Can we change the XML source of the form bulider ?
Hi,
I have one doubt in the XMLfrombuilder. in Renderlist form.when we give "Link to xml source " in the hyperlink property it will show the xml source code.
is there any possibility to change and save the source code so that the changes should reflect to the form.
Thanks ,
Rajeev.Hi,
you can write styles direct to the element:
<td height="10%" valign="top" style="padding:0px;margin:0px;border-left-color:#000000;border-left-width:1px;border-left-style:solid;font-size:1px" width="0%" rowspan="1" colspan="1"> </td>
or format elements with style from css:
<a tabindex="0" class="urLnkDragRelate urTxtStd">
Did you mean that with style use?
In our project we created forms with some of these properties. E.g. we use under System the property Modified By.
Regards,
René -
Dynamically change the XML source of a report
I have seen that it is possible to assign an URL as the source for an XML source. But, how could I change this URL dynamically at run time? is it possible to add parameters to the url in the form of:
http://myserver/myapp/myjsp.jsp?myparameter=[some dynamic value}
so that calling the report will let me assign a value to the parameter?
Or at least, is there a way to send the URL the Report will use upon report invocation?
Thanks,
FedroFedro,
The naswer is the same as you previous question:
Report using an XML Source
But if you want to create a complete URL be sure that you have a valid default value for the parameter.
Regards
Tugdual -
Trying to change the data source for a Crystal Report.
<p>The method below represents my best attempt to programatically change the data source of a Crystal Report. The goal is to have a routine that will update the data source for reports after they have been distributed to production servers. So far I have not been successful in saving the report back to the CMS. No exceptions are thrown, but when I view the Database Configuration of the report in the CMC nothing has changed.
</p>
<p>
Am I missing a step, or is there another way to accomplish this?
</p>
<p>
Thank you.
</p>
<hr />
<pre>
private void test(String reportName)
throws SDKException, ReportSDKException, java.io.IOException
IInfoObjects newInfoObjects;
IInfoObject reportObj;
ReportClientDocument clientDoc = new ReportClientDocument();
DatabaseController dc;
PropertyBag pBag;
PropertyBag logonProps;
ConnectionInfo newConInfo;
ConnectionInfo oldConInfo;
ConnectionInfos conInfos;
int connOptions = DBOptions._ignoreCurrentTableQualifiers + DBOptions._doNotVerifyDB; //0;
Fields connFields = null;
String queryStr = "Select * From CI_INFOOBJECTS " +
"Where SI_NAME='wfr.rpt' AND SI_KIND='CrystalReport' AND SI_INSTANCE=0";
newInfoObjects = getCms().executeQuery(queryStr);
if(newInfoObjects.size() > 0)
reportObj = (IInfoObject)newInfoObjects.get(0);
try
clientDoc = getCms().getReportAppFactory().openDocument(
reportObj
, OpenReportOptions._refreshRepositoryObjects
, java.util.Locale.US);
dc = clientDoc.getDatabaseController();
conInfos = dc.getConnectionInfos(null);
for(int i = 0; i < conInfos.size(); ++i)
oldConInfo = (ConnectionInfo)conInfos.getConnectionInfo(i);
newConInfo = (ConnectionInfo)oldConInfo.clone(true);
pBag = newConInfo.getAttributes();
pBag.putStringValue("QE_ServerDescription", "alio");
logonProps = new PropertyBag();
logonProps.putStringValue("Trusted_Connection", "false");
logonProps.putStringValue("Server", "alio");
pBag.put("QE_LogonProperties", logonProps);
newConInfo.setUserName("admin");
newConInfo.setPassword("password");
dc.replaceConnection(
oldConInfo
, newConInfo
, connFields
, connOptions);
catch(ReportSDKServerException Ex)
String msg = "A server error occured while processing the " + reportObj.getKind()
+ " object, " + reportObj.getTitle() + " (" + reportObj.getCUID() + "), from the CMS.";
Utility.errorOut(msg, Ex);
catch(Exception Ex)
String msg = "An error occured while processing the " + reportObj.getKind()
+ " object, " + reportObj.getTitle() + " (" + reportObj.getCUID() + "), from the CMS.";
Utility.errorOut(msg, Ex);
finally
clientDoc.save();
getCms().commitToInfoStore(newInfoObjects);
clientDoc.close();
</pre>
Edited by: Mark Young on Sep 10, 2009 2:16 PM<style type="text/css">
/<![CDATA[/
body
font-size: 1.125em;
font-family: helvetica,arial,"sans-serif";
.code{font-family: "courier new",courier,mono,monospace}
.bi{font-style: italic; font-weight: bold;}
/]]>/
</style>
<p>Justin,</p>
<p>
Thank you for the reply. Time constraints have not allowed me to post back to this tread
till now. I will try your suggestion. My assumption is that <i>Save the report back to the
info store</i> refers to <span class="code">IInfoStore.commit(IInfoObjects)</span>.
</p>
<p>
I'm afraid that I do not understand why I don't want to change the report client document,
or why <i>successfully exporting the report with the new login/password</i> is not what I
want to do. Any explanation on that statement would be appreciated.
</p>
<p>
I did find a way to accomplish my goal. It involved adding the SSOKEY property to the
logon property bag. Below you'll see my revised code which modifies the report logon and
server. I have no idea what
this does, and SAP support has not been able to tell me why it works. However, what I
discovered is that if I changed the report option, <b>Database Configuration -> When
viewing report:</b>, in the CMS to <span class="bi">Use same database logon as when report
is run</span> from <span class="bi">Prompt the user for database logon</span>, then the
SSOKEY property had been added to the logon property bag having an empty string as its
value. This allowed me to successfullyupdate and save the modified logon back to the CMS.
</p>
<p>
So I took a chance and added code to always add the SSOKEY property with an empty string
as its value, and I could then successfully modify and save the report's logon info
and server. Again, I don't know what this means, but it has worked so far. If anyone has
some insight or comments, either are welcome. Thank you in advance.
</p>
<br />
<hr />
<pre>
private void changeDataSourceOfAWFCrystalReports()
throws SDKException, ReportSDKException, java.io.IOException
IInfoObjects newInfoObjects = null;
IInfoObject reportObj = null;
IReport curReport = null;
ReportClientDocument clientDoc = new ReportClientDocument();
DatabaseController dbController;
PropertyBag pBag;
PropertyBag logonProps;
ConnectionInfo newConInfo;
ConnectionInfo oldConInfo;
ConnectionInfos conInfos;
int connOptions = DBOptions._ignoreCurrentTableQualifiers + DBOptions._doNotVerifyDB;
Fields connFields = null;
String outputStr;
int numOfReports;
int numOfQueryPages;
double progressIncrementPerPage = 30;
int progressIncrementPerReport = 0;
// Path query to reports is in a .properties file.
String queryStr = getAppSettingsFile().getWscAwfCrystalReportPathQuery();
try
// Executes IInfoStore.getPageingQuery() and generates a list of queries.
getCms().setPathQueryQueries(queryStr, 100);
numOfQueryPages = 0;
// Gets a List<String> of the IPageResult returned from IInfoStore.getPageingQuery().
if(getCms().getPathQueryQueries() != null)
numOfQueryPages = getCms().getPathQueryQueries().size();
if(numOfQueryPages > 0)
// Use 30% of progress bar for the following loop.
progressIncrementPerPage = Math.floor(30.0/(double)numOfQueryPages);
for(int queryPageIndex = 0; queryPageIndex < numOfQueryPages; ++queryPageIndex)
// Gets the IInfoObjects returned from the current page query
newInfoObjects = getCms().getPathQueryResultSetPage(queryPageIndex);
numOfReports = newInfoObjects.size();
if(newInfoObjects != null && numOfReports > 0)
progressIncrementPerReport =
Math.round((float)Math.floor(progressIncrementPerPage/(double)numOfReports));
for(int reportIndex = 0; reportIndex < numOfReports; ++reportIndex)
reportObj = (IInfoObject)newInfoObjects.get(reportIndex);
curReport = (IReport)reportObj;
clientDoc = getCms().getReportAppFactory().openDocument(
reportObj
, OpenReportOptions._refreshRepositoryObjects
, java.util.Locale.US);
dbController = clientDoc.getDatabaseController();
conInfos = dbController.getConnectionInfos(null);
for(int conInfosIndex = 0; conInfosIndex < conInfos.size(); ++conInfosIndex)
oldConInfo = (ConnectionInfo)conInfos.getConnectionInfo(conInfosIndex);
newConInfo = (ConnectionInfo)oldConInfo.clone(true);
pBag = newConInfo.getAttributes();
pBag.putStringValue(
"QE_ServerDescription"
,getConfigFile().getDBDataSourceConnections());
logonProps = new PropertyBag();
logonProps.putStringValue("Trusted_Connection", "false");
<b>logonProps.putStringValue("SSOKEY", "");</b>
logonProps.putStringValue(
"Server"
,getConfigFile().getDBDataSourceConnections());
pBag.put("QE_LogonProperties", logonProps);
newConInfo.setUserName(getConfigFile().getUNVConnectionUserName());
newConInfo.setPassword(getConfigFile().getUNVConnectionPasswordDecrypted());
dbController.replaceConnection(
oldConInfo
, newConInfo
, connFields
, connOptions);
newConInfo = (ConnectionInfo)conInfos.getConnectionInfo(conInfosIndex);
} // end for on conInfosIndex
clientDoc.save();
} // end for on reportIndex
} // end if on newInfoObjects
} // end for on queryPageIndex
} // end try
catch(ReportSDKServerException Ex)
// handle...
catch(Exception Ex)
// handle...
finally
getCms().commitToInfoStore(newInfoObjects);
if(clientDoc != null)
clientDoc.close();
</pre> -
Can we change the Data source in AO ?
Hi Folks,
Environment: SAP HANA on AO
I have the following scenario , Am creating a report on one Calculation View: CV and have done some analysis where I have pulled in some dimensions and kept some background filters.
Now I have to generate the same report on another Calculation View: CV2 ( Similar to structure of CV ) and compare the reports. Is there any way to edit copy the previous report and change the data source? Can you guide me on that?
Regards,
Krishna TanguduHi,
You can exchange the calc view by clicking on the button next to the data source name in the tab "components", but when you do this, the new data source will overwrite the settings and filters from the previous data source. So no, there is not a supported way of exchanging the datasource and keeping the filters of the previous data source.
Best regards,
Victor -
Changing the Data source in Business Objects XI
Hi,
Is it possible to change the data source(not universe) in runtime to generate business objects reports. I am using BOXI 3.1.
Below is the code I am using to change the universe in runtime. I would like to change this so that i can change the data source instead of changing the universe. My intention is to generate report from multipple database using same universe. Right now I am using multipple universes connected to multiple datasources to achieve this. I am using Report Engine SDK(Java).
if("Webi".equals(mDocKind))
// Added for multiple database support
DataProviders dataProvs = documentInstance.getDataProviders();
try{
//To support multiple queries in BO reports
for(int count=0;count<dataProvs.getCount(); count++){
DataProvider dp=dataProvs.getItem(count);
DataSource ds= dp.getDataSource();
infoUniverseObjects = getUniverseObject(infoStore,NewUniverseName);
infoUniverseObject = (IInfoObject)infoUniverseObjects.get(0);
String newDsCuid = infoUniverseObject.getCUID();
dataProvs.changeDataSource(ds.getID(), "UnivCUID=" + newDsCuid, true);
if(dataProvs.mustFillChangeDataSourceMapping())
// Re-map data source to target Universe objects
ChangeDataSourceMapping mapping = dataProvs.getChangeDataSourceMapping();
ChangeDataSourceObjectMapping[] maps = mapping.getAllMappings();
dataProvs.setChangeDataSourceMapping();
}//for dataProvs.getCount()
}catch(Exception e)
mLogger.info("BOReportObject","createReport","Inside multiple data providers loop"+e.getMessage());
Thanks in advance
Shameer
Edited by: Shameertaj on May 20, 2009 3:08 AMHi Shameer,
I think this is only possible with the Universe Designer SDK (which is only available in COM).
Please kindly refer to the API reference for the Universe Designer SDK for more details:
http://help.sap.com/businessobject/product_guides/boexir31/en/bodessdk.chm
Also, please note that changing the universe connection when viewing a document on-demand is not recommended because this could lead to possible issues.
For example:
Two users trying to view documents that uses the same universe at approximately the same time.
But user A wants to use connection X and user B wants to use connection Y.
This could lead to an error while openning the document or while refreshing/retrieving the the data.
Hope this helps.
Regards,
Dan -
How to Change the XML data that got stuck up in XI
Hi,
I am executing a scenario which sends the data from HTTP client>Xi->SAP(R/3 4.6).We are queuing the messages in XI, through QoS EOIO.Sender side we have configured the HTTP adapter and on receiver side we have configured RFC adapter.RFC at receiver side throws an exception, if I try to call rfc from XI by sending wrong data to it from HTTP client.The message which is failed gets stuck up in the queue , whose status will be shown as System Error.So, No messages will be further processed from that queue.
Our Requirement is, We need to manually change the xml file which is failed while trying to post data in to SAP.Could any one help me to find where the Failed xml file gets stored in XI and how can we change the file .
Regards,
Kiran kumar.Mario,
This is possible from SP 19 onwards...
Have a look @
/people/gourav.khare2/blog/2007/02/28/sapxi--message-editing-150-responsibility-and-liability-150-sp19
Also, the comments in the blog. Really good
http://help.sap.com/saphelp_nw04/helpdata/en/43/4a576b5b7430f3e10000000a11466f/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/43/4a576b5b7430f3e10000000a11466f/frameset.htm
Regards,
Jai Shankar -
How do I change the clock source in Audio/Midi when it's greyed out?
I've tried and tried to change the clock source to eliminate pops and clicks in audio output and input but I just can't change the clock source because it's greyed out - how can I make it changeable?
Any suggestions would be great !Hi, Acoma.
Have you seen the steps and specifics (analog vs. digital inputs) discussed in:
• "Soundtrack Pro: Setting the correct clock source for your audio interface."
• "Logic Pro/Express: Digital input not available."
Providing more specifics concerning your exact recording configuration may enable the audio gurus who answer questions here to give you additional assistance. You may also want to try your question on the Discussions for either of Apple's Soundtrack or Logic products, as those contributors are most familiar with audio set-up issues.
Good luck!
Dr. Smoke
Author: Troubleshooting Mac® OS X -
Changing the XML Structure in "Submit as XML"
Dear all,
We have two PDF Templates which are submitted via a WebService using Submit as XML. For both templates we need the same structured XML output.
Form 1 has the hierarchy like this (all subforms):
Company
Subsdiary
Responsibles
Footer
so the xml looks like
<creditrequest>
<company>...</company>
<subsdiary>...</subsdiary>
<responsible>...</responsible>
<footer>...</footer>
</creditrequest>
Form 2 has the hiearchy like this (all subforms):
Responsibles
Subsidiary
Company
Footer
and the xml looks like
<creditrequest>
<responsible>...</responsible>
<subsdiary>...</subsdiary>
<company>...</company>
<footer>...</footer>
</creditrequest>
So my question is how can influence the XML output order without changing the PDF hiearchy. This way I can change the XML output for Form 1 or Form 2 and both files would have the same XML structure to submit.
I have checked the presubmit event and the javascript API to change XML string programmaticly but I couldn't find any possiblity to read/write the XML to submit.
Thanks,
KorayYou can use JDOM and DOM. They are classes that load the XML File on memory and then you can modify it. I strongly recommend JDOM.
-
How to change the Data sources after deploying the application ??
Hi All,
i want to know how to change the Data sources after deploying the application to the application server ???
I'm using Oracle Application Server 10g Release 3 (10.1.3.1.0)Can you access the Enrprise Manager website of the target Application Server from your location? If so, you can change the datasource in it. If not, yo can bundle the datasource definition in your archive and use that one instead of the one configured in the target OC4J container. Or this will just be the responsability of your customer: whenever you send a new WAR file, they have to modify the datasource if needed and deploy the application?
-
How to get the XML Source again from the same RDF ???
If the one new column is added in the .rdf file, then how u create your new XML source by submitting the same cp?
When I ran the cp for 1st time, I was able to get xml source by view output, save it, make rtf and make data defn and template creation.
But how to get the XML source If the one new column is added in the same .rdf file?
Thanks
Ud.The simple answer is: you don't.
Not only is it simply not possible, but the entire concept of "the active browser" doesn't exist.
You were on the right track with your code to retrieve the page directly from the server, but as you noticed that code will only work for regular http connections.
For https and other protocols you will need to use appropriate libraries for each protocol. Something like Apache Commons can help you with that. There are networking libraries in there for a lot of commonly used protocols. -
How to pull the root level XML tags in the XML source-SSIS?
Hi All,
Can anyone please help out with the following requirement?
There is a XML file data which I need to pull it to database. Please see the attached XML file.
Question: When I am trying to pull the root level data (i.e. CreationDateTime and FileNumber) from XML source in the dataflow, the respective tag is not seen in the input. Can anyone help me how can I get those values in my input to pull the data to Database?
Thanks & Regards,
SriHi Sri,
In SQL Server Integrated Services, we can generate XML Schema (XSD) file based on a XML file with XML Source Editor. For more details, please refer to the following steps:
Double-click the XML Source in the Data Flow Task.
Browse the XML file for the XML location.
Click the Generate XSD button to generate an XSD file.
If there are any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
CS3 - "Unable to locate or parse the XML source"
Hello,
When I try and attach a remote XML source to my XSL fragment,
Dreamweaver
CS3 tells me "Unable to locate or parse the XML source".
This happens irrespective of where the remote XML file is
located, and for
all the remote XML files that I have found and tested from a
myriad of
different sources - I always get the same response.
I can download any of these XML files and work with them
locally, which
Dreamweaver is quite happy to do, but that isn't appropriate
for an
application that needs to rely on an XML feed that is always
up to date!
From searching Google I can find numerous other queries of
this nature, but
no solutions! I am not sure if it is a Dreamweaver problem,
or related to
the type of web server I'm using or indeed to the corporate
firewall here.
For clarity, only Dreamweaver can't locate the remote XML
sources - pasted
into a browser they are all perfectly valid.
(Apologies for sort of cross posting, I have already asked
this question
slightly differently on macromedia.dreamweaver)
Cheers,
D.Kelli, I know this is months late for you.. but I get the
same error.. I found if I downloaded the xml locally I was able to
set up my xsl page. After I got the page to look the way I wanted I
switch the source to the external URL.
If you have found a fix for the error please let me know,
other then that this way will work. -
Unable to locate or parse the XML source (-1,-1)
Hello,
Why do I get this error when I'm trying to get the XML source
from
*.php ?
quote:
"Unable to locate or parse the XML source (-1,-1)"
The
*.php file has a recordset which I exported as XML based on
this
tutorial
I can see the XML of *php in the browser but can't get the
schema.
What am I missing?
Thank youpage.php
url
quote:
code:
<?php require_once('../Connections/example.php'); ?>
<?php
// Load the XML classes
require_once('../includes/XMLExport/XMLExport.php');
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType,
$theDefinedValue = "", $theNotDefinedValue = "")
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue)
: $theValue;
$theValue = function_exists("mysql_real_escape_string") ?
mysql_real_escape_string($theValue) :
mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" :
"NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) .
"'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" :
"NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue :
$theNotDefinedValue;
break;
return $theValue;
mysql_select_db($database_example, $example);
$query_data = "SELECT * FROM example";
$data = mysql_query($query_data, $example) or
die(mysql_error());
$row_data = mysql_fetch_assoc($data);
$totalRows_data = mysql_num_rows($data);
// Begin XMLExport data
$xmlExportObj = new XMLExport();
$xmlExportObj->setRecordset($data);
$xmlExportObj->addColumn("Name", "Name");
$xmlExportObj->addColumn("Damage", "Damage");
$xmlExportObj->addColumn("Speed", "Speed");
$xmlExportObj->addColumn("Level", "Level");
$xmlExportObj->addColumn("Details", "Details");
$xmlExportObj->addColumn("Type", "Type");
$xmlExportObj->addColumn("Source", "Source");
$xmlExportObj->addColumn("Location", "Location");
$xmlExportObj->addColumn("Date", "Date");
$xmlExportObj->addColumn("Price", "Price");
$xmlExportObj->addColumn("Skill", "Skill");
$xmlExportObj->addColumn("Constitution", "Constitution");
$xmlExportObj->addColumn("Intelligence", "Intelligence");
$xmlExportObj->addColumn("Wisdom", "Wisdom");
$xmlExportObj->addColumn("Strength", "Strength");
$xmlExportObj->addColumn("Member", "Member");
$xmlExportObj->addColumn("Image", "Image");
$xmlExportObj->setMaxRecords("ALL");
$xmlExportObj->setDBEncoding("ISO-8859-1");
$xmlExportObj->setXMLEncoding("ISO-8859-1");
$xmlExportObj->setXMLFormat("NODES");
$xmlExportObj->setRootNode("Category");
$xmlExportObj->setRowNode("Type");
$xmlExportObj->Execute();
// End XMLExport data
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "
http:// www.
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http:// www . w3. org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<title>example</title>
<link href="css.css" rel="stylesheet" type="text/css"
/>
</head>
<body>
</body>
</html>
<?php
mysql_free_result($data);
?> -
Unable to Locate or Parse the XML source
I've just started playing around with Dreamweaver 8 and I'm
trying to pull in a RSS feed. I've followed the instructions in
Dreamweaver, but when I add my XML source (
http://rss.cnn.com/rss/cnn_law.rss)
I get an error message in the bindings area where the XML structure
should be displaying that says "Unable to locate or parse the XML
source". I'm somewhat familiar with XML and new to RSS feeds so I
have no idea what this means. Any help will be appreciated.Kelli, I know this is months late for you.. but I get the
same error.. I found if I downloaded the xml locally I was able to
set up my xsl page. After I got the page to look the way I wanted I
switch the source to the external URL.
If you have found a fix for the error please let me know,
other then that this way will work.
Maybe you are looking for
-
Time Capsule hard drive as network attached storage?
I have both G4 and G5 running Tiger. I just bought Time Capsule to use as my network router. Can I get some help to set up the 500GB hard drive in TC to show up as an available hard drive storage on both my desktops?
-
Ipod touch is disabled and says connect to itunes. I have followed all of the steps but am not getting the message to restore.
-
How to read the html code from a specific page
is there a way that I can get the source code of a specific url and display that into a textarea with java?
-
dear all, is it possible to write sql statement in ECC without abap? e.g. test a sql statement query with any abap required?
-
This is a dumb question but I am switching from PCs so I really don't speak the same language sometimes (although, I adore this IMAC and think it is the greatest computer I have ever worked with). I am trying to print 20 copies of page 2 of an Open O