Handling xml
Hi,
I have the following tables & data ..
create table identity (IDENTITY_ID varchar2(100));
Insert into identity values ('100');
Insert into identity values ('101');
create table CM_ENCOUNTER (IDENTITY_ID varchar2(100), CSN varchar2(100));
Insert into CM_ENCOUNTER values ('100','3a1');
Insert into CM_ENCOUNTER values ('101','1a2');
create table CM_PATIENT (IDENTITY_ID varchar2(100), GENDER varchar2(100), race varchar2(100));
Insert into CM_PATIENT values ('100','F','AA');
Insert into CM_PATIENT values ('101','M','HA');
Insert into CM_PATIENT values ('101','F','EA');
create table CM_ENCOUNTER_RFV
(IDENTITY_ID varchar2(100), CSN_ID varchar2(100), LINE varchar2(100), ENC_REASON_NAME varchar2(100));
Insert into CM_ENCOUNTER_RFV values ('100','23vx','2', 'phone');
commmit;The output needed is :
<EvaluatePatient>
<PatientInformation>
<Patient>
<mrn>100</mrn>
<CSN>3a1</CSN>
<Gender>F</Gender>
<race>AA</race>
<ID>23vx2</ID>
<Name>phone</Name>
</Patient>
<Orders> <!-- XML from orders here, if applicable --> </Orders>
<Immunizations> <!-- XML from orders here, if applicable --> </Immunizations>
<ProblemList></ProblemList>
</PatientInformation>
<PatientInformation>
<Patient>
<mrn>101</mrn>
<CSN>1a2</CSN>
<Gender>M</Gender>
<race>HA</race>
<ID></ID>
<Name></Name>
</Patient>
<Orders> <!-- XML from orders here, if applicable --> </Orders>
<Immunizations> <!-- XML from orders here, if applicable --> </Immunizations>
<ProblemList></ProblemList>
</PatientInformation>
</EvaluatePatient>Based on the above, I created a table (which is of xml) ...not sure if it's good way or use the query as it is instead of creating a table.
Create table temp_xml
as
Select XMLELEMENT("PatientInformation",(XMLELEMENT("Patient",
XMLELEMENT("mrn", s.identity_id),
XMLELEMENT("CSN", m.csn),
XMLELEMENT("Gender", p.gender),
XMLELEMENT("race", p.race),
XMLELEMENT("ID", r.csn_id || r.line),
XMLELEMENT("Name", r.enc_reason_name))),
XMLELEMENT ("Orders", NULL),
XMLELEMENT ("Immunizations", NULL),
XMLELEMENT ("ProblemList", NULL)) cola
from identity s
join CM_ENCOUNTER m
on m.identity_id = s.identity_id
join CM_PATIENT p
on m.identity_id = p.identity_id
left outer join CM_ENCOUNTER_RFV r
on m.identity_id = r.identity_id;Now, I need to write each record into xml file..
I have the following code..but right now, i have very few rows..SO, this works fine..
Just thinking about the future, where there will be millions of rows..possibly this code might lead to memory issues especially XMLAGG part...
Is there any other way instead of using XMLAGG or go with XMLAGG??
DECLARE
-- Data Variables
v_xml XMLTYPE;
v_blob BLOB;
v_data_length NUMBER;
-- Loop Control Variables
v_offset NUMBER DEFAULT 1;
v_chunk CONSTANT NUMBER DEFAULT 4000;
-- UTL_FILE variables
fh UTL_FILE.file_type;
BEGIN
SELECT XMLELEMENT ("EvaluatePatient", XMLAGG (cola))
INTO v_xml
FROM temp_xml;
-- Turn the XML into a BLOB to bypass any 4k and 32k issues
v_blob := v_xml.getblobval (1);
v_data_length := DBMS_LOB.getlength (v_blob);
-- Open the file
fh := UTL_FILE.fopen ('PLSQL_DIR', 'myxml.xml', 'wb', v_chunk);
-- Da loop de loop
LOOP
-- Exit when our file offset is bigger than our file
EXIT WHEN v_offset > v_data_length;
-- Write the output chunk by chunk
UTL_FILE.put_raw (fh, DBMS_LOB.SUBSTR (v_blob, v_chunk, v_offset),
TRUE);
-- Increment the offset by the amount written
v_offset := v_offset + v_chunk;
END LOOP;
-- Close the file and say byebye
UTL_FILE.fclose (fh);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- We won't write any data, or even open the file,
-- if the query return no rows
NULL;
END;Also need to attach the soap envelope to the above xml output..
Not sure how add this ...
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">urn:Epic-com:DecisionSupport.2012.Services.Patient.EvaluatePatient</a:Action>
<a:MessageID>Some unique string here</a:MessageID> -- generate unique string based on the file produced for audit purposes
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2012-11-06T21:36:36.244Z</u:Created>
<u:Expires>2012-11-06T21:41:36.244Z</u:Expires>
</u:Timestamp>
<o:UsernameToken>
<o:Username>username</o:Username>
<o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<EvaluatePatient xmlns="urn:Epic-com:DecisionSupport.2012.Services.Patient">
xml generated from above
</EvaluatePatient>
</s:Body>
</s:Envelope>Thanks.
user7431648 wrote:
Based on the above, I created a table (which is of xml) ...not sure if it's good way or use the query as it is instead of creating a table.Just query your base tables directly.
Were you intending to recreate the temp table every single time you want to extract data ?
I have the following code..but right now, i have very few rows..SO, this works fine..
Just thinking about the future, where there will be millions of rows..possibly this code might lead to memory issues especially XMLAGG part...
Is there any other way instead of using XMLAGG or go with XMLAGG??Do you want to extract all your data in a single file? No filter predicate ?
Are you also intending to send a SOAP message containing millions of logical records ?
The other way around XMLAgg is an iterative approach that will fetch each record and append them to a LOB.
SELECT XMLELEMENT ("EvaluatePatient", XMLAGG (cola))
INTO v_xml
FROM temp_xml;
-- Turn the XML into a BLOB to bypass any 4k and 32k issues
v_blob := v_xml.getblobval (1);
v_data_length := DBMS_LOB.getlength (v_blob);getBlobVal() is deprecated, use XMLSerialize instead :
SELECT XMLSerialize(document
XMLElement( ... )
as blob
encoding ' ... '
Also need to attach the soap envelope to the above xml output..
Not sure how add this ...Well, the same way you build the body, using SQL/XML functions.
Similar Messages
-
When I extract the following from result handler xml, the \n display as \n in TextArea. How can I extract from result so they are actually line breaks?
<EmailText>Thank you for reporting this to us.\nPlease include the city you are in.</EmailText>
private function onGotResult(event:RestServiceResponse):void {
var defaultEmailTextValue:String = resultData..EmailText;Tried that, \n still displayed in textarea.
One thing I tried holds promise. If the text has line breaks without characters, like this:
This is the first line.
This is the second line.
Then no problem, EXCEPT that when the text is rendered in the text area an extra line break seems to be added. In fact everytime you save another line break is added. So save (which returns you to another page) and then return to the page with the text area, and you see this:
This is the first line.
This is the second line.
Save again and you see this:
This is the first line.
This is the second line.
I've done some tracing, and I can't find anywhere this is added, certainly not in my code. -
Handling xml message of size more than 100mb in SAP PI 7.1
Dear Experts,
Is it possible for PI to pick-up and process a XML message of size more than 100 MB in PI 7.1 EHP-1?
If yes, can you please let me know how to handle it?
Thank you.Hi Saravana,
it is not a best practice to more than 100mb..
you can increase below parameters and so that you would be able to process for the best..
u2022 UME Parameters : May be we need to look into the pool size and poolmax wait parameters - UME recommended parameters (like: poolmaxsize=50, poolmaxwait=60000)
u2022 Tuning Parameters: May be we need to look/define the Message Size Limit u201Clike: EO_MSG_SIZE_LIMIT = 0000100u201D under tuning category
u2022 ICM Parameters: May be we need to consider ICM parameters (ex: icm/conn_timeout = 900000. icm/HTTP/max_request_size_KB = 2097152)
Thanks and Regards,
Naveen -
How to handle xml message in proxy inbound processing?
Hi Experts,
I have a scenario that is SOAP Client====>XI===>ECC.
But i don't need to use the XI mapping,i skip mapping
in XI and use the generated proxy inbound processing.
Here is a message structure as below.
<commodityList>
■<commodity>
■■<detailNo>303303</detailNo>
■■<makerName>sony</makerName>
■■<ChargeInfoList>
■■■<productId>aaaa</productId>
■■■<name>bbb</name>
■■</ChargeInfoList>
■</commodity>
</commodityList>
When i sent the message without field entry of <productId>
and <name> i got the response in soap client as below.
<commodityList>
■<commodity>
■■<detailNo>303303</detailNo>
■■<makerName>sony</makerName>
■</commodity>
</commodityList>
The field tag <ChargeInfoList> doesn't display.
But i want it to display as below.
<commodityList>
■<commodity>
■■<detailNo>303303</detailNo>
■■<makerName>sony</makerName>
■■<ChargeInfoList>
■</commodity>
</commodityList>
In case of field entry is empty,how to let the response
contains tag?
As i know ,there is a CONTROLLER in proxy .
But i don't know if it is relevant to this
case and i don't know how to handle it.
BrandHi Mrudula,
As far as i know there are no content conversion methodology for HTTPS as the recevier adapter.
Also you can read through these links to confirm the same:
http://help.sap.com/saphelp_nw04/helpdata/en/0d/5ab43b274a960de10000000a114084/content.htm
http://publib.boulder.ibm.com/infocenter/wbihelp/v6rxmx/index.jsp?topic=/com.ibm.wbia_adapters.doc/doc/sap_xi/sapximst30.htm
SAP NetWeaver - XML Communication Interface (CA-XML) [original link is broken]
Regards,
abhy
note: reward the helpful. -
I was hoping someone could tell me if I'm doing something stupid or a much harder way then needed.
I have some data that is stored in an xml file. Probably 150 items (will stay around this number) with less then a dozen attributes per item.
The name of each of these will be loaded into a list on a jsp. When clicking on an item the details will be displayed on the page below it.
Right now my plan is to:
!. read the file in on application startup and store the items in a collection of beans in the session, or maybe at application scope.
2. Then in the jsp use AJAX and pass the items ID to a servlet.
3. The servlet pulls the collection out of session or application scope and find the correct item and sends it back as xml.
4. Then either parse the xml or use JSON to convert it to an object.
5. Populate the fields on the jsp.
I'm just worried that I'm doing something incredibly inefficient or stupid.
With only 150 items would I be better served just loading all the items into a multi dimensional javascript array on loading the page and just get rid of AJAX all together?Comments are shown below preceeded by *******:
I was hoping someone could tell me if I'm doing something stupid or a much harder way then needed.
**** Yes, I think its much harder than it needs to be.
I have some data that is stored in an xml file. Probably 150 items (will stay around this number) with less then a dozen attributes per item.
****** Normally, such data is stored in a database table (no xml involved). However, you can store them in a file if you want.
****** If you store it in a file, I suggest not using xml. Its an advanced topic. I suggest using a tab delimited file (you can use a text editor to create it).
The name of each of these will be loaded into a list on a jsp. When clicking on an item the details will be displayed on the page below it.
***** ok, so far
Right now my plan is to:
!. read the file in on application startup and store the items in a collection of beans in the session, or maybe at application scope.
****** Your options are:
***** request scope: need to read the file each time the user needs the data. Not efficient.
****** session scope: data lasts as long as user is logged on. Good idea.
****** application scope: data lasts after the user logs off. Bad idea. takes up memory permidently. Must remove it from application scope when last user logs off.
****** Store it in a database: best idea, but takes time to learn.
2. Then in the jsp use AJAX and pass the items ID to a servlet.
****** Dont use AJAX, its an advanced topic. Learn JSP and XHTML first.
3. The servlet pulls the collection out of session or application scope and find the correct item and sends it back as xml.
****** send it back via request.setAttribute() and read it on the JSP via <useBean>. xml is not the way to go.
4. Then either parse the xml or use JSON to convert it to an object.
****** dont use xml.
5. Populate the fields on the jsp.
***** Yes. Note JSP should not contain business logic. Business logic should be done in a servlet. The servlet should put data in request scope
for the JSP to populate itself. The data objects put in request scope should contain just data, no business logic functionality.
I'm just worried that I'm doing something incredibly inefficient or stupid.
***** Best way to learn is to try stuff out and make your next project better than the previous.
With only 150 items would I be better served just loading all the items into a multi dimensional javascript array on loading the page and just get rid of AJAX all together?
******** Javascript is an advanced topic. Its main purpose on the JSP is to handle simple onclick events from html tags and to do some basic client side validation.
***** I believe a book on JSP would be very helpful. -
Handling XMLs with unknown structures.
Hello Experts,
I have to build a generic interface RFC -> PI -> JMS, which will receive XML structure as a string in import parameter of RFC.
Then I need to convert this string to XML, add digital signatures and then output the signed payload to JMS Queues.
I have been looking at SDN posts and found that XSLT can be used to convert string to XML. But the catch is I am not aware of the XML structures that will be sent in as a string. So how can I handle these unknown structures? Or what should be the structure of the target Interface for XSLT mapping??
Any inputs on this will be of great help.
Kind Regards,
PIQueries_2010If you dont want the target structure to be validated XSLT/java mapping is the way to go as pointed out by MIchal.
If you use the new feature, I believe it will validate the target structure.
@Michal,
Just a quick clarification, when we use java/xslt mapping to skip target message validation in PI 7.1 is it mandatory to have the operation name exactly same as Service Interface name? I recently ran into an issue where the Service interface name was different from the operation name and the Java mapping was giving an error saying "Unable to validate root element" or something similar (Ofcourse, the content was binary file and hence java mapping to skip the target structure validation).
Thanks
Jai -
How to handle XML string with Single Quotes as a parameter to SP dynamically?
Hi,
I would like to know if there is a way to handle the Single Quotes in XML value when it is passed to Stored Procedure?
I should be able to handle it without adding another Single Quote to it.
Thanks,
Chandra ShekarHi Chandra,
Your requirement is not precise. Based on my understanding and guessing, are you metioning something like the below sample?
/*If the xml is generated you have no need to escape the singe quote(')*/
DECLARE @xmlTbl TABLE (ID INT,name VARCHAR(99));
INSERT INTO @xmlTbl VALUES(1,'Eric''s')
INSERT INTO @xmlTbl VALUES(2,'Zhang''s')
DECLARE @xmlDoc1 XML
SELECT @xmlDoc1
FROM @xmlTbl FOR XML PATH('PERSON'),ROOT('PERSONS')
EXEC yourProcedure @xmlDoc1
/*If your copy and paste the xml, you have to escape the single quote(') with 2s('')*/
DECLARE @xmlDoc2 XML
SET @xmlDoc2 = '<PERSONS>
<PERSON>
<ID>1</ID>
<name>Eric''s</name>
</PERSON>
<PERSON>
<ID>2</ID>
<name>Zhang''s</name>
</PERSON>
</PERSONS>'
EXEC yourProcedure @xmlDoc2
If that is not regarding your requirement, please elaborate with more details.
Eric Zhang
TechNet Community Support -
Inconsistent datatypes:expected - got - error in handling xml
hi i am getting the error Error(45,12): PL/SQL: ORA-00932: inconsistent datatypes: expected - got - in this procedure
i tried a lot and landed in confused state..
create or replace
PROCEDURE BT_CPE_XML_READ1 IS
dest_clob CLOB;
src_clob BFILE := BFILENAME('DOC_PATH', 'tester.xml');
dst_offset number := 1 ;
src_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning number;
ex number;
v_cast xmltype;
v_varchar varchar2(32767);
BEGIN
DBMS_LOB.CREATETEMPORARY(dest_clob,true);
ex := dbms_lob.fileexists(src_clob);
if ex = 1 then
INSERT INTO test_clob(id, file_name, XML_FILE_COLUMN, timestamp)
VALUES(1001, 'test.xml', empty_clob(), sysdate)
RETURNING XML_FILE_COLUMN INTO dest_clob;
DBMS_LOB.OPEN(src_clob, DBMS_LOB.LOB_READONLY);
DBMS_LOB.LoadCLOBFromFile(
DEST_LOB => dest_clob
, SRC_BFILE => src_clob
, AMOUNT => DBMS_LOB.GETLENGTH(src_clob)
, DEST_OFFSET => dst_offset
, SRC_OFFSET => src_offset
, BFILE_CSID => DBMS_LOB.DEFAULT_CSID
, LANG_CONTEXT => lang_ctx
, WARNING => warning
DBMS_OUTPUT.ENABLE(100000);
DBMS_LOB.CLOSE(src_clob);
COMMIT;
DBMS_OUTPUT.PUT_LINE('Loaded XML File using DBMS_LOB.LoadCLOBFromFile: (ID=1001).');
v_cast :=xmltype(dest_clob);
--dbms_output.put_line(v_cast);
select extractvalue(XML_FILE_COLUMN,'/modifyProductPortfolioRequest/ns1:stateCode') from test_clob;
end if;
END BT_CPE_XML_READ1;
is there any other way to get the value(xml)from the clob column of a tableI see two issues off a quick eye-ball of the code<br><br>
#1) You insert an empty clob into your table, load a local variable with the XML from disk, and then query the table. You never insert the XML into the table so you are querying on an empty column in the table.<br><br>
#2) extractValue allows a third parm which is the namespace string. Since your XPath contains ns1: you'll need to use the third parm -
How to handle xml CDATA string element when OSB calling a webservice
Hi
Right, I'm new to OSB so bear with me.
The following is a response from am operation in a webservice.
As you can see there is a CDATA string in "<m:return>" element. I want to transform the CDATA string to XML.
I have searched the forum and found a couple of similar queries and tried following the answers and this is what I'm getting.
Please advise as to where I have gone wrong and how I can correct it.
<env:Body xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<m:ReservationCancelResponse xmlns:m="http://domain/jws">
<m:return>
<![CDATA[<?xml version="1.0" encoding="UTF-8"?><ReservationCancelNegativeAck><MessageId>HGv2OWS6hq</MessageId><ReservationNum>1234</ReservationNum><CsrId></CsrId><ErrorCode>02</ErrorCode><ErrorMessage>Reservation '1234' does not exist.</ErrorMessage></ReservationCancelNegativeAck>]]>
</m:return>
</m:ReservationCancelResponse>
</env:Body>
In my response pipeline I have an Assign and Replace action.
My Assign is:
Expression: fn-bea:inlinedXML($body)
Variable: reservationCancelReponse
When I log $reservationCancelReponseI get... so this bit is OK.
<ReservationCancelNegativeAck>
<MessageId>HGv2OWS6hq</MessageId>
<ReservationNum>1234</ReservationNum>
<CsrId/>
<ErrorCode>02</ErrorCode>
<ErrorMessage>Reservation '1234' does not exist.</ErrorMessage>
</ReservationCancelNegativeAck>
My Replace
XPath: executeResponse/executeReturn/text()
In Variable: body
Expression: responseTransform.xq (binding with $reservationCancelReponse)
Replace Node Contents is checked
When I test the operation using the proxy service I get the following:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<m:ReservationCancelResponse xmlns:m="http://com/ventyx/abws/jws">
<m:return>
<?xml version="1.0" encoding="UTF-8"?><ReservationCancelNegativeAck><MessageId>HGv2OWS6hq</MessageId><ReservationNum>1234</ReservationNum><CsrId></CsrId><ErrorCode>02</ErrorCode><ErrorMessage>Reservation &apos;1234&apos; does not exist.</ErrorMessage></ReservationCancelNegativeAck>
</m:return>
</m:ReservationCancelResponse>
</env:Body>
</env:Envelope>
The CDATA string hasn't been transformed.
Please help. What I have I missed.
Thanks in advance.
MIOK
I have made some amendments to the original process and made some progress but still isn't quite right.
I have created a schema:
<complexType name="ReservationCancelNegativeAckType">
<sequence>
<element name="MessageId" minOccurs="0">
<annotation>
<documentation>
</documentation>
</annotation>
<simpleType>
<restriction base="string" />
</simpleType>
</element>
<element name="ReservationNum" minOccurs="0">
<annotation>
<documentation>
</documentation>
</annotation>
<simpleType>
<restriction base="string" />
</simpleType>
</element>
<element name="CsrID" minOccurs="0">
<annotation>
<documentation>
</documentation>
</annotation>
<simpleType>
<restriction base="string" />
</simpleType>
</element>
<element name="ErrorCode" minOccurs="0">
<annotation>
<documentation>
</documentation>
</annotation>
<simpleType>
<restriction base="string" />
</simpleType>
</element>
<element name="ErrorDescription" minOccurs="0">
<annotation>
<documentation>
</documentation>
</annotation>
<simpleType>
<restriction base="string" />
</simpleType>
</element>
</sequence>
</complexType>
<element name="ReservationCancelNegativeAckType"
type="tns:ReservationCancelNegativeAckType">
</element>
I have amended the earlier Assign action to use an XQ to extract the CDATA string into the schema
My Assign is:
Expression: responseToSchema.xq
Variable: reservationCancelReponse
When I log $reservationCancelReponse variable I get... so this bit is OK.
<ReservationCancelNegativeAck>
<MessageId>HGv2OWS6hq</MessageId>
<ReservationNum>1234</ReservationNum>
<CsrId/>
<ErrorCode>02</ErrorCode>
<ErrorMessage>Reservation '1234' does not exist.</ErrorMessage>
</ReservationCancelNegativeAck>
I have also changed my Replace, this time I am using an XQ which will map the schema to the XSD WSDL "ReservationCancelResponse"operation.
XPath: .
In Variable: body
Expression: responseFromSchemaToService.xq (binding with $reservationCancelReponse)
Replace Node Contents is checked
XSD WSDL is:
<xsd:element name="ReservationCancelResponse"
type="tns:ReservationCancelResponseType">
</xsd:element>
<xsd:complexType name="ReservationCancelResponseType">
<xsd:sequence>
<xsd:element name="ResponseCode"
type="xsd:string">
</xsd:element>
<xsd:element name="ResponseDescription"
type="xsd:string">
</xsd:element>
<xsd:element name="MessageID" type="xsd:string">
</xsd:element>
<xsd:element name="ReservationNum" type="xsd:string">
</xsd:element>
<xsd:element name="CsrId" type="xsd:string">
</xsd:element>
<xsd:element name="ErrorCode" type="xsd:string"
minOccurs="0">
</xsd:element>
<xsd:element name="ErrorDescription" type="xsd:string" minOccurs="0"></xsd:element>
</xsd:sequence>
</xsd:complexType>
This time the response is better but not right.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"/>
<env:Body xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<app:ReservationCancelResponse xmlns:app="http://www.example.org/AppointmentService/">
<ResponseCode>0</ResponseCode>
<ResponseDescription/>
<MessageID/>
<ReservationNum/>
<CsrId/>
</app:ReservationCancelResponse>
</env:Body>
</soapenv:Envelope>
As you can see the tags are empty. (For info: The "ResponseCode" and "ResponseDescription" are constants)
Where have I gone wrong? -
How does XML DB handle XML Schema Validation ?
In order to validate an XML document against an XML Schema using Oracle XML DB the XML Schema must first be registered with XML DB using the method registerSchema provided by the package DBMS_XMLSCHEMA.
XDB provides two types of schema validation, 'Lax' Validation and 'Strict' Validation.
'Lax' validation takes place whenever a schema based document is converted from it's textual representation into the XML DB internal object model. Errors caught by this validation will be prefixed with 'ORA'.
'Stict' validation takes place when the XMLType methods schemaValidate() or isSchemaValid() are invoked.
The schemaValidate() method throws an exception with an error message indicating what is wrong it encounteres an invalid document. The error message associated with the exception will be prefixed with LSX.
The isSchemaValid() method returns true or false, depending on whether or not the document is valid. It cannot return any information about why the document is invalid.
The reason for having both the Lax and Strict validation models is that Strict validation is much more expensive in terms of CPU and memory usage than Lax validation.Here are some examples of what is caught by Lax validation (ORA errors) and what is only caught by Strict validation (LSX errors).
SQL> begin
2 dbms_xmlschema.registerSchema('test',xmltype(
3 '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.co
eFormDefault="unqualified">
4 <xs:complexType name="RootType">
5 <xs:sequence>
6 <xs:element name="Mandatory"/>
7 <xs:element name="Enumeration">
8 <xs:simpleType>
9 <xs:restriction base="xs:string">
10 <xs:enumeration value="A"/>
11 <xs:enumeration value="B"/>
12 <xs:enumeration value="C"/>
13 </xs:restriction>
14 </xs:simpleType>
15 </xs:element>
16 <xs:element name="MinLength">
17 <xs:simpleType>
18 <xs:restriction base="xs:string">
19 <xs:minLength value="4"/>
20 <xs:maxLength value="20"/>
21 </xs:restriction>
22 </xs:simpleType>
23 </xs:element>
24 <xs:element name="MaxLength">
25 <xs:simpleType>
26 <xs:restriction base="xs:string">
27 <xs:minLength value="1"/>
28 <xs:maxLength value="4"/>
29 </xs:restriction>
30 </xs:simpleType>
31 </xs:element>
32 <xs:element name="MaxOccurs" type="xs:string" maxOccurs="2"/>
33 <xs:element name="MinOccurs" minOccurs="2" maxOccurs="2"/>
34 <xs:element name="Optional" type="xs:string" minOccurs="0"/>
35 </xs:sequence>
36 </xs:complexType>
37 <xs:element name="Root" type="RootType" xdb:defaultTable="ROOT_TABLE"/>
38 </xs:schema>'));
39 end;
40 /
PL/SQL procedure successfully completed.
SQL> --
SQL> -- Valid Document
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
1 row created.
SQL> --
SQL> -- Undefined element 'Illegal'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Illegal>Hello World</Illegal>
5 <Enumeration>A</Enumeration>
6 <MinLength>ABCD</MinLength>
7 <MaxLength>WXYZ</MaxLength>
8 <MaxOccurs>1</MaxOccurs>
9 <MaxOccurs>2</MaxOccurs>
10 <MinOccurs>1</MinOccurs>
11 <MinOccurs>2</MinOccurs>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30937: No schema definition for 'Illegal' (namespace '##local') in parent
'/Root'
SQL> --
SQL> -- Multiple occurences of 'Optional'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30936: Maximum number (1) of 'Optional' XML node elements exceeded
SQL> --
SQL> -- Missing element 'Manadatory'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Enumeration>A</Enumeration>
4 <MinLength>ABCD</MinLength>
5 <MaxLength>WXYZ</MaxLength>
6 <MaxOccurs>1</MaxOccurs>
7 <MaxOccurs>2</MaxOccurs>
8 <MinOccurs>1</MinOccurs>
9 <MinOccurs>2</MinOccurs>
10 <Optional>Goodbye</Optional>
11 </Root>'
12 ))
13 /
1 row created.
SQL> --
SQL> -- Invalid Enumeration Value
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>Z</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-31038: Invalid enumeration value: "Z"
SQL> --
SQL> -- MinLength Violation
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABC</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 --
15 -- MaxLength Violation
16 --
17 /
1 row created.
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>VWXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30951: Element or attribute at Xpath /Root/MaxLength exceeds maximum length
SQL> --
SQL> -- Missing element Optional - Valid Document
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 </Root>'
12 ))
13 /
1 row created.
SQL> --
SQL> -- Too many instances of 'MaxOccurs'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MaxOccurs>3</MaxOccurs>
10 <MinOccurs>1</MinOccurs>
11 <MinOccurs>2</MinOccurs>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30936: Maximum number (2) of 'MaxOccurs' XML node elements exceeded
SQL> --
SQL> -- Too few instances of 'MinOccurs'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <Optional>Goodbye</Optional>
11 </Root>'
12 ))
13 /
1 row created.
SQL> create trigger validateSchema
2 before insert on ROOT_TABLE
3 for each row
4 begin
5 :new.object_value.schemaValidate();
6 end;
7 /
Trigger created.
SQL> --
SQL> -- Valid Document
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
1 row created.
SQL> --
SQL> -- Undefined element 'Illegal'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Illegal>Hello World</Illegal>
5 <Enumeration>A</Enumeration>
6 <MinLength>ABCD</MinLength>
7 <MaxLength>WXYZ</MaxLength>
8 <MaxOccurs>1</MaxOccurs>
9 <MaxOccurs>2</MaxOccurs>
10 <MinOccurs>1</MinOccurs>
11 <MinOccurs>2</MinOccurs>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30937: No schema definition for 'Illegal' (namespace '##local') in parent
'/Root'
SQL> --
SQL> -- Multiple occurences of 'Optional'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30936: Maximum number (1) of 'Optional' XML node elements exceeded
SQL> --
SQL> -- Missing element 'Manadatory'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Enumeration>A</Enumeration>
4 <MinLength>ABCD</MinLength>
5 <MaxLength>WXYZ</MaxLength>
6 <MaxOccurs>1</MaxOccurs>
7 <MaxOccurs>2</MaxOccurs>
8 <MinOccurs>1</MinOccurs>
9 <MinOccurs>2</MinOccurs>
10 <Optional>Goodbye</Optional>
11 </Root>'
12 ))
13 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-31154: invalid XML document
ORA-19202: Error occurred in XML processing
LSX-00213: only 0 occurrences of particle "Mandatory", minimum is 1
ORA-06512: at "SYS.XMLTYPE", line 345
ORA-06512: at "XDBTEST.VALIDATESCHEMA", line 2
ORA-04088: error during execution of trigger 'XDBTEST.VALIDATESCHEMA'
SQL> --
SQL> -- Invalid Enumeration Value
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>Z</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-31038: Invalid enumeration value: "Z"
SQL> --
SQL> -- MinLength Violation
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABC</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 --
15 -- MaxLength Violation
16 --
17 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-31154: invalid XML document
ORA-19202: Error occurred in XML processing
LSX-00221: "ABC" is too short (minimum length is 4)
ORA-06512: at "SYS.XMLTYPE", line 345
ORA-06512: at "XDBTEST.VALIDATESCHEMA", line 2
ORA-04088: error during execution of trigger 'XDBTEST.VALIDATESCHEMA'
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>VWXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 <Optional>Goodbye</Optional>
12 </Root>'
13 ))
14 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30951: Element or attribute at Xpath /Root/MaxLength exceeds maximum length
SQL> --
SQL> -- Missing element Optional - Valid Document
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <MinOccurs>2</MinOccurs>
11 </Root>'
12 ))
13 /
1 row created.
SQL> --
SQL> -- Too many instances of 'MaxOccurs'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MaxOccurs>3</MaxOccurs>
10 <MinOccurs>1</MinOccurs>
11 <MinOccurs>2</MinOccurs>
12 <Optional>Goodbye</Optional>
13 </Root>'
14 ))
15 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-30936: Maximum number (2) of 'MaxOccurs' XML node elements exceeded
SQL> --
SQL> -- Too few instances of 'MinOccurs'
SQL> --
SQL> insert into ROOT_TABLE values (xmltype(
2 '<Root>
3 <Mandatory>Hello World</Mandatory>
4 <Enumeration>A</Enumeration>
5 <MinLength>ABCD</MinLength>
6 <MaxLength>WXYZ</MaxLength>
7 <MaxOccurs>1</MaxOccurs>
8 <MaxOccurs>2</MaxOccurs>
9 <MinOccurs>1</MinOccurs>
10 <Optional>Goodbye</Optional>
11 </Root>'
12 ))
13 /
insert into ROOT_TABLE values (xmltype(
ERROR at line 1:
ORA-31154: invalid XML document
ORA-19202: Error occurred in XML processing
LSX-00213: only 1 occurrences of particle "MinOccurs", minimum is 2
ORA-06512: at "SYS.XMLTYPE", line 345
ORA-06512: at "XDBTEST.VALIDATESCHEMA", line 2
ORA-04088: error during execution of trigger 'XDBTEST.VALIDATESCHEMA'
SQL> -
How does Firefox handle xml:base when generating GET requests for SVG image elements?
I am loading an SVG image at the following URL:
http://localhost/howl/svg/id/543
The source for this SVG code is:
<svg xml:base="/howl/">
<svg width="535" height="325" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="file/id/532" />
</svg>
</svg>
As you can see, the SVG code is located at one path, but the <image> is relative to the root, hence the wrapping xml:base attribute.
The actual requests in Firefox, according to Tomcat Logging are:
GET /howl/svg/id/543
GET /howl/file/id/532
However, Firebug's Net tab shows these requests:
GET /howl/svg/id/543
GET /howl/svg/id/file/id/532 (Incorrect, doesn't happen)
GET /howl/file/id/532
When I test the same thing in Safari and Chrome, all three GET requests actually happen, the incorrect one resolving in a 404.
I suspect that Firefox is generating all three requests, but discarding the incorrect one and Firebug is not aware of this. As a result, Firebug shows all three requests, but the incorrect one never resolves.
So, I'm curious about the behavior or whether I am doing this incorrectly.
Thanks!A good place to ask questions and advice about web development is at the mozillaZine Web Development/Standards Evangelism forum.<br />
The helpers at that forum are more knowledgeable about web development issues.<br />
You need to register at the mozillaZine forum site in order to post at that forum.<br />
See http://forums.mozillazine.org/viewforum.php?f=25 -
How to Handling XML footnote which have attributes
Hi all,
I searched in this forum related to XML footnote discussion. Still I need more clarification/discussion related to this process.
I need maximum input and suggestion related to this topic to streamline our process.
Our projects have around minimum 50 to 900 footnotes for each chapters, our client requirement is XML-IN workflow.
The problem here is all our footnotes have attributes, like "url", "xref for Ibid" etc.
<note id="law-9780199691654-note-003001" type="footnote"><p><enumerator><sup>1</sup></enumerator> Sources from the IMF, available at <url webUrl="http://en.wikipedia.org/wiki/Economy_of_the_People%27s_Republic_of_China#cite_note-0">http://en.wikipedia.org/wiki/Economy_of_the_People%27s_Republic_of_China#cite_note-0</url>>.</p></note>
<note id="law-9780199691654-note-003002" type="footnote"><p><enumerator><sup>2</sup></enumerator> Detailed statistics available at the National Statistics Database developed by the National Bureau of Statistics of China, at <url webUrl="http://219.235.129.58">http://219.235.129.58</url>>.</p></note>
<note id="law-9780199691654-note-003004" type="footnote"><p><enumerator><sup>4</sup></enumerator> <bibItem linkType="mentioned" id="law-9780199691654-bibItem-4" class="other"><xrefGroup><xref ref="law-9780199691654-bibItem-03">Ibid</xref></xrefGroup>.</bibItem></p></note>
<note id="law-9780199691654-note-003005" type="footnote"><p><enumerator><sup>5</sup></enumerator> <bibItem linkType="mentioned" id="law-9780199691654-bibItem-5" class="other"><xrefGroup><xref ref="law-9780199691654-bibItem-4">Ibid</xref></xrefGroup></bibItem>.</p></note>
As we know that when we convert XML footnote to Indesign autofootnote, we will lost all the attributes.
Till enumerator I can store it in TextStream itself "<note id="law-9780199691654-note-003001" type="footnote"><p><enumerator><sup>1</sup></enumerator>.
Once I convert it to auto footnote, I lost rest of the attributes, when I export to XML I am just getting the text (eg. "Ibid")
Please share your thoughts/suggestion (how can we store the attributes let it be in any form).
If I change my workflow to 2 text stream process.
Two text frames, one for Text and the other for Footnote. can we automate the process.
Thanks in advance.
ShajiYou cannot apply xml tag for the idesign's footnote. Indesign will not allow you tag it. File a feature request for this. I think somebody did it already, google it.
If you want xml tags along with, you have to use individual text frames for the footnotes,
Green4ever -
Can Labview PDA handle XML?
I have spent about a week using the Labview PDA 8.0 development tools and now have acquisition vi's running and storing data, etc...
There is a push in my organization to use XML to tag data. I am still learning what this means, but I thought I would ask if there is any example code, app notes, etc... on XML, Labview, and Labview PDA.
Thanks for any pointer!
JohnI haven't used it yet but saw that there is some example code in LabVIEW to read/write data from/to XML files.
Go to Help >> Find examples... to launch the NI example finder.vi and then go to the "search" tab, type xml, there are 3 example VIs.
Hope you'll find what you need there
When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!" -
Problems handling xml data for tree control.
Hi,
I have tried using tree control for displaying my xml data
but I had a problem that i did not have labels in my xml data. A
sample xml data is attached. So it displays the whole data at each
level in the tree. The root label will be the entire the xml data
and then one level down the remaining xml data and so on...
How do i solve this issue i,e get the tags names itself as
labels..
Thanks in advance....An update after some efforts..
Could get the folders perfectly i.e until the level of
CPUTime perfectly but could not get the leaf: 32 since i used the
following to set the label.
I would like to know if there is a way to find out if a node
is a leaf or folder and according set the label -
XML Elements Handling in Incopy
Hi Experts,
I'm trying to capture particular type of xml elements and process with that element's content. It's easy in Indesign. But In Incopy, If i use glue code functions, it's throwing error due to unavailability of 'xmlRuleProcessor' property in incopy. Is there any way to achieve this? Is there any specified file like gluecode.jsx to support and handle XML Structure in Incopy?
Thanks & Regards,
Vel.Hi Experts,
I'm trying to capture particular type of xml elements and process with that element's content. It's easy in Indesign. But In Incopy, If i use glue code functions, it's throwing error due to unavailability of 'xmlRuleProcessor' property in incopy. Is there any way to achieve this? Is there any specified file like gluecode.jsx to support and handle XML Structure in Incopy?
Thanks & Regards,
Vel.
Maybe you are looking for
-
Business Partner Request / Creation
Is there a standard process available in SAP to request, validate, approve and create Business Partners (Vendors and Customers). Basically users of SAP or customers or vendors itself can enter basic information like address, Tax ID etc and request th
-
1st up, great looking board, so much nicer on the eye that some others and its better in person than on screen but i do have a couple of issues. first of the bios, its not showing right on my screen. i think its because my screen is only reporting as
-
Moving photos within film strip
Hi, I apologize in advance for such a rudimentary question, but what would be the fastest and easiest way to move one or more photos from one end of the filmstrip, to the other? I know I can just select the photos I want to move, drag them to the edg
-
Can someone briefly explain what is SPAU and SPDD
Hi All, I would like to have some clarity on SPAU and SPDD. Different sites show different explanations. Can someone briefly describe them? Thanks Vijay
-
Hello! I have done some programming in MS Excel(VBA) - source data are taken from bw and erp systems. This program does complicated computation based on the source data and it takes few hours to execute. Results are later analyzed with different Exce