XML Message Body Selector in Automation
Hi,
I'm having some trouble implementing a XML Message Body Selector in an automated task. I'm running OSM 7.2.0.7 in a Unix environment and using Design Studio 7.2.1.
I'm sendind in my request to an external system a request tthe following string: OSM-TaskName-%{CARTRIDGE_VERSION}
<Request>
<Header>
<dueDate>20131128</dueDate>
<application>OSM-MSS_Lookup-1.0.0.0.5</application>
</Header>
</Request>
The response of MSS is:
<Response>
<Header>
<dueDate>20131128</dueDate>
<application>OSM-MSS_Lookup-1.0.0.0.5</application>
</Header>
In the selector I've tried different XPath expressions:
Select:
/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']/text()
*[local-name() ='Responset']/*[local-name()='Header']/*[local-name()='application']/text()
//*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']/text()
/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
//*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
/Response/Header/application
/Response/Header/application/text()
Compare: OSM-MSS_Lookup-%{CARTRIDGE_VERSION}
I keep getting the following error in the log file for the differente selectors:
####<Nov 28, 2013 10:34:31 AM CST> <Info> <oms> <hostname> <SOM_ManagedServer_1> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'
> <sceadmin> <BEA1-49AB960B7AE5258D5CC8> <0710a255d6bbb54d:-1d6ed94c:142960580fb:-8000-0000000000026363> <1385656471431> <BEA-000000> <api.e:
namespace/version: SOM_Cartridge/1.0.0.0.5
automator type: taskAutomator
plugin JNDI name: MSS_Lookup.automatedtask.somprovisioning.MSS_LookupReceiverBean
plugin class name: oracle.communications.ordermanagement.automation.plugin.XQueryReceiver
run plugin as: oms-automation receiver:
type: external
JMS source: sky/MSS/Product/WebServiceResponseQueue
message [property|body] selector: JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'
####<Nov 28, 2013 10:34:31 AM CST> <Warning> <EJB> <hostname> <SOM_ManagedServer_1> <[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'> <oms-automation> <> <0710a255d6bbb54d:-1d6ed94c:142960580fb:-8000-000000000002650a> <1385656471454> <BEA-010061> <The Message-Driven EJB: MSS_Lookup.automatedtask.somprovisioning.MSS_LookupReceiverBeanMDB is unable to connect to the JMS destination: sky/MSS/Product/WebServiceResponseQueue. The Error was:
javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'"
Nested exception: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMS_BEA_SELECT('xpath', '/*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']')='OSM-MSS_Lookup-1.0.0.0.5'"
I would appreciate any help or ideas.
Cheers
Hi,
Could you confirm on below:
1 ) Are you using multiple automation plug-in external event receivers in the same automation task ?
2 ) And are you having the default Correlation Message property set to 'JSMCorrelationID' in external event receiver?
If your answer for the first question is No, they i would suggest to use Correlation XML Body as
*[local-name() ='Response']/*[local-name()='Header']/*[local-name()='application']
The value of the field(application) in request must match the value of the field in response, in your case it is matching. And you will be reading this correlation id in response processing xquery.
Regards
Srinivas
Similar Messages
-
Unable to Execute a Report to send PAN XML messages out of SNC
Hi All,
We are unable to Execute a Report /SCA/DM_TIMESERIES_OUT to send Product Activity Notifications in the form of XML messages out of SNC. We have manitained some Planned Reciepts data in SNC and would like to transfer it out to ECC.
Could anyone help in understanding if we have to maintain mandatory settings before executing this report.
Thanks & Regards,
SadiqHi Pravin,
As per the documentation(http://help.sap.com/saphelp_snc70/helpdata/EN/48/6bdb4767a431cbe10000000a42189d/frameset.htm), we have tried both the manual and automatic features to configure the output from SNC in the form of XML messages.
The manual method gave a message "Time series data for selection is empty" and the Automated method could trigger the XML messages on every incoming message from ECC but we are unable to see the Planned Receipts in that XML messages.
Was just wondering if we can see the Planned Receipt info by changing the settings of this report or by using any other simillar report as the PR info is very important for our development.
Thanks & Regards,
Sadiq -
XML message as input for webservice gives deserialization error
Hi,
jDeveloper 10.1.3
BPEL PM 10.1.2.0.2
Carrental example
Problem:
For the Business Rule Engine I did the Carrental XML example. Based on the java application that connects to the BR engine, I created a webservice in jDeveloper and deployed it to my localhost AS 10.1.3. The webservice has a testRule method that accepts a String buf as input. For now, the only thing the webservice does is return a 'do nothing' string. This works fine:
When deployed the testpage generates the following SOAP message:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://carrental/types/">
<ns1:testRuleElement>
<ns1:buf>my xml message</ns1:buf>
</ns1:testRuleElement>
</soap:Body>
</soap:Envelope>
The SOAP response is:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://carrental/types/"><env:Body><ns0:testRuleResponseElement><ns0:result>do nothing...</ns0:result></ns0:testRuleResponseElement></env:Body></env:Envelope>
In BPEL Designer I create a new asynchronous process ValidateBR, with a partnerlink for the webservice, based on the following WSDL file:
<definitions
name="Rent"
targetNamespace="http://carrental/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://carrental/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns0="http://carrental/types/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://carrental/types/"
elementFormDefault="qualified" xmlns:tns="http://carrental/types/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/">
<complexType name="testRule">
<sequence>
<element name="buf" type="string" nillable="true"/>
</sequence>
</complexType>
<complexType name="testRuleResponse">
<sequence>
<element name="result" type="string" nillable="true"/>
</sequence>
</complexType>
<complexType name="version">
<sequence/>
</complexType>
<complexType name="versionResponse">
<sequence>
<element name="result" type="string" nillable="true"/>
</sequence>
</complexType>
<element name="testRuleElement" type="tns:testRule"/>
<element name="testRuleResponseElement" type="tns:testRuleResponse"/>
<element name="versionElement" type="tns:version"/>
<element name="versionResponseElement" type="tns:versionResponse"/>
</schema>
</types>
<message name="Rent_testRule">
<part name="parameters" element="tns0:testRuleElement"/>
</message>
<message name="Rent_testRuleResponse">
<part name="parameters" element="tns0:testRuleResponseElement"/>
</message>
<message name="Rent_version">
<part name="parameters" element="tns0:versionElement"/>
</message>
<message name="Rent_versionResponse">
<part name="parameters" element="tns0:versionResponseElement"/>
</message>
<portType name="Rent">
<operation name="testRule">
<input message="tns:Rent_testRule"/>
<output message="tns:Rent_testRuleResponse"/>
</operation>
<operation name="version">
<input message="tns:Rent_version"/>
<output message="tns:Rent_versionResponse"/>
</operation>
</portType>
<binding name="RentSoapHttp" type="tns:Rent">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="testRule">
<soap:operation soapAction="http://carrental//testRule"/>
<input>
<soap:body use="literal" parts="parameters"/>
</input>
<output>
<soap:body use="literal" parts="parameters"/>
</output>
</operation>
<operation name="version">
<soap:operation soapAction="http://carrental//version"/>
<input>
<soap:body use="literal" parts="parameters"/>
</input>
<output>
<soap:body use="literal" parts="parameters"/>
</output>
</operation>
</binding>
<service name="Rent">
<port name="RentSoapHttpPort" binding="tns:RentSoapHttp">
<soap:address location="http://localhost:7780/Rules-rent-context-root/RentSoapHttpPort"/>
</port>
</service>
</definitions>
I defined the process variable inputVariable to be defined based on the carrental.xsd schema. I assign the inputVariable to the 'buf' parameter of the webservice as shown below in the ValidateBR.bpel
<!--
// Oracle JDeveloper BPEL Designer
// Created: Mon Mar 27 16:02:22 CEST 2006
// Author: haanrw
// Purpose: Asynchronous BPEL Process
-->
<process name="ValidateBR" targetNamespace="http://xmlns.oracle.com/ValidateBR" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:ns1="http://rules.oracle.com/carrental" xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns3="http://carrental/types/" xmlns:ns2="http://carrental/" xmlns:client="http://xmlns.oracle.com/ValidateBR" xmlns:bpelx="http://schemas.oracle.com/bpel/extension" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"><!-- ================================================================= --><!-- PARTNERLINKS --><!-- List of services participating in this BPEL process --><!-- ================================================================= -->
<partnerLinks><!--
The 'client' role represents the requester of this service. It is
used for callback. The location and correlation information associated
with the client role are automatically set using WS-Addressing.
-->
<partnerLink name="client" partnerLinkType="client:ValidateBR" myRole="ValidateBRProvider" partnerRole="ValidateBRRequester"/>
<partnerLink name="CheckBR" partnerRole="Rent_Role" partnerLinkType="ns2:Rent_PL"/>
</partnerLinks><!-- ================================================================= --><!-- VARIABLES --><!-- List of messages and XML documents used within this BPEL process --><!-- ================================================================= -->
<variables><!-- Reference to the message passed as input during initiation -->
<variable name="inputVariable" messageType="client:ValidateBRRequestMessage"/><!-- Reference to the message that will be sent back to the
requester during callback
-->
<variable name="outputVariable" messageType="client:ValidateBRResponseMessage"/>
<variable name="InvokeValidateBR_testRule_InputVariable" messageType="ns2:Rent_testRule"/>
<variable name="InvokeValidateBR_testRule_OutputVariable" messageType="ns2:Rent_testRuleResponse"/>
</variables><!-- ================================================================= --><!-- ORCHESTRATION LOGIC --><!-- Set of activities coordinating the flow of messages across the --><!-- services integrated within this business process --><!-- ================================================================= -->
<sequence name="main"><!-- Receive input from requestor.
Note: This maps to operation defined in ValidateBR.wsdl
-->
<receive name="receiveInput" partnerLink="client" portType="client:ValidateBR" operation="initiate" variable="inputVariable" createInstance="yes"/><!-- Asynchronous callback to the requester.
Note: the callback location and correlation id is transparently handled
using WS-addressing.
-->
<assign name="Assign_1">
<copy>
<from variable="inputVariable" part="payload" query="/ns1:repository"/>
<to variable="InvokeValidateBR_testRule_InputVariable" part="parameters" query="/ns3:testRuleElement/ns3:buf"/>
</copy>
</assign>
<invoke name="InvokeValidateBR" partnerLink="CheckBR" portType="ns2:Rent" operation="testRule" inputVariable="InvokeValidateBR_testRule_InputVariable" outputVariable="InvokeValidateBR_testRule_OutputVariable"/>
<invoke name="callbackClient" partnerLink="client" portType="client:ValidateBRCallback" operation="onResult" inputVariable="outputVariable"/>
</sequence>
</process>
When I deploy the process and initiate a testinstance from the BPEL console, the assign looks as follows:
<InvokeValidateBR_testRule_InputVariable>
<part name="parameters" >
<testRuleElement>
<buf>
<driver>
<driver-license-number>15-PS-FZ</driver-license-number>
<name>Rob de Haan</name>
<age>39</age>
<vehicle-type>Saab</vehicle-type>
<license-type>B</license-type>
<pre-convictions>0</pre-convictions>
<pre-accidents>0</pre-accidents>
<able-to-drive>true</able-to-drive>
</driver>
</buf>
</testRuleElement>
</part>
</InvokeValidateBR_testRule_InputVariable>
The InvokeValidateBR shows the following error:
<remoteFault>
<part name="code" >
<code>Client</code>
</part>
<part name="summary" >
<summary>when invoking endpointAddress 'http://localhost:7780/Rules-rent-context-root/RentSoapHttpPort', caught exception while handling request: deserialization error: unexpected XML reader state. expected: END but found: START: {http://rules.oracle.com/carrental}driver</summary>
</part>
<part name="detail" >
<detail>AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client faultSubcode: faultString: caught exception while handling request: deserialization error: unexpected XML reader state. expected: END but found: START: {http://rules.oracle.com/carrental}driver faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:caught exception while handling request: deserialization error: unexpected XML reader state. expected: END but found: START: {http://rules.oracle.com/carrental}driver at org.collaxa.thirdparty.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221) at org.collaxa.thirdparty.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128) at org.collaxa.thirdparty.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1083) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.collaxa.thirdparty.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:226) at org.collaxa.thirdparty.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:645) at org.collaxa.thirdparty.apache.axis.Message.getSOAPEnvelope(Message.java:424) at org.collaxa.thirdparty.apache.axis.client.Call.invokeEngine(Call.java:2754) at org.collaxa.thirdparty.apache.axis.client.Call.invoke(Call.java:2715) at org.collaxa.thirdparty.apache.axis.client.Call.invoke(Call.java:1737) at com.collaxa.cube.ws.wsif.providers.axis.WSIFOperation_ApacheAxis.invokeAXISMessaging(WSIFOperation_ApacheAxis.java:2113) at com.collaxa.cube.ws.wsif.providers.axis.WSIFOperation_ApacheAxis.invokeRequestResponseOperation(WSIFOperation_ApacheAxis.java:1611) at com.collaxa.cube.ws.wsif.providers.axis.WSIFOperation_ApacheAxis.executeRequestResponseOperation(WSIFOperation_ApacheAxis.java:1083) at com.collaxa.cube.ws.WSIFInvocationHandler.invoke(WSIFInvocationHandler.java:452) at com.collaxa.cube.ws.WSInvocationManager.invoke2(WSInvocationManager.java:327) at com.collaxa.cube.ws.WSInvocationManager.invoke(WSInvocationManager.java:189) at com.collaxa.cube.engine.ext.wmp.BPELInvokeWMP.__invoke(BPELInvokeWMP.java:601) at com.collaxa.cube.engine.ext.wmp.BPELInvokeWMP.__executeStatements(BPELInvokeWMP.java:317) at com.collaxa.cube.engine.ext.wmp.BPELActivityWMP.perform(BPELActivityWMP.java:188) at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:3408) at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1836) at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:75) at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:166) at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:252) at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:5438) at com.collaxa.cube.engine.CubeEngine.createAndInvoke(CubeEngine.java:1217) at com.collaxa.cube.engine.delivery.DeliveryService.handleInvoke(DeliveryService.java:511) at com.collaxa.cube.engine.ejb.impl.CubeDeliveryBean.handleInvoke(CubeDeliveryBean.java:335) at ICubeDeliveryLocalBean_StatelessSessionBeanWrapper16.handleInvoke(ICubeDeliveryLocalBean_StatelessSessionBeanWrapper16.java:1796) at com.collaxa.cube.engine.dispatch.message.invoke.InvokeInstanceMessageHandler.handle(InvokeInstanceMessageHandler.java:37) at com.collaxa.cube.engine.dispatch.DispatchHelper.handleMessage(DispatchHelper.java:125) at com.collaxa.cube.engine.dispatch.BaseScheduledWorker.process(BaseScheduledWorker.java:70) at com.collaxa.cube.engine.ejb.impl.WorkerBean.onMessage(WorkerBean.java:86) at com.evermind.server.ejb.MessageDrivenBeanInvocation.run(MessageDrivenBeanInvocation.java:123) at com.evermind.server.ejb.MessageDrivenHome.onMessage(MessageDrivenHome.java:755) at com.evermind.server.ejb.MessageDrivenHome.run(MessageDrivenHome.java:928) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186) at java.lang.Thread.run(Thread.java:534) {http://xml.apache.org/axis/}hostname:NL-GRH-L120981 </detail>
</part>
</remoteFault>
FYI: the webservice only contains a return "do nothing"
Question:
What is the proper way to assign an XML message to the web service?
Any help would be appreciated.
Rob
Message was edited by:
[email protected]Hi,
Reading only is not possible..
I will be still more clear in my question this time..
I have deployed my bpel. My receiveInputVariable is of type xsd:string.
So when i run the bpel in my console, i will be asked to give input as string data.
So when i go to the XMLView, it will be like this.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://xmlns.oracle.com/Sabari_POC_Appln/DOM_Parser/ConvertToBLOB">
<ns1:process>
<ns1:input></ns1:input>
</ns1:process>
</soap:Body>
</soap:Envelope>
Now, i am going to give my input like this. --- which leads to error.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://xmlns.oracle.com/Sabari_POC_Appln/DOM_Parser/ConvertToBLOB">
<ns1:process>
<ns1:input>
*<?xml version="1.0" encoding="UTF-8"?>*
*<projects>*
*<project id = "BP001">*
*<name>Banking Project</name>*
*<start-date>Jan 10 1999</start-date>*
*<end-date>Jan 10 2003</end-date>*
*</project>*
*<project id = "TP001">*
*<name>Telecommunication Project</name>*
*<start-date>March 20 1999</start-date>*
*<end-date>July 30 2004</end-date>*
*</project>*
*<project id = "PP001">*
*<name>Portal Project</name>*
*<start-date>Dec 10 1998</start-date>*
*<end-date>March 10 2006</end-date>*
*</project>*
*</projects>*
</ns1:input>
</ns1:process>
</soap:Body>
</soap:Envelope>
This xml is not accepted as string input.. so kindly suggest me some other solution.
I also tried.. like.. making my receiveInputVariable of type xsd:anyType, it also dint help. same error occurred.
Thanks,
Sabarisri. N
Edited by: Sabarisri N on Jul 20, 2011 1:03 PM -
Reading the XML message from Xi stored in XML format from a abap program.
Hi Gurus,
My requirement here is to read the data that will be coming from Xi from my custom abap program and updating 2 data base tables. The method is after the data mapping is done a class is generated in abap proxy in which a method is available. Inside the method i am writing the code for getting the Xi data stored as a payload message which can be seen in the transaction SXMB_MONI. My code is given below.
***begin code***
method ZII_PAYROLL_HEADER_IN~PAYROLL_HEADER_IN.
**** INSERT IMPLEMENTATION HERE **** ***
data: ln type i.
DATA: i_items TYPE TABLE OF ZPAYLOAD_WRAPPER_EMPLOYEE_REC3.
*DATA: wa_items type ZPAYLOAD_WRAPPER_EMPLOYEE_TAB5.
data: wa_items type ZPAYLOAD_WRAPPER_EMPLOYEE_REC3.
DATA:PERNR TYPE STRING.
*data: it_ZPAYLOAD_WRAPPER16 TYPE ZPAYLOAD_WRAPPER16.
I_ITEMS[] = INPUT-PAYLOAD_WRAPPER-BODY-XMLDOC-PAYROLL_PERIOD_OVERVIEW-EMPLOYEE_RECORD[].
*I_ITEMS = INPUT-payloadWrapper-Body-XMLDOC-PayrollPeriodOverview-EmployeeRecord.
describe table i_items[] lines ln.
endmethod.
**End code***
As per the logic the data stored in the XML message should be avaialble in INPUT-payloadWrapper-Body-XMLDOC-PayrollPeriodOverview-EmployeeRecord which i am assigning to a local internal table in the class.
But in my case there is no data coming in
INPUT-payloadWrapper-Body-XMLDOC-PayrollPeriodOverview-EmployeeRecord.
But i can see the data transffered from XI in the transaction SXMB_MONI->XML message->inbound message->payload.
Is there any way to read the data stored in the XML message in the transaction SXMB_MONI.
Also why the data is not coming in
INPUT-payloadWrapper-Body-XMLDOC-PayrollPeriodOverview-EmployeeRecord inside the class.
If there is any solution for this problem please post it.You can use function module SXMB_GET_MESSAGE_PAYLOAD.
Code snippet:
DATA: ls_mast TYPE sxmspmast,
ls_msgkey TYPE sxmsmkey,
lv_bin_xml TYPE xstring,
lv_str_xml TYPE string.
* select sxmspmast into ls_mast
ls_msgkey-msgid = ls_mast-msgguid.
ls_msgkey-pid = 'RECEIVER'.
CALL FUNCTION 'SXMB_GET_MESSAGE_PAYLOAD'
EXPORTING
im_msgkey = ls_msgkey
im_archive = ' '
im_version = ls_mast-vers
IMPORTING
ex_msg_bytes = lv_bin_xml
EXCEPTIONS
not_authorized = 1
no_message = 2
internal_error = 3
no_payload = 4
OTHERS = 5.
IF sy-subrc EQ 0.
lv_str_xml = cl_soap_moni_helper=>convert_xstring_to_string( xstring_in = lv_bin_xml ).
ENDIF. -
EWS 1.2, Exchange 2010 SP2/SP3 - Appointment message body gets wrecked on update
We're seeing a very irritating issue with EWS and Exchange when updating the message body on an Appointment. To head it off, it does not appear to be the bug detailed here:
http://blogs.msdn.com/b/dhruvkh/archive/2012/05/18/sending-appointments-from-ews-apps-where-did-my-html-go.aspx
It happens on both 2010 SP2 and SP3. We're creating Appointments with some HTML formatting the message body. Nothing fancy, just a few tables and a little bit of inline styling (since a css style header disappears into a black hole when you try to use it
as part of the Appointment message body). We're able to make a nice-looking message body that goes out in the meeting requests. Well, with the exception of downlevel text at the top, but there doesn't seem to be much we can do about that short of a double-tap
save.
The problem comes into play if we need to update the message body on the Appointment. All of this is automated, so the user cannot directly edit it. If we make any changes to the message body, it completely wrecks the HTML. It's still an HTML-formatted message,
but much of the styling is lost and it looks awful. This happens without fail when we alter the message body of an Appointment with any considerable level of HTML formatting. BodyType is HTML, of course. I've done some digging on the best body algorithm and
some of the MAPI properties related to it. Some interesting bits of note:
When the Appointment is first saved, PidTagRtfInSync is true. PidTagNativeBody is 2, which indicates an RTF message. PidTagBody is present. PidTagRtfCompressed is present. However, PidTagBodyHtml is not present. After updating the Appointment with a message
body edit, PidTagBodyHtml is present, but now PidTagRtfInSync is false and PidTagNativeBody is 3.
If PidTagBodyHtml is set directly as an extended property instead of setting the message body via the EWS Appointment object, then the formatting is wrecked right out of the gate. At least it's consistent that way...
Attempting to set PidTagNativeBody manually had no effect.
When viewing the PR_BODY_HTML contents between a good and bad message, the good one will contain the transformed HTML. It doesn't look much like what we had initially handed to it, but gets changed in the conversion process. The bad one is much closer to
what we wrote in actual HTML, but has still had much of the styling removed. It's as if creating the Appointment does the RTF conversion, but any subsequent changes use a completely different code path serverside and there does not appear to be any way around
it short of even more guess and check with EWS and Exchange chewing up HTML. This is complicated by being unable to find any documentation that details how and what gets changed, discarded, etc in the process.
This will always affect requests, but only seems to affect Appointments in the calendar of attendees if the body includes the downlevel text. Appointments without the downlevel text appear to survive updates with their formatting intact. Appointments with
downlevel text get their formatting wrecked with updates.
Has anyone run into this before? It was painful enough when we found that our previously-used email HTML formatter wouldn't work with EWS and everything had to be inlined, but now it seems that there are even more inexplicable problems to get around. Is
there a way to update the message body without this happening?Ugh... hopefully I can ask you gentleman how to solve my issue.
I recently implemented code to allow our users to turn-on HTML-encoding for when our Sync'ing app goes to add/update items for them into Exchange.
If thev'ye turned-on HTML formatting, when I create a CalendarItemType's (in C# based off the EWSProxies.EWS.Itemtype) the Body.Value is being set with a string which contains very minimal HTML tags... just <br>'s instead of "\r\n" and for
URL link values we are embedding into the text, I'm encapsulating those within an <a href>
Example: <a href="http://TheWebSite.com/EventDisplay.aspx?uri=1234">Event Display Link</a>
My problem is... when I retrieve an item from Exchange... there is a huge amount of extra HTML encoding it wraps around everything!
By inspecting in the debugger... I've discerned that :
For Appts... the main bunch of text that I inserted in an item when originally creating it is contained just within the <div> tag.
For Tasks... the main bunch of text that I inserted in an item when originally creating it is contained just within the <body> tag (and on these there is no <div> tag created).
I was able to use the HTML Agility Pack and load this Body.Value string into the enhanced HtmlDocument object. I first attempt to parse first for the <div> nodes contents. If the <div> is not-null that's an Appt. If the <div>
is null, I instead parse out the <body> nodes contents, and those are Tasks.
I noticed for Appts :
For every <br> tag I had in my original text.. it appends two consecutive "\r\n" 's after it! No problem I can just do a Replace("\r\n", "") and zap those. But then the <a href> I have in there... it
encapsulates it with a <font> node where it sets a color for the link and also an underline <u> node. I can handle the <u> nodes easy enough with a Replace("<u>","") and a Replace("</u>", "");
But what about the damn <font> node? It's in the format of <font color=\"blue\"></font> and I'm sure the \"blue"\ part could be different for every user.
I noticed for Tasks :
It prepends a "\r\n" just inside the begininng<body> tag. Each of the original <br> tags gets an "\r\n" appended behind it. and for the TaskType for the <a href> node IT DOES NOT encapsulate it with the <font>
and <u> nodes as it does for the Appt.
How can I stop it from changing the Body content when retrieving it? Will it not change anything if I go the extra mile and make sure to wrap everything with an <html> and <body> node when initially creating the items?
Any and all help on this issue is sorely appreciated.
Thank You,
-G -
Please help me in inserting data into table from XML message.
Hi Experts,
Please provide a procedure to implement my below requirement.
Since I am new to queue concept.
[code]- <MESSAGES>
- <MESSAGE ID="3026900">
<MSG_ID>3026900</MSG_ID>
<DT_POSTED>6/20/2013 08:15:48</DT_POSTED>
<POSTED_BY>GPD_MSG_EXTRACTOR</POSTED_BY>
<DT_LAST_QUEUED />
- <MSG>
- <WORK_SET TRANSACTION_ID="@TRANS_ID" TRANSACTION_TYPE="Batch" IS_ACID="@IS_ACID">
- <WORK_UNIT GROUP="LEAD_TIME" ACTION="UPDATE" AFFECTED="LEAD_TIME">
- <RECORDSET TABLE_NAME="LEAD_TIME">
- <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
- <rs:data>
<z:row business_unit_id="3838" geo="AT" sku="A0814818" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
<z:row business_unit_id="202" geo="GB" sku="A0814819" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
<z:row business_unit_id="2828" geo="BE" sku="A0814820" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
</rs:data>
</xml>
</RECORDSET>
</WORK_UNIT>
- <WORK_UNIT GROUP="LEAD_TIME" ACTION="ADD" AFFECTED="LEAD_TIME">
- <RECORDSET TABLE_NAME="LEAD_TIME">
- <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
- <rs:data>
<z:row business_unit_id="202" geo="GB" sku="A0814821" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
<z:row business_unit_id="2828" geo="BE" sku="A0814822" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
</rs:data>
</xml>
</RECORDSET>
</WORK_UNIT>
- <WORK_UNIT GROUP="LEAD_TIME" ACTION="DELETE" AFFECTED="LEAD_TIME">
- <RECORDSET TABLE_NAME="LEAD_TIME">
- <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
- <rs:data>
<z:row business_unit_id="202" geo="GB" sku="A0814817" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
<z:row business_unit_id="2828" geo="BE" sku="A0814816" dw_maint_flag="False" stock_status_id="0" lead_time="30" est_qty="0" leadtime_lock="False" update_dts="2013-06-12T02:08:30.367" update_uid="DEACTIVATE_SKU_PROCESS" leadtime_dts="2010-05-22T02:21:21.707" leadtime_uid="Lead_Time_Rules" />
</rs:data>
</xml>
</RECORDSET>
</WORK_UNIT>
</WORK_SET>
</MSG>
</MESSAGE>
</MESSAGES>[/code]
The above XML message is receieved by our oracle queue.Once the message is receieved to our queue.
We have to process the message according to the action(UPDATE ADD DELETE).
From this message we have to process only 3 fields (geo sku lead_time).
These three feilds data should be processed into the SKU_LEAD_TIME table based on the action.
Req1:
IF the action is update then the records should be updated in the "LEAD_TIME_TABLE" table
IF the action is update then the records should be updated in the "LEAD_TIME_TABLE" table
based on the below condition.
[code]UPDATE LEAD_TIME_TABLE SET lead_time= lead time from xml message
WHERE LEAD_TIME_TABLE.SKU=sku from xml message AND LEAD_TIME_TABLE.GEO=geo from xml message;[/code]
Req2:
IF the action is delete then the records should be deleted from the "LEAD_TIME_TABLE" table.
based on the below condition.
[code]DELETE FROM LEAD_TIME_TABLE
WHERE LEAD_TIME_TABLE.SKU=sku from xml message AND LEAD_TIME_TABLE.GEO=geo from xml message;[/code]
Req3:
IF the action is add then the records should be inserted in the "LEAD_TIME_TABLE" and "LEAD_TIME_TABLE_STAGING" table
based on the below conditions.
Req3.1:
If SKU from XML message is available in "SKU_TABLE" table
then the three parameter(GEO SKU LEAD_TIME) values from XML message should be inserted into "LEAD_TIME_TABLE" table.
Req3.2:
If SKU from XML message is not available in "SKU_TABLE" table
then the three parameter(GEO SKU LEAD_TIME) values from XML message should be inserted into "LEAD_TIME_TABLE_STAGING" table.
Req3.3:
Once the new SKU is avilable in "SKU_TABLE" table then the corresponding SKU record should be
inserted into "LEAD_TIME_TABLE" table and that record should be deleted from "LEAD_TIME_TABLE_STAGING" table.
I am posting required scripts and test cases.
[code]CREATE TABLE LEAD_TIME_TABLE(sku VARCHAR2(20),model VARCHAR2(20),class CHAR(1),geo VARCHAR2(6),lead_time NUMBER,created DATE);
CREATE TABLE LEAD_TIME_TABLE_STAGING(sku VARCHAR2(20),geo VARCHAR2(6),lead_time NUMBER);
CREATE TABLE SKU_TABLE(sku VARCHAR2(20),geo VARCHAR2(6),lead_time NUMBER);
INSERT INTO SKU_TABLE VALUES('A0814817','GB',30);
INSERT INTO SKU_TABLE VALUES('A0814818','AT',30);
INSERT INTO SKU_TABLE VALUES('A0814819','GB',30);
INSERT INTO SKU_TABLE VALUES('A0814820','BE',30);
INSERT INTO SKU_TABLE VALUES('A0814821','GB',30);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814817','GB',30);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814818','AT',20);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814819','GB',20);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814820','BE',20);
INSERT INTO LEAD_TIME_TABLE_STAGING VALUES('A0814822','BE',30);[/code]
From the above message.
Test case for req3.1:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814821" is available in SKU_TABLE table.
so the record should be inserted in the LEAD_TIME_TABLE.
[code]SELECT * FROM LEAD_TIME_TABLE;
SKU GEO LEAD_TIME
A0814817 GB 30
A0814818 AT 20
A0814819 GB 20
A0814820 BE 20
A0814821 GB 30[/code]
Test case for req3.2:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814822" is not available in SKU_TABLE table.
so the record should be inserted in the LEAD_TIME_TABLE_STAGING.
[code]SELECT * FROM LEAD_TIME_TABLE_STAGING;
SKU GEO LEAD_TIME
A0814822 BE 30[/code]
Test case for req3.3:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814822" is not available in SKU_TABLE table.
Once I insert SKU number "A0814822" in SKU_TABLE table.
The corresponding records automatically should be inserted in the LEAD_TIME_TABLE
and should be deleted from LEAD_TIME_TABLE_STAGING.
[code]SELECT * FROM LEAD_TIME_TABLE_STAGING; --- should return NULL.
SELECT * FROM LEAD_TIME_TABLE;
SKU GEO LEAD_TIME
A0814817 GB 30
A0814818 AT 20
A0814819 GB 20
A0814820 BE 20
A0814821 GB 30
A0814822 BE 30[/code]
Please help me.
Thanks in advance.Hi,
I have resolved this issue.
But I have stuck up in implementing some of the scenarios.
Req1:
IF the action is update then the records should be updated in the "LEAD_TIME_TABLE" table
IF the action is update then the records should be updated in the "LEAD_TIME_TABLE" table
based on the below condition.
UPDATE LEAD_TIME_TABLE SET lead_time= lead time from xml message
WHERE LEAD_TIME_TABLE.SKU=sku from xml message AND LEAD_TIME_TABLE.GEO=geo from xml message;
Req3:
IF the action is add then the records should be inserted in the "LEAD_TIME_TABLE" and "LEAD_TIME_TABLE_STAGING" table
based on the below conditions.
Req3.1:
If SKU from XML message is available in "schema_name.SKU_TABLE" table.
The schema_name.SKU_TABLE table should be selected based on "business_unit_id" of XML message and "sid" of MAPPING table WHERE business_unit_id=sid.
then the three parameter(GEO SKU LEAD_TIME) values from XML message and two fields MODEL,CLASS from SKU_TABLE
should be inserted into "LEAD_TIME_TABLE" table.
Req3.2:
If SKU from XML message is not available in "schema_name.SKU_TABLE" table
The schema_name.SKU_TABLE table should be selected based on "business_unit_id" of XML message and "sid" of MAPPING table WHERE business_unit_id=sid.
then the four parameter(BUSINESS_UNIT_ID GEO SKU LEAD_TIME) values from XML message
should be inserted into "LEAD_TIME_TABLE_STAGING" table.
Req3.3:
Once the new SKU is avilable in "schema_name.SKU_TABLE" table then the corresponding SKU record should be
inserted into "LEAD_TIME_TABLE" table and that record should be deleted from "LEAD_TIME_TABLE_STAGING" table.
The schema_name.SKU_TABLE table should be selected based on "business_unit_id" of LEAD_TIME_TABLE_STAGING and "sid" of MAPPING table WHERE business_unit_id=sid.
I am posting required scripts and test cases.
[code]CREATE TABLE LEAD_TIME_TABLE(sku VARCHAR2(20),model VARCHAR2(20),class CHAR(1),geo VARCHAR2(6),lead_time NUMBER,created DATE);
CREATE TABLE LEAD_TIME_TABLE_STAGING(business_unit_id NUMBER,sku VARCHAR2(20),geo VARCHAR2(6),lead_time NUMBER);
CREATE TABLE SKU_TABLE(sku VARCHAR2(20),model VARCHAR2(20),class VARCHAR2(10));
CREATE TABLE mapping(sid NUMBER,schema_name VARCHAR2(20));
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814817','GB',30);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814818','AT',20);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814819','GB',20);
INSERT INTO LEAD_TIME_TABLE(SKU,GEO,LEAD_TIME) VALUES('A0814820','BE',20);
INSERT INTO SKU_TABLE VALUES('A0814817','M125','C111');
INSERT INTO SKU_TABLE VALUES('A0814818','M127','A111');
INSERT INTO SKU_TABLE VALUES('A0814819','M126','A111');
INSERT INTO SKU_TABLE VALUES('A0814820','N100','B111');
INSERT INTO SKU_TABLE VALUES('A0814821','P123','B111');
INSERT INTO mapping VALUES(202,'WEDB');
INSERT INTO mapping VALUES(2828,'HR');
INSERT INTO mapping VALUES(3838,'BB');
[/code]
Test case for req3.1:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814821" is available in schema_name.SKU_TABLE table.
so the record should be inserted in the LEAD_TIME_TABLE.
[code]SELECT * FROM LEAD_TIME_TABLE;
SKU MODEL CLASS GEO LEAD_TIME
A0814817 M125 C111 GB 30
A0814818 M127 A111 AT 20
A0814819 M126 A111 GB 20
A0814820 N100 B111 BE 20
A0814821 P123 B111 GB 30
[/code]
Test case for req3.2:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814822" is not available in SKU_TABLE table.
so the record should be inserted in the LEAD_TIME_TABLE_STAGING.
[code]SELECT * FROM LEAD_TIME_TABLE_STAGING;
BUSINESS_UNIT_ID SKU GEO LEAD_TIME
2828 A0814822 BE 30[/code]
Test case3.3.3:
The action for SKU numbers "A0814821" "A0814822" are insert.
The SKU number "A0814822" is not available in SKU_TABLE table.
Once I insert SKU number "A0814822" in SKU_TABLE table.
The corresponding records automatically should be inserted in the LEAD_TIME_TABLE
and should be deleted from LEAD_TIME_TABLE_STAGING.
[code]INSERT INTO SKU_TABLE VALUES('A0814822','P123','B111');
SELECT * FROM LEAD_TIME_TABLE_STAGING; --- should return NULL.
SELECT * FROM LEAD_TIME_TABLE;
SKU MODEL CLASS GEO LEAD_TIME
A0814817 M125 C111 GB 30
A0814818 M127 A111 AT 20
A0814819 M126 A111 GB 20
A0814820 N100 B111 BE 20
A0814821 P123 B111 GB 30
A0814822 P123 B111 GB 30[/code]
I am able to implement Req1 and Req3.1 for action UPDATE and INSERT in single merge statement.
However my code is not taking care of all my requirements.
Please find my below code.
[code] CREATE OR REPLACE PACKAGE BODY messg_values_process
AS
procedure ProcessInboundLtimeMessage(p_xml_message XmlType)
is
begin
for work_unit in (
select message.MESSAGE_ID
, work_unit.ACTION
, work_unit.LEADTIME_NODES
from XmlTable(
'/MESSAGES/MESSAGE'
passing p_xml_message
columns
MESSAGE_NO for ordinality
, MESSAGE_ID number path '@ID'
, WORK_UNIT_NODES XmlType path 'MSG/WORK_SET/WORK_UNIT'
) message
, XmlTable(
XmlNamespaces(
'urn:schemas-microsoft-com:rowset' as "rs"
, '#RowsetSchema' as "z"
'/WORK_UNIT'
passing message.WORK_UNIT_NODES
columns
WORK_UNIT_NO for ordinality
, ACTION varchar2(10 char) path '@ACTION'
, LEADTIME_NODES XmlType path 'RECORDSET[@TABLE_NAME="LEAD_TIME"]/xml/rs:data/z:row'
) work_unit
LOOP
CASE work_unit.ACTION
WHEN 'ADD' THEN MergeData(work_unit.LEADTIME_NODES);
WHEN 'UPDATE' THEN MergeData(work_unit.LEADTIME_NODES);
WHEN 'DELETE' THEN RemoveData(work_unit.LEADTIME_NODES);
ELSE null;
END CASE;
END LOOP;
END ProcessInboundLtimeMessage;
procedure MergeData(p_leadtime_nodes XmlType)
is
begin
if (p_leadtime_nodes is not null) then
merge into LEAD_TIME_TABLE old
using(
select *
from XmlTable(
XmlNamespaces(
'urn:schemas-microsoft-com:rowset' as "rs"
, '#RowsetSchema' as "z"
'/z:row[not(@business_unit_id=following-sibling::z:row/@business_unit_id)]'
passing p_leadtime_nodes
columns
ITEM_NO for ordinality
, BUSINESS_UNIT_ID number path '@business_unit_id'
, GEO varchar2(20 char) path '@geo'
, SKU varchar2(20 char) path '@sku'
, LEAD_TIME number path '@lead_time'
) NEW
ON (old.VK_UNIT = new.SKU
AND old.GEO=new.GEO)
when matched then update
set old.LEAD_TIME = new.LEAD_TIME
when not matched then INSERT
( old.VK_UNIT
, old.MODEL
, old.CLASS
, old.GEO
, old.LEAD_TIME
, old.COUNTDOWN
, old.LAST_UPDATED_DATE
values
( new.SKU
,'A123'
,'A1234'
, new.GEO
, new.LEAD_TIME
, 'N'
, sysdate
end if;
exception
when others then
LogDataError(
'MergeData Procedure Failed #: '||chr(10)||sqlerrm
, null
, null
END MergeData;
END messg_values_process;
/[/code]
Please help me.
Thanks. -
Hi,
Is it possible to map an entire structure into a message body ?
We would normally map to a structure but in this case it will just a message body so we have an structure to go into an unstructured message body.
For example we have a structured file
MAterial Def
Release
Version
Application
Sender
Reciever
etc....
the target is simply
Addmessage
LocationID
Messagebody
MessageLabel
Is there a way to easily put everything in the structured message inside the message body ?
Thankshi Brian,
I am not sure if it will work in your case but map the Messagebody with the root node which u want to map with which is MAterial Def in your case.
then right click on the source node in the mapping and then click on return xml on that.
hope this helps.
thanks and regards,
Praveen t -
Send email including the data field into the html message body
Hi all,
I would like to send an email to each recipient once only, and including a data field into the html body message. I am not sure how to achive that with my current stored procedure.
USE [CallManager]
GO
/****** Object: StoredProcedure [dbo].[PersonalCallsReminder] Script Date: 08/27/2014 10:26:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PersonalCallsReminder]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Email Users
declare @email varchar(max)
declare mycursor cursor FAST_FORWARD for
SELECT dbo.HumersStaffExtension.email
FROM dbo.Calls_Mobile_Header INNER JOIN
dbo.HumersStaffExtension ON
dbo.Calls_Mobile_Header.TelNumber = dbo.HumersStaffExtension.telnr_prv COLLATE SQL_Latin1_General_CP1_CI_AS
GROUP BY dbo.Calls_Mobile_Header.RecordStatus, dbo.HumersStaffExtension.usr_id, dbo.HumersStaffExtension.email,
dbo.HumersStaffExtension.res_id
HAVING (dbo.Calls_Mobile_Header.RecordStatus = N'0') AND (NOT (dbo.HumersStaffExtension.email IS NULL))
OPEN mycursor;
FETCH NEXT FROM mycursor
INTO @email
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'CallsManagement',
@recipients = @email ,
@body_format = 'HTML',
@subject = 'Personal Calls Reminder',
@body = '<!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 content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Personal Calls Reminder</title>
<style type="text/css">
body {
font-family: "Times New Roman", Times, serif;
font-size: 11pt;
.auto-style1 {
background-color: #FFFF00;
</style>
</head>
<body>
<div>
<table style="width: 800px">
<tr>
<td>Dear,<br />
<br />
Please review your phone bills and submit your personal calls using the following link:<br />
<a href="http://companyxyz/personalcalls/">Personal Calls</a></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td><strong>Kindly be informed that the deadline to process new bills is on the
<span class="auto-style1">15th of each month</span>.</strong></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td>For assistance, please contact <a href="mailto:[email protected]">[email protected]</a></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td><strong>*** This is an automatically generated email, please do not reply ***</strong></td>
</tr>
</table>
</div>
</body>
</html>
FETCH NEXT FROM mycursor
INTO @email
END
CLOSE mycursor;
DEALLOCATE mycursor;
END
Changing the query to the following:
SELECT TOP (100) PERCENT dbo.HumersStaffExtension.email, dbo.Calls_Mobile_Header.ExtractDate
FROM dbo.Calls_Mobile_Header INNER JOIN
dbo.HumersStaffExtension ON
dbo.Calls_Mobile_Header.TelNumber = dbo.HumersStaffExtension.telnr_prv COLLATE SQL_Latin1_General_CP1_CI_AS
GROUP BY dbo.Calls_Mobile_Header.RecordStatus, dbo.HumersStaffExtension.usr_id, dbo.HumersStaffExtension.email, dbo.HumersStaffExtension.res_id,
dbo.Calls_Mobile_Header.ExtractDate
HAVING (dbo.Calls_Mobile_Header.RecordStatus = N'0') AND (NOT (dbo.HumersStaffExtension.email IS NULL))
ORDER BY dbo.HumersStaffExtension.email
Will provide me with the following results:
email ExtractDate
[email protected]
July-2014
[email protected]
August-2014
[email protected]
July-2014
[email protected]
August-2014
Is it possible to send email to [email protected] once only including in the html message body the ExtractDate field results for July-2014 and August-2014?
I appreciate any assist on the issue.
Thank you in advance.Refer the below code highlighted in bold.
USE [CallManager]
GO
/****** Object: StoredProcedure [dbo].[PersonalCallsReminder] Script Date: 08/27/2014 10:26:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PersonalCallsReminder]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Email Users
declare @email varchar(max),@date datetime
declare @temp table (email varchar(50), extractDate datetime)
insert into @temp
SELECT TOP (100) PERCENT dbo.HumersStaffExtension.email, dbo.Calls_Mobile_Header.ExtractDate
FROM dbo.Calls_Mobile_Header INNER JOIN
dbo.HumersStaffExtension ON
dbo.Calls_Mobile_Header.TelNumber = dbo.HumersStaffExtension.telnr_prv COLLATE SQL_Latin1_General_CP1_CI_AS
GROUP BY dbo.Calls_Mobile_Header.RecordStatus, dbo.HumersStaffExtension.usr_id, dbo.HumersStaffExtension.email, dbo.HumersStaffExtension.res_id,
dbo.Calls_Mobile_Header.ExtractDate
HAVING (dbo.Calls_Mobile_Header.RecordStatus = N'0') AND (NOT (dbo.HumersStaffExtension.email IS NULL))
ORDER BY dbo.HumersStaffExtension.email
declare mycursor cursor FAST_FORWARD for SELECT DISTINCT email from @temp
OPEN mycursor;
FETCH NEXT FROM mycursor
INTO @email
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @date nvarchar(200)
SELECT @date=Stuff((SELECT ',' + [extractDate]
FROM @temp where email = @email
FOR xml path('')), 1, 1, '')
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'CallsManagement',
@recipients = @email ,
@body_format = 'HTML',
@subject = 'Personal Calls Reminder',
@body = '<!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 content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Personal Calls Reminder</title>
<style type="text/css">
body {
font-family: "Times New Roman", Times, serif;
font-size: 11pt;
.auto-style1 {
background-color: #FFFF00;
</style>
</head>
<body>
<div>Extract Date : ' + @date + '</div>
<div>
<table style="width: 800px">
<tr>
<td>Dear,<br />
<br />
Please review your phone bills and submit your personal calls using the following link:<br />
<a href="Personal">http://companyxyz/personalcalls/">Personal Calls</a></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td><strong>Kindly be informed that the deadline to process new bills is on the
<span class="auto-style1">15th of each month</span>.</strong></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td>For assistance, please contact <a href="[email protected]:[email protected]">[email protected]</a></td>
</tr>
</table>
<br/>
<table style="width: 800px">
<tr>
<td><strong>*** This is an automatically generated email, please do not reply ***</strong></td>
</tr>
</table>
</div>
</body>
</html>
FETCH NEXT FROM mycursor
INTO @email
END
CLOSE mycursor;
DEALLOCATE mycursor;
END
Regards, RSingh -
A number of my users are having similar problems across the entire network. These issues have started on 8/26/2014
This problem is not localized to a specific outlook version, the problem is happening on 2003 and 2007 alike. Also this problem is starting to move into MS-Word.
In outlook i am unable to click the message body. If i click the message body nothing happens. I cannot select any text, type, or anything in the message body. I am however able to type in the message body if i press the 'tab key' and navigate to the message
body.
I have wiped out profiles. reset all user settings, changed datafiles etc. Nothing i do seems to affect this problem.
On microsoft word i am unable to edit a number of documents. These documents are readable, editable etc on different computers. There are not any protections on the files. The user who reported this problem is however unable to edit the text even though
others are able to. To correct this problem we have protected and unprotected the file checked permissions all with no luck.
On the same computer i am unable to change any advanced options. When i attempt to click the listing nothing happens. Its acting in the same manner as outlook is described above. However i am unable to select anything using the 'tab' key.
These problems started on a few different computers, but is beggining to spread and affect more users across the network.
This also does not seem to be a group policy issue. We have a number of different user groups on the network, and this problem is not isolated to any specific user, or group, group member etc..
Thanks in advance to anyone who might be able to lend some assistance to solve this matter.
XHi,
Please first verify the activation status of your Microsoft Office.
If your Microsoft Office is activated, please try to start Outlook or Word in safe mode to check if this issue persists. To do this, press Windows key + R to open the Run command, type
outlook /safe and press Enter.
Also please try to run a repair of your Office installation to check the result. See:
http://support.microsoft.com/kb/924614
Please let me know the result.
Regards,
Steve Fan
TechNet Community Support
It's recommended to download and install
Configuration Analyzer Tool (OffCAT), which is developed by Microsoft Support teams. Once the tool is installed, you can run it at any time to scan for hundreds of known issues in Office
programs. -
View is not retuning data when creating XML message through workflow
Hi All,
This is a very critical problem for me. I am trying to send an XML message (outbound) through XML gateway. This is done from a custom workflow. The message creation is done from the standard procedure ecx_document.sendDirect. The data for the XML file is taken from two views (whcih are created in a custom schema and have synonym in apps). One view for header and another one for line information (I am creating an XML for a purchase order).
The problem is when the workflow try the first time to create a message, the views are not returning data. So message creation fails. Now, if we restart the workflow after some time, it will work and the message is created. What could be the reason for this sort of a behaviour ?
I am using business events to trigger the workflow. The data in the table/view will be updated by standard POAPPRV workflow activities. The custom workflow is subscribed to a business event raised from POAPPRV workflow, at a certain point. So this will execute when this event is raised from POAPPRV wf. The subscription has a phase value of 99.
Any help on this regard will be much appreciated, as this is a critical issue.
Thanks in advance,
Arun
PS : One more thing : this is happening mostly in the production instance where the number of messages is very high (freqency).Hello,
With the BAPI_EQUI_CREATE you can only create PM equipments not IS-U devices that why there is no IS Tab .
You have to use the dialog transactions IQ01, IQ04 or the MM transaction, where you can create devices through a movement.
There is objecttype DEVICE (SWO1) with the following methods:
-> Device.CreateFromData (Create Equipment Master Record)
-> Device.Create (Create Equipment Master Record)
-> Device.CreateISU (Create IS-U: Modification for IS-U)
Please check whether you can use method Device.CreateISU for your requirement.
Regards
Olivia -
Is it possible to exclude .PDF file from Email Message body ?
Hello Friends,
I am sending e-mail from one program with attachment of EXCEL file.
I am using following function SO_NEW_DOCUMENT_ATT_SEND_API1
I am getting body of the message as a separate .PDF file.
Even I want in real message body.
<REMOVED BY MODERATOR>
Regards,
NVM
Edited by: Alvaro Tejada Galindo on Dec 28, 2007 7:47 AMNB - the "data" that is returned by these classes is the data as defined in an adobe form - it doesn't return the content of non-form PDF documents.
The PDF must be an interactive form ( although that doesn't restrict you to using the SAP process for creating the form is my understanding - but I could be wrong. )
Edit - I was wrong! ONLY PDF documents that have been created by the ADS can have data extracted using these classes. So unless you are using Adobe interactive forms - then you will get no value from this functionality - and if you're using AIF then you're probably just use the standard UI element
Edited by: Chris Paine on Oct 26, 2010 6:04 PM -
We are currently receiving XML messages from a business partner that goes
through a transformation/parser first to make sure the xml document was
in MISMO form (Mortgage Industry Standard Message Organization). Then the
document is stored in a clob in a table. The document is stored Without
the tags. We are storing these XML messages into a CLOB datatype for
later processing. I want to read the CLOB and then parse out the
individual fields to store into a table. What is the best way to
accomplish this in PL/SQL? Here is one sample record:
<MORTGAGEDATA>
<APPLICATION LoanPurposeType="OTHER">
<LenderCaseIdentifier>3631681</LenderCaseIdentifier>
<LendersBranchIdentifier>2966448</LendersBranchIdentifier>
</APPLICATION>
<PROPERTY PropertyUsageType="Primary">
<Address1>1335 test</Address1>
<City>las cruces</City>
<State>NM</State>
<PostalCode>88001</PostalCode>
</PROPERTY>
<SUBJECTPROPERTY>
<SubjectPropertyEstimatedValueAmount>69000</SubjectPropertyEstimatedValueAmount>
</SUBJECTPROPERTY>
<BORROWERRECONCILEDLIABILITY LiabilityType="HelocSubjectProperty">
<LiabilityUnpaidBalanceAmount>0</LiabilityUnpaidBalanceAmount>
<LiabilityMonthlyPaymentAmount>0</LiabilityMonthlyPaymentAmount>
</BORROWERRECONCILEDLIABILITY>
<BORROWERRECONCILEDLIABILITY LiabilityType="MortgageLoanSubjectProperty">
<LiabilityUnpaidBalanceAmount>0</LiabilityUnpaidBalanceAmount>
</BORROWERRECONCILEDLIABILITY>
<BORROWER>
<FirstName>scooby</FirstName>
<MiddleName/>
<LastName>doo</LastName>
<NameSuffix/>
<MothersMaidenName>velma</MothersMaidenName>
</BORROWER>
</MORTGAGEDATA>
NOTE: I have tried to use DBMS_XMLQUERY and it comes out like this using a
stored procedure called printclob: When I do this the data is put into
one field called xml_app_msg. The problem is how do I reference the
individual fields like FirstName and so on to store in another table? Can
I apply a stylesheet and if so, how?
Or do I create an object type called xml_app_msg with the fields lastname
and so on?
-- The table is raw_xml_msg_tbl and the field with the stored infomation is
xml_app_msg.
set serveroutput on size 50000
declare
queryCtx DBMS_XMLquery.ctxType;
result CLOB;
begin
queryCtx := DBMS_XMLQuery.newContext('select xml_app_msg from raw_xml_msg_tbl where app_id = :APP_ID');
-- DBMS_XMLQuery.clearBindValue(queryCtx);
DBMS_XMLQuery.setBindValue(queryCtx,'APP_ID','LT1001');
-- get the result..!
result := DBMS_XMLQuery.getXML(queryCtx);
-- Now you can use the result to put it in tables/send as messages..
printClobOut(result);
DBMS_XMLQuery.closeContext(queryCtx); -- you must close the query handle..
end;
OUTPUT:
<?xml version = '1.0'?>
<ROWSET>
<ROW num="1">
<XML_APP_MSG><MORTGAGEDATA>
<BORROWER>
<FirstName>Falls</FirstName>
<MiddleName/>
<LastName>Water</LastName>
<NameSuffix/>
<SSN>123-45-6789</SSN>
</BORROWER>
</MORTGAGEDATA>
</XML_APP_MSG>
</ROW>
</ROWSET>
nullI parse the XML doc into a domdocument and then loop through using xpath.valueof to pull the individual values from the nodes and then build a generic insert. It works quite well with a small number of columns. I'm not sure how it would work with a lot of columns. You can get code examples from Steve Muench's book "Developing Oracle XML Applications".
-
XML Message Not Generated in SUS SRM 4.0
Hi !
In Supplier Self Service(SUS) SRM 4.0 we did a
development for ASN creation through file upload .
It's a <b>BSP</b> Application .
Vendor uploaded the file for ASN creation .
Their generated ASN No. which are in Standard tables.
But for Some of them No XML Messages Genrated which
suppose to pass backend SAP R/3 .
Anybody having any idea where exactly these XML
Messages are? We have searched through SXMB_MONI
& checked all qRFCs.
But unable to find their XML messages.
Looking forward your ideas.
Regards
Sachin S M
<b></b>
Message was edited by: Sachin S MHi,
Can you tell me if the next scenario is possible with EBP 5.0 (WAS 6.40) but without XI.
We need to develop an application to allow the supplier to upload an Invoice in XML and save it in EBP.
I was thinking on using a BSP application with an input field to browse local PC and pick up an Invoice XML file. Then post the XML and parse it in the BSP application and save the invoice in EBP.
Do you have any experience on it or some documentation?
We have EBP 5.0 but don't want to install an SAP XI.
Thank you -
XI have to break/split XML-File into N times a XML Message
Hello,
Can anyone help with this one. I guess this is not an easy exercise but I need to solve it urgently.
XI gets a XML-file from a system.
This file has N times a element <XBT>.
Every time XI gets such a file the number of <XBT> is different.
XI haves to break this xml into N xml messages according to element ><XBT> in order to send them to Sap sequentially.
For example the following XML file have to split up into 2 xml files (the elements XBT occurs 2 times)
How can this be done?
<mt_BubaBestand>
<b><XBT></b>
<Algemeen>
<Verkooporganisatie>5000</Verkooporganisatie>
<Distributiekanaal>50</Distributiekanaal>
<Productgroep>50</Productgroep>
<Ordernummer>123123</Ordernummer>
<Verkoopgroep/>
<Documentdatum>20061207</Documentdatum>
<Medewerker_nr>e60217</Medewerker_nr>
<Medewerker_naam>Hermans</Medewerker_naam>
<CRM_nr/>
<CIFDedicated/>
<Klantgroep/>
</Algemeen>
<b></XBT></b>
<b><XBT></b>
<Algemeen>
<Verkooporganisatie>5000</Verkooporganisatie>
<Distributiekanaal>50</Distributiekanaal>
<Productgroep>50</Productgroep>
<Ordernummer>123123</Ordernummer>
<Verkoopgroep/>
<Documentdatum>20061207</Documentdatum>
<Medewerker_nr>e60217</Medewerker_nr>
<Medewerker_naam>Hermans</Medewerker_naam>
<CRM_nr/>
<CIFDedicated/>
<Klantgroep/>
</Algemeen>
<b></XBT></b>
</mt_BubaBestand>This is pretty standard procedure if you are posting these messages to R/3. As was pointed out in the weblogs above, when using IDocs you don't need to do any tricky configuration. Just make sure that your XML structure is set correctly (ie: 1 to unbounded, etc) to the limits that you want, and XI will automatically loop the mapping process for each instance of the <XBT> item that it detects in the source message. You mentioned:
<i>For example the following XML file have to split up into 2 xml files (the elements XBT occurs 2 times)</i>
Well, you don't actually split it into two XML files per say, XI just processes the source message straight to multiple IDocs using the IDoc adapter. -
When sending a single page PDF file in mail, it always appears as an open file in the message body. Multiple page PDF files appear as attachments. Why the difference and how to change the behavior of single page PDF files so that they appear as attachments instead of open files?
Hello billsbs,
Welcome to the Apple Support Communities!
I understand that when you add a PDF to mail you see its entire contents, but when you add two or more pages Mail shows them as a document icon. To change this behavior for that specific email, please follow the instructions in the attached article.
Mac OS X Mail: About PDF attachments
Have a great day,
Joe
Maybe you are looking for
-
HT201320 How can I switch from one email user to another?
How can I switch from one email account to another?
-
hi, i am trying to download my report'soutput to excel sheet which is not usual Microsoft excel buit it is OPEN OFFICE.the date format in report is DDMMYY but when downloading to OPEN OFFICE its taking as MMDDYY.so what can be done to retain the date
-
Does anyone know how to TRACE the 'sessions' that are performing the callbacks? I need to report the performance statistics and usages involved with using the PL/SQL callback. I have tried putting the instance into trace mode (alter system set sql_tr
-
Opening a link in a specific window size - RH7, WebHelp
I was given the answer to this recently, but I accidentally erased it and now can't find it again. If someone can give it to me again, I promise to save it somewhere safe! I have a link that opens a new window that needs to be a specific size, witho
-
Dear All, Error in T-code J1IH Excise modvat accounts not defined for transaction and 30 excise group Message no. 8I402 i select matl write off. Please explain me use of J1IH with all functions Thanks Shital