Using Parentheses to Call a Method?
So my code looks like this:
DATA: o_ztransload_tools TYPE REF TO zcl_transload_toolbox.
CREATE OBJECT o_ztransload_tools.
o_ztransload_tools->zzcreate_date_range( zzobjin_dtlw = zzin_dtlw
zzobjin_dthigh = zzin_dthigh ) .
This class method returns a date range. I would like to understand how to write this code without using the 'IMPORT' 'EXPORT' , parameter identifiers...if possible., and just using parentheses, as a shorthand way of writing the call method. So, from what I've read, it is possible to write the code this way.But when I try to add code for the single returning value, I get syntax errors. How should the code be written for the method's returning value to be syntactically correct?
Thank-You, Tom
There would a several different combinations you may have to use depending on the type of parameters.
If you have a single RETURNING parameter and single IMPORTING parameter, you can receive the results in that variable directly. Llike:
lv_Day = zcl_Test=>give_day( sy-datum ).
If you have multiple Importing parameters, you call the method like:
zcl_test=>get_data(
io_data = o_data
io_data2 = o_data ).
You can also set the the preferred parameter, when you have more than one importing parameter. Like IO_DATA and IO_DATA2. If make the preferred parameter as the IO_DATA2, than you can use pass this parameter without specifying parameter name.
zcl_test=>get_Data( o_data_second ).
If you have importing, exporting, changing parameters; than you have to explicitly mention the word EXPORTING, IMPORTING ... etc to let the system know what to change
zcl_test_alv=>factory(
EXPORTING
iv_alv_type = alv_1
IMPORTING
eo_alv = me->o_alv
changing
ct_Data = t_Data ).
You can't have Receiving parameter along with Changing and Exporting parameters in the same method.
Regards,
Naimesh Patel
Similar Messages
-
Error while updating data using session and call transaction method
Hi all,
i have to update data using MM01 transaction from flat file to database.i have used both session method and call transaction method to do that.in both the methods data has been transferred from internal tables to screens but while updating the data that is by clicking the ok-code at the end of the transaction iam getting a dialogue box stating
SAP EXPRESS DOCUMENT "UPDATE WAS TERMINATED" RECEIVED FROM AUTHOR "SAP".
please tell whether the problem lies and solution for that.
thanks and regards.hi,
check your recording.check whether u saved your material no in recording or not.
once again record the transacton mm01.
MATNR LIKE RMMG1-MATNR,
MBRSH LIKE RMMG1-MBRSH,
MTART LIKE RMMG1-MTART,
MAKTX LIKE MAKT-MAKTX,
MEINS LIKE MARA-MEINS,
MATKL LIKE MARA-MATKL,
BISMT LIKE MARA-BISMT,
EXTWG LIKE MARA-EXTWG,
these are the fields which u have to take in internal table.
this is the record which i took in my flatfile.use filetype as asc and hasfieldseperator as 'X'.
SUDHU-6 R ROH MATSUDHU " 001 7890 AA
i did the same.but i didn't get any error. -
Using AJAX to call a method of controller.
I am working with weblogic 10.2 .I need to call a method of the controller using Ajax (because i don't wan to refresh the whole page).
I am new to Ajax.
Can any one provide me the stub or prototype for calling a method of contoller from jsp using AJax.Another approach, if you would like to call a Pageflow action and then update only a portion of a portlet with the result, would be to use the Dynamic Content taglib.
http://download.oracle.com/docs/cd/E13155_01/wlp/docs103/javadocjsp/commonui/dc/tld-summary.html
Edited by: Brad Posner on Jan 12, 2009 10:42 AM -
Use Action to call JSP method instead for forwarding to another url
I have a servlet button to save data I have entered on a form. The only way I understand to save the data when the button is pressed is to use ACTION and call up a .jsp to do the work like this:
<FORM ACTION="http://localhost:8080/examples/jsp/learningJSP/UpdateStudentInfo.jsp" METHOD="POST">
and here's the .jsp that sets my current properties from the form and saves them.
<HTML>
<BODY>
<jsp:useBean id="studentDataBean"
class="learningservlets.StudentDataBean"
scope ="application"/>
<jsp:setProperty name="studentDataBean" property ="*" />
<!--call saveData() to send the data you just set - to the database%=stuInfo.saveData()%>-->
<%studentDataBean.saveData();%>
<jsp:forward page="PresentStudentData.jsp" />
<H1>
UpdateStudentInfo Bean
</H1>
</BODY>
</HTML>
The problem I have with using this approach is my user is sent to another page. Is there anyway to complete the above task transparently (i.e. without making the user go to the page that does all of the work)?
Thanks for any assistance you may offer.Use this,
UpdateStudentInfo.jsp
<%@ page import="learningservlets.StudentDataBean" %>
<jsp:useBean id="studentDataBean"
class="learningservlets.StudentDataBean"
scope ="application">
<jsp:setProperty name="studentDataBean" property ="*" />
</jsp:useBean>
<!--call saveData() to send the data you just set - to the
database%=stuInfo.saveData()%>-->
<%
studentDataBean.saveData();
response.sendRedirect("PresentStudentData.jsp");
return;
%>
Hope this helps.
Sudha -
Calling a pkg from managed code and then using reflection to call a method from a script task
Hi we run 2012 std. I have some pretty good evidence that when I call my pkg from a .net service, a script component in that pkg fails when trying 2 use reflection to load and invoke our .net message history method. The exception is either on
the invoke or in the message history method. I suspect its in the method but will take additional steps 2 verify.
But when I run the pkg stand alone, it has no problem and the method does what it is supposed 2 do.
There r no vars passed from the service to the pkg. I wonder if its a managed to unmanaged to managed issue that the community is already aware of. If not, my apologies 4 posting this quickly.
I'll post more info here as I collect it.we have 2 theories after showing the exception trace to folks who r more adept at managed code.
the first is related to the fact that our 3rd party dlls (I think entity framework is included in these) r older versions. I don't want to discount this theory but we have some evidence already that this might not be true.
I hope I can do justice to the 2nd theory but will make it clearer and clearer as I get a better understanding. I believe this is what Arthur was saying and I applaud his instincts. They explained that .net is so "smart" that it detected
a change in namespace (ie context as Arthur said) and purposely threw an exception 2 save us from ourselves. The workarounds discussed were a bit over my head but I will continue trying to better understand it. The fact that many of the methods
we call after reflection r now merged into one assembly seemed relevant to the discussion and possible workarounds.
this link came up in their discussion and I believe the bottom line here is that by qualifying assembly names further (in config?)r, a workaround is possible.
http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx .
This link came up as well and has something to do with ILMerge and workarounds to ILMerge.
http://elegantcode.com/2011/04/02/dynamically-load-embedded-assemblies-because-ilmerge-appeared-to-be-out/ .
Finally, this link came up and seems to have something to do with embedding your dlls in one assembly without them losing their identity.
http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
I'll post more here as we muddle thru this. -
Using reflector to call a method on an objectRef
hey all! i have the following code to call a function to the objectRef that i keep in an array (jobServers) ...
// jobServers[0].objServerRef.addService(theCallbackObjectRef, number, jobServers);
Class c = Class.forName("WorkflowFramework.Job");
System.out.println(jobServers[0].functionName);
Method meth = c.getMethod(jobServers[0].functionName);
meth.invoke(jobServers[0].objServerRef, theCallbackObjectRef, number, jobServers);
but i get the following error :
addService
FileClient Error: WorkflowFramework.Job.addService()
java.lang.NoSuchMethodException: WorkflowFramework.Job.addService()
at java.lang.Class.getMethod(Unknown Source)
at Client.main(Client.java:123)
in the first line i print the name of the function (addService) that i want to be called, and it is correct. Then i see that the function is called on the WorkflowFramework.Job and not on the jobServers[0].objServerRef which is an object of instanse Job.
The addService function exists there because the declaration that is now in commends is running just fine if i take out the commends..
Do you think the problem lies in the fact that Job is actually an interface declared like :
//the job interface to enable client to choose services.
public interface Job extends JobOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity
} // interface Job
the addService function is declared in the JobOperations...
any help plzzz?well.. you are kind of right...
i write them as a struct in the IDL and the it is
automatically transformed in the following java Class
public final class lineArrayServers implements
org.omg.CORBA.portable.IDLEntity
public WorkflowFramework.Job objServerRef = null;
public String functionName = null;
public lineArrayServers ()
} // ctor
public lineArrayServers (WorkflowFramework.Job
_objServerRef, String _functionName)
objServerRef = _objServerRef;
functionName = _functionName;
} // ctorand then i wrap it in an array of these.. the
jobServers...aha. so struct is an IDL construct in this case. I've never written any IDL, but I have written 'C', hence the confusion!
thanks -
Using reflector to call a method on the servant
hey all! i have the following code to run a function to the objectRef that i keep in an array (jobServers) ...
// jobServers[0].objServerRef.addService(theCallbackObjectRef, number, jobServers);
Class c = Class.forName("WorkflowFramework.Job");
System.out.println(jobServers[0].functionName);
Method meth = c.getMethod(jobServers[0].functionName);
meth.invoke(jobServers[0].objServerRef, theCallbackObjectRef, number, jobServers);but i get the following error :
addService
FileClient Error: WorkflowFramework.Job.addService()
java.lang.NoSuchMethodException: WorkflowFramework.Job.addService()
at java.lang.Class.getMethod(Unknown Source)
at Client.main(Client.java:123)
in the first line i print the name of the function (addService) that i want to be called, and it is correct. Then i see that the function is called on the WorkflowFramework.Job and not on the jobServers[0].objServerRef which is an object of instanse Job.
The addService function exists there because the declaration that is now in commends is running just fine if i take out the commends..
Do you think the problem lies in the fact that Job is actually an interface declared like :
//the job interface to enable client to choose services.
public interface Job extends JobOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity
} // interface Job
the addService function is declared in the JobOperations...
any help plzzz?when i copy/paste that code in here i realised that..but i thought that it wanted the type of the class so it could make any sense to me to declare it as an array ...
anw i changed the declaration to
Class[] paramTypes = { WorkflowFramework.TheCallbackInterface.class, int.class , WorkflowFramework.JobPackage.lineArrayServers[].class};
but i get a "wrong number of arguments " now...
FileClient Error: wrong number of arguments
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at Client.main(Client.java:167)
how is this possible?!?!?!? -
How to use Java to call a method in C program
Hi,
I have a method written in C program, and I need to call it in Java. Is there any way to do that? Thanks for ur suggestion.
RegardsHi,
JNI is the standard way to call C/C++ runtime code from Java.
you find the spec under
http://java.sun.com/products/jdk/1.2/docs/guide/jni/
Greetings -
How use RFBIBL00 for call transaction method.
Hi,
I am trying to use the direct input program RFBIBL00 to park document throught the transaction FBV1.
Though I am trying to use call transaction option 'C'. Not able to process data directly but a session is getting created in SM35.
Please let me know how to handle this.
Thanks in advance.
Pradeep.HI
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/lsmwwithRIFBIBL00
Regards
Pavan -
Hello everybody,
I've a problem to call a EJB form a PHP script.
There is a Apache with PHP 5.2.0 and a SAP NetWeaver Application Server 7.10 / AS Java 7.10 running on the system.
I wanted to use soap to call a method in an EJB. It's only a test EJB:
[code]
package beans;
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService(name="HelloWorldEARBean",serviceName="HelloWorldEARBeanService",targetNamespace="http://beans/",portName="HelloWorldEARBeanPort") @Stateless public class HelloWorldEARBean {
@WebMethod public String sayHello(String testStr){
return "Hello Mr. "+testStr;
@WebMethod public String getReturn(String inputStr){
return "the return value is"+inputStr;
[/code]
I tried it with the PEAR SOAP in the following script:
[code]
<?php
require_once 'SOAP/Client.php';
$wsdl_url = 'http://localhost:50000/HelloWorldEARBeanService/HelloWorldEARBean?wsdl';
$WSDL = new SOAP_WSDL($wsdl_url);
$client = $WSDL->getProxy();
$client->__trace(1);
$options=array('namespace' => 'http://beans/',
'style' => 'rpc',
'soapaction' => 'sayHello');
$NAME = "Bob";
$parameters=array(
'parameters', $NAME
$result = $client->getReturn($parameters);
echo "<pre>";
print_r($params);
echo "</pre>";
echo "<h2>return</h2>";
echo "<pre>";
print_r($result);
echo "</pre>";
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->__getlastrequest(), ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->__getlastresponse(), ENT_QUOTES). '</pre>';
?>
[/code]
The AS distributes the following WSDL:
[code]
- <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://beans/" xmlns:tns="http://beans/">
- <wsdl:types>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://beans/">
<xs:element name="getReturn" type="tns:getReturn" />
<xs:element name="getReturnResponse" type="tns:getReturnResponse" />
<xs:element name="sayHello" type="tns:sayHello" />
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
- <xs:complexType name="sayHello">
- <xs:sequence>
<xs:element name="arg0" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="sayHelloResponse">
- <xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="getReturn">
- <xs:sequence>
<xs:element name="arg0" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="getReturnResponse">
- <xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
- <wsdl:message name="sayHelloIn">
<wsdl:part name="parameters" element="tns:sayHello" />
</wsdl:message>
- <wsdl:message name="sayHelloOut">
<wsdl:part name="sayHelloResponse" element="tns:sayHelloResponse" />
</wsdl:message>
- <wsdl:message name="getReturnIn">
<wsdl:part name="parameters" element="tns:getReturn" />
</wsdl:message>
- <wsdl:message name="getReturnOut">
<wsdl:part name="getReturnResponse" element="tns:getReturnResponse" />
</wsdl:message>
- <wsdl:portType name="HelloWorldEARBean">
- <wsdl:operation name="sayHello" parameterOrder="parameters">
<wsdl:input message="tns:sayHelloIn" />
<wsdl:output message="tns:sayHelloOut" />
</wsdl:operation>
- <wsdl:operation name="getReturn" parameterOrder="parameters">
<wsdl:input message="tns:getReturnIn" />
<wsdl:output message="tns:getReturnOut" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="HelloWorldEARBeanBinding" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" type="tns:HelloWorldEARBean">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="sayHello">
<soap:operation soapAction="" />
- <wsdl:input>
<soap:body parts="parameters" use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getReturn">
<soap:operation soapAction="" />
- <wsdl:input>
<soap:body parts="parameters" use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="HelloWorldEARBeanService">
- <wsdl:port name="HelloWorldEARBeanPort" binding="tns:HelloWorldEARBeanBinding">
<soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost:50000/HelloWorldEARBeanService/HelloWorldEARBean" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
[/code]
By the following output it's obvious that the AS or the EJB (webservice) doesn't receive the parameter send by the PHP script. Look at the output:
return value:
the return value is null
[code]
Request:
POST /HelloWorldEARBeanService/HelloWorldEARBean HTTP/1.0
User-Agent: PEAR-SOAP 0.8.0RC4-devel
Host: localhost
Content-Type: text/xml; charset=UTF-8
Content-Length: 438
SOAPAction: ""
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-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:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
<getReturn xmlns="http://beans/">
<item>parameters</item>
<item>Bob</item></getReturn>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Response:
HTTP/1.1 200 OK
server: SAP NetWeaver Application Server 7.10 / AS Java 7.10
content-type: text/xml; charset=utf-8
date: Wed, 14 Feb 2007 15:51:53 GMT
connection: close
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2007-02-14T15:51:53Z</wsu:Created>
<wsu:Expires>2007-02-14T15:52:23Z</wsu:Expires></wsu:Timestamp></wsse:Security></SOAP-ENV:Header>
<SOAP-ENV:Body><ns2:getReturnResponse xmlns:ns2='http://beans/'>
<return>the return value is null</return></ns2:getReturnResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
[/code]
I used different soap interfaces for PHP like nusoap and the integrated soap interface of PHP 5.
Further I experimented with different parameters inside the function call
that results in small differencies at the xml-request.
Thanks.Hi
I've solved the problem now. I just have to add
@SOAPBinding(style=SOAPBinding.Style.RPC)
in the EJB, that's all.
Here is the complete code, ... maybe some other guys have this problem too, so I will post the working code:
At first the EJB:
package beans;
import javax.ejb.Stateless;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import beans.HelloWorldEARBean;
@WebService(name="HelloWorldEARBean",serviceName="HelloWorldEARBeanService",targetNamespace="http://beans/",portName="HelloWorldEARBeanPort")
@SOAPBinding(style=SOAPBinding.Style.RPC)
@Stateless public class HelloWorldEARBean {
@WebMethod public String sayHello(@WebParam(name="testStr") String testStr){
return "Hello Mr. "+testStr;
2. the local XML:
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://beans/" xmlns:tns="http://beans/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://beans/">
<xs:element name="sayHello" type="tns:sayHello"/>
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/>
<xs:complexType name="sayHello">
<xs:element name="testStr" type="xs:string" minOccurs="0"/>
</xs:complexType>
<xs:complexType name="sayHelloResponse">
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="sayHelloIn">
<wsdl:part name="parameters" element="tns:sayHello"/>
</wsdl:message>
<wsdl:message name="sayHelloOut">
<wsdl:part name="sayHelloResponse" element="tns:sayHelloResponse"/>
</wsdl:message>
<wsdl:portType name="HelloWorldEARBean">
<wsdl:operation name="sayHello" parameterOrder="parameters">
<wsdl:input message="tns:sayHelloIn"/>
<wsdl:output message="tns:sayHelloOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloWorldEARBeanBinding" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" type="tns:HelloWorldEARBean">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloWorldEARBeanService">
<wsdl:port name="HelloWorldEARBeanPort" binding="tns:HelloWorldEARBeanBinding">
<soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost:50000/HelloWorldEARBeanService/HelloWorldEARBean"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
3. the PHP script:
see next post
Thank you very much for your help. -
Calling a method in another JVM instance
I know you can use RMI to call the methods from classes across the network, but if the class is on the same machine, just in another JVM instance, is there a way to bypass the network layer and have the JVMs communicate directly with each other?
Its not so much the overhead, as having the
flexibility, to not have to modify firewall rules
which disallow loop back traffic and most other non
http (port 80) traffic if the production server is
set up that way.You're coding to interfaces anyway, have a factory return either an RMI object which does the actual RMI work, or just a vanilla one if you're just running locally. As far as I know, there isn't a way to entirely circumvent the socket layer with RMI. Anyone know any different? -
Doubt in uploading using call transaction method
hi all
i am uploading f-29 in call transaction method .. i have a problem in currency field, the currency field is not picking up it shows a error that input field is longer than screen field .. i have declared currency field as type BSEG-WRBTR(same as screen field ...how to go about
thanks
lokeshHi,
When you use the database value directly in your BDC, you will have this issue. It is always advisable to use character fields when doing BDC. so change it to charecter field and try it..
Regards
Sudheer -
LVOOP "call parent method" doesn't work when used in sibling VI
It seems to me that the "call parent method" doesn't work properly according to the description given in the LabVIEW help.
I have two basic OOP functions I am doing examples for. I can get one to work easily and the other one is impossible.
Background
There are 3 basic situations in which you could use the "call parent method"
You are calling the parent VI (or method) of a child VI from within the child VI
You are calling the parent VI (or method) of a child VI from within a sibling VI
You are calling the parent VI (or method) of a child VI from a different class/object.
From the LabVIEW help system for "call parent method":
Calls the nearest ancestor implementation of a class method. You can use the Call Parent Method node only on the block diagram of a member VI that belongs to a class that inherits member VIs from an ancestor class. The child member VI must be a dynamic dispatching member VI and have the same name as the ancestor member VI
From my reading of that it means situation 3 is not supported but 1 & 2 should be.
Unfortunately only Situation 1 works in LabVIEW 2012.
Here is what I want
And this is what I actually get
What this means is that I can perform a classic "Extend Method" where a child VI will use the parent's implementation to augment it's functions BUT I cannot perform a "Revert Method" where I call the parent method's implementation rather than the one that belongs to the object.
If you want a picture
Any time I try and make operation2 the VI with the "call parent method" it shows up for about 1/2 sec and then turns into operation.
So there are only 3 possibilities I can see
Bug
Neither situation 2 or 3 are intended to work (see above) and the help is misleading
I just don't know what I am doing (and I am willing to accept this if someone can explain it to me)
The downside is that if situation 2 above doesn't work it does make the "call parent node" much less usefull AND it's usage/application just doesn't make sense. You cannot just drop the "call parent node" on a diagram, it only works if you have an existing VI and you perform a replace. If you can only perform situation 1 (see above) then you should just drop the "call parent node" and it picks up the correct VI as there is only 1 option. Basically if situation 2 is not intended to work then the way you apply "call parent method" doesn't make sense.
Attachements:
For the really keen I have included 2 zip files
One is the "Revert Method labVIEW project" which is of course not working properly because it wants to "call parent method" on operation not operation2
The other zip file is all pictures with a PIN for both "Revert Method" and "Extend Method" so you can see the subtle but important differences and pictrures of the relavant block diagrams including what NI suggested to me as the original fix for this problem but wasn't (they were suggesting I implement Extend Method).
If you are wondering where I got the names, concepts and PIN diagrams from see:
Elemental Design Patterns
By: Jason McColm Smith
Publisher: Addison-Wesley Professional
Pub. Date: March 28, 2012
Print ISBN-10: 0-321-71192-0
Print ISBN-13: 978-0-321-71192-2
Web ISBN-10: 0-321-71255-2
Web ISBN-13: 978-0-321-71255-4
All the best
David
Attachments:
Call parent node fault.zip 356 KB
Call parent node fault.zip 356 KBHi tst,
Thankyou for your reply. Can you have a look at my comments below on the points you make.
1) Have to disagree on that one. The help is unfortunately not clear. The part you quote in your reply only indicates that the VI you are applying "Call Parent Node" to must be dynamic dispatch. There is nowhere in the help it actually states that the call parent node applies to the VI of the block diagram it is placed into. Basically case 2 in my example fulfills all that the help file requires of it. The dynamic dispatch VI's operation are part of a class that inherits from a given ancestor. Operation 2 for Reverted behaviour is a child VI that is dynamic dispatch and has the same name as the ancestor VI (operation2). The help is missing one important piece of information and should be corrected.
2) True it does work this way. I was trying to build case 2 and had not yet built my ancestor DD for operation so the function dropped but wasn't associated with any VI. I was able to do this via a replace (obviously once the ancestor Vi was built) so this one is just bad operator
3) Keep in mind this is an example not my end goal. I have a child implementation because this is a case where I am trying to do a "reverse override" if you like.
3a) The point of the example is to override an objects method (operation2) with it's parent's method NOT it's own. The reason there is a child implementation with specific code is to prove that the parent method is called not the one that relates to the object (child's VI). If I start having to put case structures into the child VI I make the child VI have to determine which code to execute. The point of Revert method is to take this function out of the method that is doing the work. (Single Use Principal and encapsulation)
3b) The VI I am calling is a Dynamic Dispatch VI. That means if I drop the superclass's VI onto the child's block diagram it will become the child's implementation. Basically I can't use Dynamic Dispatch in this case at all. It would have to be static. That then means I have to put in additional logic unless there is some way to force a VI to use a particular version of a DD VI (which I can't seem to find).
Additional Background
One of the uses for "Revert Method" is in versioning.
I have a parent Version1 implementation of something and a child Version2. The child uses Version2 BUT if it fails the error trapping performs a call to Version1.
LabVIEW has the possibility of handling the scenario but only if both Case 1 and Case 2 work. It would actually be more useful if all 3 cases worked.
The advantage of the call parent method moving one up the tree means I don't have the track what my current object is and choose from a possible list, if, for example the hierarchy is maybe 5 levels deep. (so V4 calls V3 with a simple application of "call parent method" rather than doing additional plumbing with case structures that require care and feeding). Basically the sort of thing OOP is meant to help reduce. Anything that doesn't allow case 2 or 3 means you have to work around the limitation from a software design perspective.
If at the end of the day Case 2 and case 3 don't and won't ever work then the help file entry needs to be fixed.
All the best
David -
How do i call the method in a class using servlet
i am doing a project which need to use servlet to call a few methods in a class and display those method on the broswer. i tried to write the servlet myself but there are still some errors .. can anyone help:
The servlet i wrote :
package qm.minipas;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class test extends HttpServlet {
Database database;
/** Initializes the servlet.
public void init(ServletConfig config) throws ServletException {
super.init(config);
database = FlatfileDatabase.getInstance();
/** Destroys the servlet.
public void destroy() {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("this is my class wossname"+FlatfileDatabase.getInstance()); // this is calling the toString() method in the instance of myJavaClass
out.println("this is my method"+FlatfileDatabase.getAll());
out.println("</body>");
out.println("</html>");
out.close();
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
/** Returns a short description of the servlet.
public String getServletInfo() {
return "Short description";
my methods which i need to call are shown below:
public Collection getAll() {
return Collections.unmodifiableCollection(patientRecords);
public Collection getInpatients() {
Collection selection=new ArrayList();
synchronized(patientRecords) {
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(next.isInpatient())
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByAdmissionDate(Date dateOfAdmission) {
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(dateOfAdmission.equals(next.getDateOfAdmission()))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByAdmissionDates(Date from,Date to)
throws IllegalArgumentException {
if(to.before(from))
throw new IllegalArgumentException("End date must not be before start date");
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
Date nextAD=next.getDateOfAdmission();
if((nextAD.after(from)||nextAD.equals(from))
&&(nextAD.before(to)||nextAD.equals(to)))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByDischargeDates(Date from,Date to)
throws IllegalArgumentException {
if(to.before(from))
throw new IllegalArgumentException("End date must not be before start date");
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
Date nextAD=next.getDateOfDischarge();
if(nextAD==null)
continue;
if((nextAD.after(from)||nextAD.equals(from))
&&(nextAD.before(to)||nextAD.equals(to)))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByConsultant(String consultant) {
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(consultant.equalsIgnoreCase(next.getConsultant()))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByDischargeDate(Date dateOfDischarge) {
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(dateOfDischarge.equals(next.getDateOfDischarge()))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getBySurname(String surname) {
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(surname.equalsIgnoreCase(next.getSurname()))
selection.add(next);
return Collections.unmodifiableCollection(selection);
public Collection getByWard(String ward) {
List selection=new ArrayList();
for(Iterator i=patientRecords.iterator(); i.hasNext();) {
PatientRecord next=(PatientRecord) i.next();
if(ward.equalsIgnoreCase(next.getWard()))
selection.add(next);
return Collections.unmodifiableCollection(selection);please provide a detail description of your errors.
-
Browser Dependency when calling a method in backing bean using a javasript.
Hi all,
I have a problem which may look simple but bugging me for quite some time.
The problem is : When I call a method in the backing bean using a Javascript, (the method can alternatively be invoked by clicking on a command link) I am facing an exception (stack printed below).
The strange part is that...I am getting this exception only when I use Internet Explorer. It works absolutely fine when I use Mozilla or Netscape browsers. Also, even in ie, it is working fine when I click on the link directly. The probem comes only when I invoke the action using a javascript.
WARN [lifecycle] executePhase(RENDER_RESPONSE 6,com.sun.faces.cont
ext.FacesContextImpl@16ce9df) threw exception
javax.faces.FacesException
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java
:135)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.ja
va:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssoci
ationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:
84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnecti
onValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
11Protocol.java:580)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: ClientAbortException: java.net.SocketException: Connection reset by
peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:
358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:288)
at org.apache.catalina.connector.Response.flushBuffer(Response.java:542)
at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java
:279)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:20
2)
at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java
:101)
at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:
222)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java
:106)
... 24 more
Caused by: java.net.SocketException: Connection reset by peer: socket write erro
r
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWri
te(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFi
lter.java:124)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.j
ava:570)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:
353)
... 33 more
13:54:42,805 ERROR [STDERR] ClientAbortException: java.net.SocketException: Con
nection reset by peer: socket write error
13:54:42,805 ERROR [STDERR] at org.apache.catalina.connector.OutputBuffer.realW
riteBytes(OutputBuffer.java:358)
13:54:42,805 ERROR [STDERR] at org.apache.tomcat.util.buf.ByteChunk.flushBuffer
(ByteChunk.java:434)
13:54:42,805 ERROR [STDERR] at org.apache.catalina.connector.OutputBuffer.doFlu
sh(OutputBuffer.java:309)
13:54:42,805 ERROR [STDERR] at org.apache.catalina.connector.OutputBuffer.flush
(OutputBuffer.java:288)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.connector.Response.flushBuff
er(Response.java:542)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.connector.ResponseFacade.flu
shBuffer(ResponseFacade.java:279)
13:54:42,820 ERROR [STDERR] at com.sun.faces.application.ViewHandlerImpl.render
View(ViewHandlerImpl.java:202)
13:54:42,820 ERROR [STDERR] at org.ajax4jsf.framework.ViewHandlerWrapper.render
View(ViewHandlerWrapper.java:101)
13:54:42,820 ERROR [STDERR] at org.ajax4jsf.framework.ajax.AjaxViewHandler.rend
erView(AjaxViewHandler.java:222)
13:54:42,820 ERROR [STDERR] at com.sun.faces.lifecycle.RenderResponsePhase.exec
ute(RenderResponsePhase.java:106)
13:54:42,820 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.phase(Life
cycleImpl.java:251)
13:54:42,820 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.render(Lif
ecycleImpl.java:144)
13:54:42,820 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesSer
vlet.java:245)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
internalDoFilter(ApplicationFilterChain.java:290)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:206)
13:54:42,820 ERROR [STDERR] at com.hds.vc.common.infrastructure.AIMFilter.doFil
ter(AIMFilter.java:27)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
internalDoFilter(ApplicationFilterChain.java:235)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:206)
13:54:42,820 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.d
oFilter(ReplyHeaderFilter.java:96)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
internalDoFilter(ApplicationFilterChain.java:235)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:206)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.in
voke(StandardWrapperValve.java:230)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.in
voke(StandardContextValve.java:175)
13:54:42,820 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociatio
nValve.invoke(SecurityAssociationValve.java:179)
13:54:42,820 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.i
nvoke(JaccContextValve.java:84)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invok
e(StandardHostValve.java:128)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invo
ke(ErrorReportValve.java:104)
13:54:42,820 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectio
nValve.invoke(CachedConnectionValve.java:156)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.inv
oke(StandardEngineValve.java:109)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.serv
ice(CoyoteAdapter.java:241)
13:54:42,820 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:844)
13:54:42,820 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11Co
nnectionHandler.process(Http11Protocol.java:580)
13:54:42,820 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.ru
n(JIoEndpoint.java:447)
13:54:42,820 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
13:54:42,820 ERROR [STDERR] Caused by: java.net.SocketException: Connection rese
t by peer: socket write error
13:54:42,820 ERROR [STDERR] at java.net.SocketOutputStream.socketWrite0(Native
Method)
13:54:42,820 ERROR [STDERR] at java.net.SocketOutputStream.socketWrite(Unknown
Source)
13:54:42,820 ERROR [STDERR] at java.net.SocketOutputStream.write(Unknown Source
13:54:42,820 ERROR [STDERR] at org.apache.coyote.http11.InternalOutputBuffer$Ou
tputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
13:54:42,820 ERROR [STDERR] at org.apache.coyote.http11.filters.ChunkedOutputFi
lter.doWrite(ChunkedOutputFilter.java:124)
13:54:42,820 ERROR [STDERR] at org.apache.coyote.http11.InternalOutputBuffer.do
Write(InternalOutputBuffer.java:570)
13:54:42,820 ERROR [STDERR] at org.apache.coyote.Response.doWrite(Response.java
:560)
13:54:42,820 ERROR [STDERR] at org.apache.catalina.connector.OutputBuffer.realW
riteBytes(OutputBuffer.java:353)
13:54:42,820 ERROR [STDERR] ... 33 more
Please throw some light on this issue.This is the Java script I am using
function submitForm(e){
var characterCode
if(e && e.which){
e = e
characterCode = e.which
}else{
e = event characterCode = e.keyCode
if (characterCode== 13){
document.getElementById('mainform:submitForm:search').onclick();
Regards,
Jagadeesh
Edited by: Jagadeesh.Pala on Oct 1, 2007 3:59 AM
Maybe you are looking for
-
Error message: "Webcam driver open fail" for Satellite L305-S5875
Problem: Webcam is not working and when Camera Assistant Software is started up, the Error message, "Webcam driver open fail" pops up. Computer: Notebook Satellite L305-S5875 OS: Windows Vista In troubleshooting, I have unsuccessfully tried the follo
-
Multiple Account Assignments for purchase/framework requisition
Hi, Multiple Account Assignments for purchase/framework requisition: The actual MM configuration is a single account assignment in the purchase requisition (although the option of multiple account assignments exist for trips). What are the implicatio
-
Multiple selection in Query filter
Hello, We have a requirement wherein in the Search Master Agreements and Agreements Query, we need to search on the Collaborators on a particular MA. We have duplicated the OOB query and have been able to acheive this, so this post is not regarding t
-
Customize POD Name without SDK
Dear experts, is there a way to customize the name of the POD displayed except of changing the JSP with SDK? I didnt found any possibility for that, but maybe there is one. In my version, "Production Operator Dashboard:" is displayed and this is some
-
Here is the error that I got. I get this error when I try to load a project I had worked on in the past. The project has a custom static image I made in photoshop (opened default menu, brought into photoshop, edited background, changed buttons). I