Secondary Method Not Invoked - Possible String Length Connection ?
We have a workflow exhibiting a problem that, after much unlayering, can best be be distilled as follows.
A variable of type string exists in the work flow container, and its parameters are set for import/export.
A variable of type string exists in the task container, and its parameters are set for import/export.
An ABAP Object method is called by the task and it manipulates the string.
The task can be called repetitively.
The string is always bound from the workflow container, to the task container, to the method, manipulated, and passed back to the task container and the workflow container as would be expected.
This all works fine.
Additionally, we have implemented a secondary method on the task which displays an image.
While the string processing continues to work well, we have found that our secondary method does not execute if our character string is more than 255 characters in length. If the string is less than 255, the image launch works fine.
Solutions appreciated...
...Mike
Hello,
Interesting! What version is this happening on?
What manipulation is done on the string, does it increase in length.
Could you give an example of the secondary task to display an image, and any other info which would help someone replicate this problem?
If you have a problem that can be replicated at will, you should send it to OSS.
regards
Rick Bakker
Hanabi Technology
Similar Messages
-
ORACLE ADF 11g /JSF TO serviet (Service method) not invoking
Hi,
ORACLE ADF 11g /JSF TO serviet (Service method) not invoking
My project name is : ComplProject
inside the project im having 1 jsp say x.jsp
work environment : (oracleADF 11g) jdev11 and weblogic server 10.3
in x.jsp im displaying 1 go link -> when ever we click on GO link it should go to ComplServlet.java
i tried like,
FacesContext.getCurrentInstance().getExternalContext().redirect("/servlet/ComplServlet");
the "ComplServlet" is an URL pattern in web.xml which points to servlet.
but not working
i pointed to faces-config.xml also , not working
i tried to forward like
FacesContext context = FacesContext.getCurrentInstance();
ServletContext sContext = (ServletContext)context.getExternalContext().getContext();
ServletRequest request = (ServletRequest)context.getExternalContext().getRequest();
System.out.println("third line...............");
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
response.sendRedirect("/servlet/ViewDocument");
sContext.getRequestDispatcher("/servlet/ViewDocument").include(request, response);
brief
(from jsf page) after clicking on GO LINK i need to redirect or control should go to servlet ->service method
thanks in advance
regards,
sandeepHi,
i tried like,
FacesContext.getCurrentInstance().getExternalContext().redirect("/servlet/ComplServlet");
the "ComplServlet" is an URL pattern in web.xml which points to servlet.
but not workingUse like following.
public HttpServletRequest getServletRequest() {
return (HttpServletRequest)facesContext.getExternalContext().getRequest();
public redirect(String url){
getServletRequest().sendRedirect(getServletRequest().getContextPath() + "/servlet/ComplServlet");
}If you are using golink as frank suggested then use it like this.
<af:goLink text="ComplServlet" destination="/servlet/ComplServlet"/>no need of using context when using goLink,
Regards,
Santosh. -
Backing Bean method not invoked - h:selectOneRadio
Hi,
I am trying to invoke a method in the backing bean when a radio button is selected, but for some reasons the method is not getting invoked, any idea why is it so? copying the code for reference.
I have a command button in this jsp which when clicked is fetching the records(from the backing bean) perfectly and a radio button for each of the record so user can select any one of the records listed.
example.jsp
<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My Page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="sample List">
<!--
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" href="styleNN.css" type="text/css">
-->
</head>
<body>
<f:view>
<h:form id="contacts">
<table width="200" border="0" title="sample List" style="border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-style: solid" bgcolor="#F0F0F0" cellpadding="2" cellspacing="2">
<h:outputLabel value="Product List:" style="font-family: Verdana, Arial, Sans-Serif; font-size: 14px; color: Black; font-weight: bold; font-style: normal; width: 198px" styleClass="bigfieldcell"></h:outputLabel>
</table>
<br>
<div style="height: 400px; overflow: auto">
<h:dataTable border="1" value="#{contactsBean.contactsList}" var="contact" bgcolor="#EEEEEE" frame="box" styleClass="orderlabelcell" cellpadding="3">
<h:column>
<f:facet name="header">
<h:outputText value="Select to Edit"/>
</f:facet>
*<h:selectOneRadio valueChangeListener="#{contactsBean.test}">*
* <f:selectItem itemValue="#{contact}" />*
* </h:selectOneRadio>* </h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Category"/>
</f:facet>
<h:inputText value="#{contact.category}" style="border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-color: #FFFFFF; border-top-color: #FFFFFF"></h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Location"/>
</f:facet>
<h:outputText value="#{contact.location}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Problem Type"/>
</f:facet>
<h:outputText value="#{contact.problemType}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Problem Details"/>
</f:facet>
<h:outputText value="#{contact.problemDetails}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Contact"/>
</f:facet>
<h:outputText value="#{contact.contact}"></h:outputText>
</h:column>
</h:dataTable>
</div>
</h:form>
</f:view>
</body>
</html>
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>contactsBean</managed-bean-name>
<managed-bean-class>services.ContactsBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>contactsDatabaseHandler</managed-bean-name>
<managed-bean-class>dao.ContactsDatabaseHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
ContactsBean.java
package services;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import sun.security.action.GetLongAction;
import dao.ContactsDatabaseHandler;
import model.Contact;
public class ContactsBean {
private String selectedLocation;
private List locationList;
private String selectedProblemType;
private List problemTypeList;
private List contactsList;
private ContactsDatabaseHandler dbHandler;
private String address;
private Hashtable region;
private Contact selectedContact;
public void test(ValueChangeEvent event)throws AbortProcessingException {
System.out.println("In Backing Bean : test method.... ");
}Thanks in AdvanceThe valueChangeListener runs at the server side. You need to submit the form to the server side to invoke the valueChangeListener. There is no client side magic like Javascript.
To submit the parent form on change of the dropdown, just add the following attribute with a piece of Javascript to the h:selectOneMenu:onchange="this.form.submit()" -
OnMessage() method not triggered
I can able to send message to Queue but the onMessage() method not invoked.Please help me out resolve this problem.
yes ur correct but i didn't call start() method but i don' know where i need to call.here i have paste my code plz tell me where i need to call start method.
package mdb;
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
* This software is the proprietary information of Sun
* Microsystems, Inc. Use is subject to license terms.
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.CreateException;
import javax.naming.*;
import javax.jms.*;
public class SimpleMessageBean implements MessageDrivenBean,MessageListener {
private transient MessageDrivenContext mdc = null;
private Context context;
public SimpleMessageBean() {
System.out.println("In SimpleMessageBean.SimpleMessageBean()");
public void setMessageDrivenContext(MessageDrivenContext mdc) {
System.out.println("In "
+ "SimpleMessageBean.setMessageDrivenContext()");
this.mdc = mdc;
public void ejbCreate() {
System.out.println("In SimpleMessageBean.ejbCreate()");
public void onMessage(Message inMessage) {
TextMessage msg = null;
try {
if (inMessage instanceof TextMessage) {
msg = (TextMessage) inMessage;
System.out.println("MESSAGE BEAN: Message received: "
+ msg.getText());
} else {
System.out.println("Message of wrong type: "
+ inMessage.getClass().getName());
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
} catch (Throwable te) {
te.printStackTrace();
} // onMessage
public void ejbRemove() {
System.out.println("In SimpleMessageBean.remove()");
} // class
here is weblogic-ejb.xml
<!-- Sample MessageDriven bean Weblogic deployment descriptor -->
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>SimpleMessageBean</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>2</max-beans-in-free-pool>
<initial-beans-in-free-pool>1</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>JNDIMDBQueue</destination-jndi-name>
<connection-factory-jndi-name>MDBConnectionFactory</connection-factory-jndi-name>
<!--connection-factory-jndi-name>weblogic.jms.MessageDrivenBeanConnectionFactory</connection-factory-jndi-name-->
<initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
<jms-polling-interval-seconds>10</jms-polling-interval-seconds>
<jms-client-id>SimpleMessageBean</jms-client-id>
<provider-url>t3://localhost:7001</provider-url>
<trans-timeout-seconds>30</trans-timeout-seconds>
</message-driven-descriptor>
<jndi-name>SimpleMessageBean</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
here is the ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<message-driven>
<ejb-name>SimpleMessageBean</ejb-name>
<ejb-class>mdb.SimpleMessageBean</ejb-class>
<!--transaction-type>Bean</transaction-type-->
<transaction-type>Container</transaction-type>
<trans-attribute>Required</trans-attribute>
<acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>SimpleMessageBean</ejb-name>
<method-name>onMessage()</method-name>
</method>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
i m very new to this program...plz help me -
Class to calculate string length
Hi All,
is there any class having a method to calculate the string length.
ThanksHi Ravi,
You can use the FM SWA_STRINGLENGTH_GET
data: lv_length type SWAEXPDEF-ELEMLENGTH,
lv_string type string.
CALL FUNCTION 'SWA_STRINGLENGTH_GET'
EXPORTING
expression = lv_string
* CONDENSE_NO_GAPS =
* CONDENSE =
* WITH_LEADING_BLANKS =
* IMPORTING
LENGTH = lv_length
* EX_MODIFY_EXPRESSION =
hope it helps you
Regards! -
Hi,
Our PI is getting data from WebSphere MQ and pushing to SAP. So our sender CC is JMS and receiver is Proxy. Our PI version is 7.31.
Our connectivity between the MQ is success but getting the following error while trying to read the payload.
Text: TxManagerFilter received an error:
[EXCEPTION]
java.lang.NullPointerException: while trying to invoke the method java.lang.String.length() of an object loaded from local variable 'payload'
at com.sap.aii.adapter.jms.core.channel.filter.ConvertJmsMessageToBinaryFilter.filter(ConvertJmsMessageToBinaryFilter.java:73)
at com.sap.aii.adapter.jms.core.channel.filter.MessageFilterContextImpl.callNext(MessageFilterContextImpl.java:204)
at com.sap.aii.adapter.jms.core.channel.filter.InboundDuplicateCheckFilter.filter(InboundDuplicateCheckFilter.java:348)
at com.sap.aii.adapter.jms.core.channel.filter.MessageFilterContextImpl.callNext(MessageFilterContextImpl.java:204)
I have searched SDN but couldn't fix it. Please provide your suggestion.
With Regards
Amarnath MHi Amarnath,
Where exactly you are getting this error?
If you are getting at JMS Sender communication channel, try to stop and start the JMS communication channel and see the status, also use XPI Inspector to get the exact error log.
for reference follow below blogs:
Michal's PI tips: ActiveMQ - JMS - topics with SAP PI 7.3
Michal's PI tips: XPI inspector - help OSS and yourself
XPI Inspector -
Hi everyone,
I just installed SP09 and i was testing the solution. And I found a problem with the approvals tasks.
I configured a simple ROLE approval task for validate add event. And when the runtime executes the task, the dispatcher log shows a error:
ERROR: Evaluation of approvalid failed with Exception: while trying to invoke the method java.lang.String.length() of an object loaded from local variable 'aValue'
And the notifications configured on approval task does not start either.
The approval goes to the ToDO tab of the approver, but when approved, also the ROLE stays in "Pending" State.
I downgraded the Runtime components to SP08 to test, and the approvals tasks works correctly.
Has anyone passed trough this situation in SP09?
I think there is an issue with the runtime components delivered with this initial package of SP09.
Suggestions?Hi Kelvin,2016081
The issue is caused by a program error in the Dispatcher component. A fix will be provided in Identity Management SP9 Patch 2 for the Runtime component. I expect the patch will be delivered within a week or two.
For more info about the issue and the patch please refer to SAPNote 2016081.
@Michael Penn - I might be able to assist if you provide the ticket number
Cheers,
Kristiyan
IdM Development -
Hi , when i try to run my program, i keep getting the error msg:
Error(23,19): method getName(java.lang.String) not found in class javax.swing.JTextField
I have checked the java API and it inherits from the awt.Component class and should be accessible via the jtextfield.
I have tried the following:
trying to initailise the JTextField at the start.
Using getName works if i use it within the loop after setting the name.
Does anybody know what i am doing wrong please?
public class clsMember extends JPanel implements ActionListener {
private JButton jbtnLog;
private String surname;
private JTextField txtItem;
public clsMember() {
super(new SpringLayout());
makeInterface();
surname = txtItem.getName("Surname").toString();
private void makeInterface() {
//code omitted
for (int i = 0; i < numpairs; i++) {
JLabel l = new JLabel(strLabels, JLabel.LEADING);
this.add(l);
//if the array item is salutation create a combobox
if (strLabels[i] == "Salutation") {
jcomSalutation = new JComboBox(strSalutation);
jcomSalutation.setSelectedIndex(0);
this.add(jcomSalutation);
} else {
txtItem = new JTextField(10);
l.setLabelFor(txtItem);
txtItem.setName(strLabels[i].replaceAll(" ", "")); //this is where the label is set and if i do a system.out it shows fine. getName works here too.
this.add(txtItem);
//code omittedIf i have a loop that creates the jtextfields such as
txtItem = new JTextField(10);
l.setLabelFor(txtItem);
txtItem.setName(strLabels.replaceAll(" ", ""));
this.add(txtItem);How is it then possible to assign to a string the value of a *specific jtextfield*. Lets say that one of these JTextfields has the name surname.
How is it possible for me to writeString surname = surnamejtextfield.getText(); -
Searching LOV is not invoking any method
Hello JHeadstart team:
I have the following behaviour with my LOVs generated from JHeadstart (10.1.2)
The "Go" button seems to not invoke anything, just give back the same page, not doing any filter.
By watching the log window in JDeveloper, seems like no event is invoked.
Also, I don't see in the generated lov.uix page an event called lovFilter under handlers (should I have one?)
When the page is invoked from the parent page, I have the following log, and the advancedSearch is being invoked giving me the filter, if I typed something before clicking the flashlight:
12:01:56 DEBUG (JhsActionServlet) -Setting current HttpServletRequest on jhsUserRoles wrapper object on session to allow EL access to request.isUserInRolefunction
12:01:56 DEBUG (JhsActionServlet) -Request class: com.evermind.server.http.EvermindHttpServletRequest
12:01:56 DEBUG (JhsActionServlet) -Request URI: /BugTracker-ViewController-context-root/LovUpdProcess2.do
12:01:56 DEBUG (JhsActionServlet) -Request Character Encoding: windows-1252
12:01:56 DEBUG (JhsActionServlet) -Parameter baseUIModel: MeineFMUIModel
12:01:56 DEBUG (JhsActionServlet) -Parameter searchText: <Unbekannt>
12:01:56 DEBUG (JhsActionServlet) -Parameter multiSelect: false
12:01:56 DEBUG (JhsActionServlet) -Parameter event: lovFilter
12:01:56 DEBUG (JhsActionServlet) -Parameter lovUsage: form
12:01:56 DEBUG (JhsActionServlet) -Parameter searchAttribute:
12:01:56 DEBUG (JhsActionServlet) -Parameter contextURI: /BugTracker-ViewController-context-root
12:01:56 DEBUG (JhsActionServlet) -Parameter pageTimeStamp: ignore
12:01:56 DEBUG (JhsActionServlet) -Parameter source: VB_MeineFMProzess
12:01:56 DEBUG (JhsActionServlet) -Parameter enc: windows-1252
12:01:56 DEBUG (JhsActionServlet) -Parameter configName: BaseUIPBCfg1
12:01:56 DEBUG (JhsDataAction) -Executing action /LovUpdProcess2
12:01:56 DEBUG (JhsDataAction) -MultiSelect stored on session Context with value false
12:01:56 DEBUG (JhsDataAction) -lastIssuedPageTimeStamp NOT updated because pageTimeStamp parameter has value 'ignore'
12:01:56 DEBUG (JhsDataAction) -Found existing searchBean for UpdProcess2UIModel
12:01:56 DEBUG (JhsDataAction) -Stored searchBean for UpdProcess2UIModel on request
12:01:56 DEBUG (JhsDataAction) -No commit event in request and multiRowUpdateEvent request param not set, multi-row update NOT executed
12:01:56 DEBUG (JhsDataAction) -executing onLovFilter
12:01:56 DEBUG (JhsDataAction) -Lov icon clicked, clear searchText in searchBean
12:01:56 DEBUG (JhsDataAction) -executing onQuickSearch
12:01:56 DEBUG (JhsDataAction) -Populating bean: searchBean
12:01:56 DEBUG (JhsApplicationModuleImpl) -executing advancedSearch for ProzessList
12:01:56 DEBUG (JhsDataAction) -Storing table binding factory under key jhsTableBindings on request
12:01:56 DEBUG (JhsDataAction) -Forward set by parameter property returned: /WEB-INF/page/LovUpdProcess2.uix
But nothing happens when clicking "Go". Is it a bug? Do I have any workaround?Here goes my workaround. JHeadstart Team, please check if what I'm doing is right. If yes, I believe this is an important correction for future releases:
Reason:
The LOV page generated has in the <listOfValues> tag the attribute searchAreaMode="filter".
The onLovFilter event has the code:
String searchAreaMode = request.getParameter(SEARCH_AREA_MODE);
if ("advanced".equals(searchAreaMode))
onAdvancedSearch(daContext);
else if ("simple".equals(searchAreaMode))
onQuickSearch(daContext);
else
// if we get here, we are not yet in the LOV page, the user
// has invoked the page through clicking on the lov icon.
// we must clear the search text so it is not displayed as search
// criterium in the lov (searchAttribute is already empty when
// clicking the lov icon)
// And onQuickSearch should only execute the query if iterator
// is not inf find mode. To signal to the onQuickSearch method that
// this check is needed and to clear the search text, we set a
// request attribute
request.setAttribute(LOV_CHECK_FIND_MODE, "true");
mLog.debug("Lov icon clicked, clear searchText in searchBean");
onQuickSearch(daContext);
But this code is setting the LOV_CHECK_FIND_MODE to true when searchArea = "filter", making the onQuickSearch event to set the searchText to null
I overriden the whole event adding also the
else if ("filter".equals(searchAreaMode))
onQuickSearch(daContext);
and now is working fine.
In my previous post I mentioned that also the attribute was wrong, but this was my mistake in the ApplicationStructure file. -
Invoking methods extracted from a string?!?
Hi everybody. I hope the subject is not confusing. What I'm really looking for is some Perl-like behaviour in Java. In Perl its possible to execute subroutines (basicly methods) extracted from a string ("&sub()"). Is there anything similar in Java?
What I would like to do is to process a string and if it has a method (object.getTime()), the method will be called and the return value stored in its place.
Please let me know if more explanation is needed.
Thanks in advance for all the help!
Leo.I use a language called MUMPS where you can do that as well - execute strings as commands etc. I don't know much about Reflection but it looks like you can get method (Objects) from strings and execute them as well ...
-
Hi ,
oracle apps version : 11.5.10.2 and database version 11.2.0.2.
OS version Solaris Sparc 64 Bit.
We were performing a cloing activity on a new server and now while opening forms we are getting the following error :
error:java.lang.Double:method parseDouble(Ljava/lang/String;)D not found.Please suggest what has to be done.
Regards
KkHi ,
D:\Documents and Settings\800045916>java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)We have been struggling with the Solaris server for this. Is something needed from there also or just need to have the latest JRE in the windows client machine.
Regards
Kk -
Secondary method is not working
Hello,
I have a problem with my secondary method. I created a method Z_Call_ME23N for my purchase order release workflow and added it as a secondary method to my user decision step.
In testing in swo1 is no problem. Also the authorization test in SU53 are ok.
But when I try to open my workitem a message box comes up: 'Error when starting submethod'.
How can I check it what I have done wrong?
Thanks for your help,
ChristophHi Martin,
thanks for your answer.
I have BUS2012 in my WF container, and it is delegated to ZBUS2012 (so I was wrong to say it is ZBUS2012).
I also have the BO in the decision step (wondered if I was wrong - I made a copy of the standard decision task to add my own container element in the copy - this is the task I am now using).
So actually my bindings for this step is:
BUS2012 (delegated to ZBUS2012) --> BUS2012
is that right?
Unfortunatly it is still not working.
I also tried to clear the buffer (as it says so in others posts), checked the authorizations,etc.
Thanks a lot for you ideas, it is still my first workflow and I don´t know where else I could take a look to get some help.
Christoph
Edited by: Christoph on Jan 30, 2008 3:23 AM -
HTTP Connection - ADAPTER.HTTP_EXCEPTION - HTTP 405 Method not allowed
Hello,
we are trying to connect to a server using http. However so far the connection does not work.
I tried both the SOAP receiver (without SOAP envelope) and the plain HTTP receiver.
1. SOAP Receiver: ADAPTER.HTTP`_EXCEPTION - HTTP 405 Method Not Allowed
2. HTTP Receiver: HTTP Client code 400 reason ICM_HTTP_CONNECTION_FAILED
Does anyone has an idea what the problem possibliy could be?`
Thank you!Hello Folk,
Check it once this blog this will be similar to your requirment
HTTP 404 not found
Regards,
Ravi. -
Under ALDSP 2.5, the following XQuery...
where string-length($medacf) = 0 or $medacf = $acf/column_name
...used to generate this SQL:
where ((? = 0) OR (? = t1."COLUMN_NAME"))
However, under ODSI 10gR3, the where clause is missing. Here's the query plan:
<?xml version="1.0"?>
<FLWOR>
<return>
<elementConstructor name="UserGroup" tip="{ld:PhysicalLayer/UserProfile/UserGroup}UserGroup">
<elementConstructor field="(0)" name="UserID" from="$f7815">
</elementConstructor>
<elementConstructor field="(1)" name="GroupID" from="$f7815">
</elementConstructor>
</elementConstructor>
</return>
<where sqlstop="Unable to generate SQL for XQuery expression: Cannot generate SQL for the function {http://www.bea.com/xquery/xquery-operators}integer-equal with parameters (Parameter,INTEGER), (Constant,INTEGER). There is no equivalent SQL for this function in general or with these particular parameter kinds/types. ">
<operator ns="op" name="boolean-or" tip="{http://www.w3.org/2004/07/xpath-operators}boolean-or">
<EQ sqlstop="Cannot generate SQL for the function {http://www.bea.com/xquery/xquery-operators}integer-equal with parameters (Parameter,INTEGER), (Constant,INTEGER). There is no equivalent SQL for this function in general or with these particular parameter kinds/types. " tip="{http://www.bea.com/xquery/xquery-operators}integer-equal">
<operator ns="fn" name="string-length" tip="{http://www.w3.org/2004/07/xpath-functions}string-length">
<variable name="__fparam0" kind="EXTERNAL">
</variable>
</operator>
<constant>
<![CDATA[[integer 0]]]>
</constant>
</EQ>
<EQ tip="{http://www.bea.com/xquery/xquery-operators}string-equal">
<variable name="__fparam0" kind="EXTERNAL">
</variable>
<variable name="(2)" from="$f7815" kind="extracted">
</variable>
</EQ>
</operator>
</where>
<for name="$f7815">
<source ns="fn-bea" name="UsrProfDataSource" sqlwarning="Generated SQL query does not have a WHERE clause. This may cause the query to take longer to finish and use excessive memory resources." kind="relational" tip="UsrProfDataSource">
<![CDATA[SELECT UPPER(t1."USER_ID") AS c1, t1."GRP_ID" AS c2, t1."USER_ID" AS c3
FROM "USRPROF"."USER_GRP" t1]]>
</source>
</for>
</FLWOR>We have found that in ODSI 10gR3, the code pattern below is not pushed down if $logicalExpression is an expression that compares two atomic values and one of the values is a constant (used to work in ALDSP 2.5):
where $logicalExpression or $table/column = $input
Sample code that is not pushed down as expected:
where fn:string-length($accountNumber) _<= 0_ or $account/ACCT_NUM = $accountNumber
where fn:empty($accountNumber) or $accountNumber _= ''_ or $account/ACCT_NUM = $accountNumber
where fn:empty($clientId) or $clientId _= 0_ or $account/CLIENT_ID = $clientId
where fn:empty($effectiveDate) or $effectiveDate _= xs:date('0001-01-01')_ or $account/ACCT_EFF_DT = $effectiveDate
We have also found that a workaround is to tweak the code and replace $logicalExpression with something that can be pushed down and functionally equivalent (using fn:not, fn-bea:fence, fn:exactly-one, etc.).
Code that works:
where fn:not(fn:string-length($accountNumber) > 0) or $account/ACCT_NUM = $accountNumber
where fn-bea:fence(fn:string-length($accountNumber) <= 0) or $account/ACCT_NUM = $accountNumber
where fn:exactly-one(fn:string-length($accountNumber) <= 0) or $account/ACCT_NUM = $accountNumber
After examining the query plans, it appears to me (please correct me if any of these is not true):
- Comparators for atomic types ({http://www.bea.com/xquery/xquery-operators} integer-less-than-or-equal, string-equal, date-equal, etc.) are not pushed down if they are used to compare anything with a constant
- An "or" operation ({http://www.w3.org/2004/07/xpath-operators} boolean-or) is not pushed down if any of its operands cannot be pushed down
- fn:not, fn-bea:fence, and fn:exactly-one can be pushed down even if their operand cannot be pushed down
So the question is, why comparators are not pushed down when constants are involved? Is this a bug?
Thanks!
-r. -
I have uploaded my Application which was running fine in other IDE to jdev 10.1.3, when i compile the follwing error error in jsp page.
Error(400,8): method include(java.lang.String, boolean) not found in class javax.servlet.jsp.PageContext
My jsp code where error is shown is
<jsp:include page="querySections/generation.jsp" flush="true">
<jsp:param name="TSN" value="<%=strParamValue[1]%>"/>
<jsp:param name="SectionID" value="<%=String.valueOf(lngSectionID)%>"/>
</jsp:include>
pl help me in solving this its urgent...
Thanks & Regards
LakshmiHi,
code snippet looks okay and is identical with what JDeveloper generates.
Frank
Maybe you are looking for
-
3g and wireless together, problems
I have the iphone 4 and when my wireless is connected at home. My AIM is slow and I usually have to wait a long time before the outgoing emails are sent. The go but can take several minutes Can anyone help with this?
-
POSDM Monitor : /POSDW/MON0 Question
Hi All, I have a very simple question (I guess). When "Process Tasks Online" for a POS transaction we get a popup window with the same title. In the popup window we have "Processing Task" Drop Down List which shows all the relevant tasks. My questio
-
Cant sync windows live contacts on macbook
hi, i wanna sync my windows live account for saving contacts and calendars on my macbook pro i somehow managed to connect mail application with windows live , on calendars i have registered it but it is not working , in calendars i cant see windows o
-
HT5694 I forget my ID and password for find my ipad please help.
I forget my ID and password for find my iphone please help..
-
Applying call manager security patches
We need to apply the latest security and OS patches to our CallManager cluster. We are running the following software versions. Call Manager 3.3.5(sr2) OS Image 2000.2.4 OS Service Release 2000.4.3aSR3 OS Upgrade 2000.4.3a SQL2K Service Pack SP4 IPCC