Dynamic constructor call with arguments
hey all i am quite new to this dynamic creation stuff
basically i have an array of class literals i.e One.class Two.class Three.class
etc
i then loop through this array using the isInstance() method to find the objects correct type
when i find this type i want to then create an object of this type with arguments passed to the constructor
i know there is a way to create the object using a defualt non arg constructor call using newInstance()...
so to repeat is there a way to dynamically create an object while passing arguments to the constructor?
thanx rob
Call getContstructor() on the class passing it an array of argument types. Then call newInstance() on the Constructor object that gets returned passing it an array of the arguments.
Similar Messages
-
VBScript which is called with Arguments from Command Line
Hi There.
I have been tasked to create a VBScript which needs to accomplish the following:
It needs to be called from a command line using 4 different arguments, the arguments in order as follows:
- Drive letter including colon
Warning threshold in percentage
Warning threshold in GB remaining
Recipient email address
I need to be able to set up a scheduled task, to run this script, but at the same time I need to be able to specify multiple drive letters as separate steps but on a single task. The script needs to automatically run every 4 hours, starting at 06:00AM
in the morning and running no later than 22:00 at night.
The end results, need to then be e-mailed to the Recipient which is specified in Argument (3).
Following is my current script, it is not complete as I am currently pulling my hair out due to having a lack of knowledge of VBScripting.... :( The current script also loops every 10 minutes or so, and uses the incorrect way of sending the results,
we would like to use POSTIE.EXE to send the mail as we would want to eliminate web traffic (Microsoft Schema's) in this script.
=====================================================================================
Const emailFrom = "default_from_email_address_comes_here" 'From email address
Const ExchangeServer = "ExchangeServerName_comes_here" 'Enter your Exchange server name here (FQDN)
Const WaitTimeInMinutes = 10 'Wait time between loops. This is will be in minutes
Dim WshShell, objArgs, strIP, objWMIService, LogicalVolumes, strDriveLetter
Dim objItem, strDriveName, IntCapacity, IntFree, DiskFreePct
Dim strIgnoreFlag
Dim strMessage, IntStatistic
on error resume next
strDriveLetter = WScript.Arguments(0) 'This is the drive letter which you want to monitor on the localhost
DiskFreePct = WScript.Arguments(1) 'This is the threshold percentage of free space
ThresholdGB = WScript.Arguments(2)
Recipient = WScript.Arguments(3) 'This is where the e-mail needs to be sent to
If Err.Number <> 0 Then
msgbox "You did not supply the arguments after calling the VBS file:" & vbcrlf & "<Drive Letter, eg: C:>"& vbcrlf & "<Warning Threshold in Percentage> "& vbcrlf &"<Warning
Threshold in GB Remaining> "& vbcrlf &"<Recipient E-Mail Address>"
WScript.Quit
End If
Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo WshNetwork.ComputerName
arrServerList = array(WshNetwork.ComputerName) 'This is where your localhost will be used as the query
Do until i = 2
'Clear the message variable
strMessage = ""
'Poll the array of servers
PollServers(WshNetwork.ComputerName)
'Email if there is a message
if strMessage <> "" then
EmailAlert(strMessage)
end if
'The script will loop for now just for testing. Uncomment the line that follows the loop logic to cancel the loop.
WScript.Sleep(WaitTimeInMinutes*60000)
'i = i + 1
Loop
Sub PollServers(arrServers)
on error resume next
for each Server in arrServers
set objSvc = GetObject("winmgmts:{impersonationLevel=impersonate}//" & Server & "/root/cimv2")
set objRet = objSvc.InstancesOf("win32_LogicalDisk")
for each item in objRet
if item.DriveType = 7 then
end if
if item.FreeSpace/item.size <= AlertHigh then
strMessage = strMessage & UCase(strPC) & " Drive '" & item.caption & "' is low on disk space! There are " & FormatNumber((item.FreeSpace/1024000),0)
& " MB free" & vbCRLF
end if
next
next
set objSvc = Nothing
set objRet = Nothing
End Sub
Sub EmailAlert(Message)
on error resume next
Set objMessage = CreateObject("CDO.Message")
with objMessage
.From = emailFrom
.To = Recipient
.Subject = "Server " & WshNetwork.ComputerName & " is low on Disk Space"
.TextBody = Message
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ExchangeServer
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
.Send
end with
Set objMessage = Nothing
End SubI've managed to get the script fully working as required.
================================================================
Const emailFrom = "your_email_here" 'From email address
Const ExchangeServer = "exchange_server_name" 'Enter your Exchange server name here (FQDN)
Const WaitTimeInMinutes = 240 'Wait time between loops. This is will be in minutes
Dim WshShell, objArgs, strIP, objWMIService, LogicalVolumes, strDriveLetter
Dim objItem, strDriveName, IntCapacity, IntFree, DiskFreePct
Dim strIgnoreFlag
Dim strMessage, IntStatistic
Dim DrivePercentage
Dim DriveSpaceRem
Dim mbFreeSpace
Dim intFreeSpace
Dim UsedPercentage
on error resume next
strDriveLetter = WScript.Arguments(0) 'This is the drive letter which you want to monitor on the localhost
DiskFreePct = WScript.Arguments(1) 'This is the threshold percentage of free space
ThresholdGB = WScript.Arguments(2)
Recipient = WScript.Arguments(3) 'This is where the e-mail needs to be sent to
If Err.Number <> 0 Then
msgbox "You did not supply the arguments after calling the VBS file:" & vbcrlf & "<Drive Letter, eg: C:>"& vbcrlf & "<Warning Threshold in Percentage> "& vbcrlf &"<Warning Threshold in GB Remaining> "&
vbcrlf &"<Recipient E-Mail Address>"
WScript.Quit
End If
strComputer = "."
'WScript.Echo strComputer
Set WshNetwork = WScript.CreateObject("WScript.Network")
'WScript.Echo WshNetwork.ComputerName
arrServerList = array(strComputer) 'This is where your local host will be used as the query
Do until i = 1
'Clear the message variable
strMessage = ""
'Poll the array of servers
PollServers strComputer,strDriveLetter
'Email if there is a message
if strMessage <> "" then
EmailAlert(strMessage)
end if
'The script will loop for now just for testing. Uncomment the line that follows the loop logic to cancel the loop.
'WScript.Sleep(WaitTimeInMinutes*60000)
i = i + 1
Loop
Sub PollServers(strComputer,strDriveLetter)
Selectstring = "Select * from Win32_LogicalDisk Where DeviceID = '" & strDriveLetter & "'"
on error resume next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery(Selectstring)
For Each objItem in colItems
if objItem.FreeSpace/objItem.Size * 100 <= DiskFreePct or mbFreeSpace <= ThresholdGB then
DrivePercentage = FormatNumber(objItem.FreeSpace/objItem.Size *100,0)
DriveSpaceRem = FormatNumber((objItem.FreeSpace/1024000),0)
intFreeSpace = objItem.FreeSpace
mbFreeSpace = intFreeSpace / 1024 / 1024 / 1024
mbFreeSpace = round(mbFreeSpace,0)
intTotalSpace = objDisk.Size
UsedPercentage = 100 - DrivePercentage
strMessage = strMessage & " "
end if
Next
End Sub
Sub EmailAlert(Message)
on error resume next
Set objMessage = CreateObject("CDO.Message")
with objMessage
.From = emailFrom
.To = Recipient
.Subject = "" & WshNetwork.ComputerName & ": Alert " & Now & " -> " & UCase(strDriveLetter) & " fill level = " & UsedPercentage & "%, Space Remaining = " & mbFreeSpace & "
GB"
.TextBody = Message
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ExchangeServer
.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
.Send
end with
Set objMessage = Nothing
End Sub
'WScript.Echo "done" -
Dynamic Method call with CHANGING
Hi,
I have the following method call:
CALL METHOD o_salv->DISPLAY_SALV
CHANGING
it_data = it_ekko.
I would like to make this dynamic so that I can call it multiple times from my program with the came set of code.
I have this working for other Method calls, but the use the same parameters on both sides such as:
CALL METHOD o_main->get_date
IMPORTING
it_ekko = it_ekko.
being coded as such:
CALL METHOD o_main->(v_method)
PARAMETER-TABLE
ptab.
Can someone please give me some guidance on how to code the top example dynamically when the 2 variables are different?
Hope that makes sense...thanks for your help!
AndyHello Bjorn
I would suggest the following approach:
(1) Collect all your GUI control instances in an itab whose line type is TYPE REF TO cl_gui_control.
(2) Define your "free" method:
LOOP AT mt_gui_controls INTO lo_gui_control.
* See if gui control was text editor
TRY.
lo_textedit ?= lo_gui_control.
CATCH cx_sy_move_cast_error INTO lo_error.
ENDTRY.
IF ( lo_error IS NOT BOUND ).
lo_textedit->free.
* ... your coding
CONTINUE.
ENDIF.
* See if gui control was tree
TRY.
lo_tree ?= lo_gui_control.
CATCH cx_sy_move_cast_error INTO lo_error.
ENDTRY.
ENDLOOP.
The FREE methods are redefined in the subclasses. However, you could try to call lo_gui_control->free directly because I am not sure if the coding of the superclass or subclass is called (I cannot test this at the moment).
Regards
Uwe -
Hi All, Is it possible to invoke dynamically, constructor with an argument?
Hi All, Is it possible to invoke dynamically, constructor with an argument
Thanks in advanceStrongly depends on what's dynamic.
-
Why Do We Need Constructor With Arguments?
I understand that constructor is used to create instances.
We can have constructors with 0 argument or with one/multiple arguments. Why do we need a contructor with arguments? What is the purpose of doing it?
Thank you for your help.There are three general ways to provide constructors, like you said:
1) Default constructor (no arguments)
2) One or more constructors with arguments
3) One or more constructors with arguments as well as a default constructor
From a design standpoint, the idea is to give as much information needed for constructing an object up front. Look at the standard Java API for some examples (and because I couldn't find a standard class with just a default constructor, one made up):
public class Foo {
private long createTime;
public Foo() {
createTime = System.currentTimeMillis();
public String toString() {
return "This object was created at " + createTime;
}This code has no reason to take any arguments. It does all construction on its own and already has all the information it needs. On the other hand, look at BufferedReader. There's no possible way this object can ever be constructed without an argument. What's it buffering? It doesn't make sense to ever instantiate new BufferedReader(). It'd be useless. So BufferedReader has no default (no-arg) constructor.
Sometimes (very often in Java) you want to do both. Let something be instantiated with no arguments, but also provide the option of creating something with more specific details. A good example is ArrayList, which has three constructors:
public ArrayList() --> Construct an empty ArrayList with the default initial capacity;
public ArrayList(Collection c) --> Construct an ArrayList populated with the contents of another collection;
public ArrayList(int capacity) --> Construct an empty ArrayList with a specific initial capacity.
Sometimes it makes sense just to use the default. Sometimes you want more control over the behavior. Those are the times to use multiple constructors.
Hope this helps! -
Object with argument constructor in ATG
HI guys
Is it possible to craete an object with argument constructor with component in atg
if it is possible give me an exampleWith ATG 10.0.3 and later, you can use an $instanceFactory to create objects with constructor objects or create a Nucleus component from factory (either a static class method, or a method of another Nucleus component).
Documentation (and an example) are here: http://docs.oracle.com/cd/E36434_01/Platform.10-1-2/ATGPlatformProgGuide/html/s0208parameterconstructorinstancefact01.html -
Call function with arguments in AS3
Hello!
I`m a new in Flex developing, and cannot understand same code
convention, im Java programmer.
How I can write correct function call in ActionScript, my
call: var goodsWnd:CreateGoodsWindow =
PopUpManager.createPopUp(this,
CreateGoodsWindow, true) as CreateGoodsWindow;
I wish call function above with argument, how I do that?
Where my class: public class CreateGoodsWindow extends
extends TitleWindow
public CreateGoodsWindow(data:Object)
}Use PopUpManager.addPopUp() instead of createPopUp().
addPopUp takes an object that has already been instantiated:
var createGoodsWindow:CreateGoodsWindow = new
CreateGoodsWindow(data);
PopUpManager.addPopUp(createGoodsWindow); -
PL/SQL Dynamic procedure call - arrays
I'm having a lot trouble dynamically calling procedures that have an array as a parameter value. It looks like it's not possible as I'm getting the deadly 'PLS-00707 unsupported construct or internal error [num]' message.
Is that true, that I can't pass an array in a dynamic procedure call?
The example procedure I'm calling is,
PROCEDURE test(pusr in NUMBER,
ptble IN VARCHAR2,
prprt IN VARCHAR2,
pccyy IN VARCHAR2,
parea IN VARCHAR2,
pregn IN VARCHAR2 DEFAULT null,
poffc IN VARCHAR2 DEFAULT null,
ptime IN VARCHAR2,
pmnth IN NUMBER DEFAULT null,
pqrtr IN NUMBER DEFAULT null,
prow IN VARCHAR2 DEFAULT null,
carray IN array_pcat)
If I call it like this it works fine.
uwsdm_web.test(pusr=> 100,
ptble=>'mic',
prprt=>'MIC3',
pccyy=>'1999',
parea=>'Statewide',
pregn=>'0',
poffc=>'0',
ptime=>'Year',
pmnth=>0,
pqrtr=>0,
prow=>'1,2,3,4',
parray=> carray);
where carray is the array.
If I change the carray to a value (numeric or character), I get a "PLS-00306: wrong number or types of arguments in call to 'TEST'" error. Efforts to pass multiple values also failed.
If I try to dynamically create the query and pass in the variable of carray, I run into similar problems because it's trying to allocate an array to one line of code.
Any suggestions?
Thanks.
Kurt
nullApologizes for disturbing you,
as soon as I posted my question, I realized that there were some problems with the sintaxis I was using. Thank you very much and please excuse me for that silly question...
Miguel-Angel -
WD4A Dynamic ALV Table with dynamic tables
Hi all,
first I want give you the information what I try to do.
I have an another WD4A application for administrative use in which I can assign certain tablefields to a certain user. You can say it's something like a customizing application.
In the next application (with my issues) I will display the tables for the user, but these tables are not the complete table.
I have a node in my context of the component controller which is bound to my ALV. I add during the runtime attributes to my node.
* .... coding ....declaration
* get the node
lr_node = wd_context->get_child_node( 'M_TABLE' ).
lr_node_info ?= lr_node->get_node_info( ).
* remove the attributes, if exists
lr_node_info->remove_dynamic_attributes( ).
* .... coding ....
* add attributes
LOOP AT l_t_m_table INTO l_s_m_table.
CLEAR ls_attribute.
* name of the attribute
MOVE l_s_m_table-NAME TO ls_attribute-NAME.
* DDIC type of the attribute
MOVE l_s_m_table-TYPE_NAME TO ls_attribute-TYPE_NAME.
* If the DDIC has a gen namespace like /B135/ replace the / with _
REPLACE ALL OCCURRENCES OF '/' IN ls_attribute-NAME WITH '_'.
* add the attribute
lr_node_info->add_attribute( EXPORTING
attribute_info = ls_attribute ).
ENDLOOP.
This coding works fine I get the columns in my ALV. Then I tried to fill my ALV table with data from a database table.
I created dynamicly an internal table with the following coding:
* Create dynamic table
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = l_t_FLDCAT
IMPORTING
EP_TABLE = l_t_NEW_M_TABLE.
* assign the table
ASSIGN l_t_NEW_M_TABLE->* TO <M_TABLE>.
* structure of table
CREATE DATA l_s_NEW_M_TABLE LIKE LINE OF <M_TABLE>.
ASSIGN l_s_NEW_M_TABLE->* TO <l_s_m_table>.
* get data from database
SELECT * FROM (l_m_table) INTO CORRESPONDING FIELDS OF TABLE <M_table> WHERE OBJVERS = 'A'.
With this coding I get the data from the database and only the required fields that means I have e.g. an itab with columns1, columns3, columns4 from the database.
I also added e.g. these columns (columns1, columns3, columns4 from the database) to the node as attribute. Now it should be possible to bind the table to the structure with this coding:
lr_comp_usage_m = wd_this->wd_cpuse_usage_alv_M_table( ).
* create component if not active
IF lr_comp_usage_m->has_active_component( ) IS INITIAL.
lr_comp_usage_m->create_component( ).
else.
* set data if node exists
l_ref_interfacecontroller = wd_this->wd_cpifc_usage_alv_M_table( ).
l_ref_interfacecontroller->set_data( lr_node ).
endif.
* bind table
lr_node->bind_table( <M_TABLE> ).
Now, I get an error, which is caused by the table binding.
In ST22 I get:
Short text
Line types of an internal table and a work area not compatible.
What happened?
Error in the ABAP Application Program
The current ABAP program "CL_WDR_CONTEXT_NODE_VAL=======CP" had to be
terminated because it has
come across a statement that unfortunately cannot be executed.
Error analysis
The statement
"INSERT wa INTO TABLE itab"
requires the lines of the internal table "TABLE" and the
work area " wa" to be compatible. Compatibility means
equivalence in the context of ABAP/4 type checking.
In this case, the condition is not satisfied because the internal table
"TABLE" has the line type "u" and the length 28, but the work area " wa"
has the type "C" and the length 2.
(If the work area " wa" is the header line of the internal
table "TABLE", the above inconsistency can arise if an internal
table t with the line type T1 is passed to a subroutine (FORM or
FUNCTION) as an actual parameter and the corresponding formal
parameter p is declared in the subroutine by "TABLES p STRUCTURE T2".
If then T1 and T2 are incompatible, the header line p
has the type T2 (specifed by STRUCTURE), but the internal
table p has the line type T1 (passed from the actual parameter)).
Source Code Extract
Line SourceCde
1 method if_wd_context_node~get_static_attributes_table .
2
3 field-symbols:
4 <element> like line of me->collection,
5 <static_attributes> type data,
6 <table> type index table.
7
8 * check whether elements are supllied or not
9 if me->elements_supplied = abap_false.
10 me->supply_elements( ).
11 endif.
12
13 clear table.
14
15 if me->table_ref is not initial.
16 assign me->table_ref->* to <table>.
17 table = <table>.
18 else.
19 loop at me->collection assigning <element> from from to to.
20 assign <element>->static_attributes->* to <static_attributes>.
error in line 21 insert <static_attributes> into table table.
22 endloop.
23 endif.
24
25 endmethod.
Any suggestions? Is it allowed to use bind_table() with a field symbol?
Another strange thing is that if I try the same with static itab and attributes during runtime it works, but only if the fields of the itab has the same name as the attributes, which means that I can not use itabs with fieldnames like /BI0/S_CUSTOMER and if I can not use them it's difficult to read data from database with SELECT * FROM ... INTO CORRESPONDING FIELDS OF TABLE itab.
Thanks in advance for your suggestions!
Best Regards,
MarcelHi Francois,
I solve it with the RTTI and the method
lr_node_info = lr_node_info->add_new_child_node(
name = 'Dynamic_TABLE'
IS_MANDATORY = ABAP_false
IS_MULTIPLE = ABAP_true
STATIC_ELEMENT_RTTI = lr_struct_descr
IS_STATIC = ABAP_false
I don't know why it doesn't work with adding attributes and binding the table after adding the attributes.
Anyway thanks for your help.
Best Regards,
Marcel -
Multiple times constructors calling in Myfaces
Hi
i m fasing multiple times constructor calling for myfaces programs
i have created a small web appl. with one text box and one submit button, to test this behaviour.
i have used this sample to
get web page
enter some text value
submit the page
and atlast page get returned to me
i don't understand the multiple times consturctor calling and exact sequence of Getter/Setter calling?
Following are details -
faces-config.xml
<managed-bean>
<managed-bean-name>fileUploadBean</managed-bean-name>
<managed-bean-class>com.dbschenker.dts.model.backingbean.FileUpload</managed-bean-class>
<manged-bean-scope>request</manged-bean-scope>
</managed-bean>
jsp file
<h:inputText id="txtSample" value="#{fileUploadBean.txtName}"/>
<h:commandButton action="#{fileUploadBean.uploadFile}"
image="../../images/upload_0.png"
onmouseover="this.src='../../images/upload_0.png'"
onmouseout="this.src='../../images/upload_1.png'"
onclick="return true;"/>
Backing bean
public class FileUpload {
private String txtName;
public void setTxtName(String txtName) {
System.out.println("Calling Setter... ");
this.txtName= txtName;
public String getTxtName() {
System.out.println("Calling Getter... ");
return txtName==null?"":this.txtName;
public FileUpload() {
System.out.println("Calling Constructor... ");
public String uploadFile() {
System.out.println("Upload Form Submitted... ");
return "";
Output to Console
Calling Constructor...
Calling Getter...
Calling Constructor...
Calling Constructor...
Calling Getter...
Calling Constructor...
Calling Setter...
Calling Constructor...
Upload Form Submitted...
Calling Constructor...
Calling Getter...Hi
that blog was really good and in depth...
but i have one real time problem with multiple time constructor calling
if you replace text box with file upload tag in my earlier sample program and then following is out put ...
Calling Constructor...
getUploadedFile()...
Calling Constructor...
getUploadedFile()...
Calling Constructor...
setUploadedFile()...
Uploaded File Name - D:\AsnUploadTemplate02.XLS
Calling Constructor... ------------------(.1
Upload Form Submitted...
java.lang.NullPointerException
at com.dbschenker.dts.model.backingbean.FileUpload.uploadFile(FileUpload.java:40)
----------- trailing exception stack trace...
Calling Constructor...
getUploadedFile()...
form this output u can find that my UploadedFile backing bean object gets null just before form submit method...
whereas its has been properly instantiated in setter method,
if constructor (1 wasn't call then object (uploadedFile) can be found in method (FileUpload.uploadFile)
i have also tried to make scope of backing bean Session , but constructor, getter & setter calling sequence doesn't different even after.
i have also considered both of your blog as ---
http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html
http://balusc.blogspot.com/2008/02/uploading-files-with-jsf.html
but my problem stands as it is
kindly help -
Stored Procedure Call with only Input Parameter
Hi, The Example at Oracle Toplink Developer's Guide, Volume 5 uses an output param named IS_VALID. How Can I Call a Stored Procedure that has only Input Param ? If I don't use an Ouput Param Toplink throw the following Exception:
*Excepción [TOPLINK-4002]* (Oracle TopLink - 10g Release 3 (10.1.3.3.0) (Build 070620)): oracle.toplink.exceptions.DatabaseException Excepción Interna: java.sql.SQLException: ORA-00900: invalid SQL statement
Here's the Sample Code Depicted at the Guide:*
Example 98–48 Stored Procedure Call with an Output Parameter
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("CHECK_VALID_POSTAL_CODE");
call.addNamedArgument("POSTAL_CODE");
call.addNamedOutputArgument(
"IS_VALID", // procedure parameter name
"IS_VALID", // out argument field name
Integer.class // Java type corresponding to type returned by procedure
ValueReadQuery query = new ValueReadQuery();
query.setCall(call);
query.addArgument("POSTAL_CODE");
Vector parameters = new Vector();
parameters.addElement("L5J1H5");
Number isValid = (Number) session.executeQuery(query,parameters);
Here's my code
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("MYSTOREDPROCEDURE");
call.addNamedArgument("INPUTPARAM1");
call.addNamedArgument("INPUTPARAM2");
call.addNamedArgument("INPUTPARAM3");
call.addNamedArgument("INPUTPARAM4");
call.addNamedArgument("INPUTPARAM5");
call.addNamedArgument("INPUTPARAM6");
ValueReadQuery query = new ValueReadQuery();
query.setCall(call);
query.addArgument("INPUTPARAM1");
query.addArgument("INPUTPARAM2");
query.addArgument("INPUTPARAM3");
query.addArgument("INPUTPARAM4");
query.addArgument("INPUTPARAM5");
query.addArgument("INPUTPARAM6");
Vector parameters = new Vector();
parameters.addElement("INPUTVALUE1");
parameters.addElement("INPUTVALUE2");
parameters.addElement("INPUTVALUE3");
parameters.addElement("INPUTVALUE4");
parameters.addElement("INPUTVALUE5");
parameters.addElement("INPUTVALUE6");
uow.executeQuery(query,parameters);
Regards,
ManuelYou need to use a DataModifyQuery as your query does not return anything.
James : http://www.eclipselink.org -
Oracle Object Type Constructor Called Multiple Times
I have an object type with a custom constructor. In SQL, when I reference the attributes the constructor is called multiple times in Oracle 11.2.0.4.
Why is the constructor called multiple times?
How do I stop it?
My current work around is to reference the attributes and use the /*+ materialize */ hint.
Problem Setup
create or replace type Foo as object
Bar1 NUMBER,
Bar2 NUMBER,
Bar3 NUMBER,
CONSTRUCTOR FUNCTION Foo(p_Bar1 NUMBER, p_Bar2 NUMBER, p_Bar3 NUMBER)
RETURN SELF AS RESULT
DETERMINISTIC
create or replace type body Foo is
-- Member procedures and functions
CONSTRUCTOR FUNCTION Foo(p_Bar1 NUMBER, p_Bar2 NUMBER, p_Bar3 NUMBER)
RETURN SELF AS RESULT
DETERMINISTIC
AS
BEGIN
SELF.Bar1 := p_Bar1;
SELF.Bar2 := p_Bar2;
SELF.Bar3 := p_Bar3;
dbms_output.put_line('Foo Constructor Called');
RETURN;
END;
end;
Problem
-- Constructor is called 6 times!
-- Once for each column and once for each predicate in the where clause.
SELECT x.f.bar1 AS bar1, x.f.bar2 AS bar2, x.f.bar3 AS bar3, f
FROM (
SELECT foo(p_Bar1 => 1, p_Bar2 => 2, p_Bar3 => 3) f
FROM dual d
) x
WHERE x.f.bar1 = x.f.bar1 AND x.f.bar2 = x.f.bar2
Output
Foo Constructor Called
Foo Constructor Called
Foo Constructor Called
Foo Constructor Called
Foo Constructor Called
Foo Constructor Called
Workaround
-- Work Around
-- Constructor is called 3 times
-- Once for each column in the inline view.
-- Note, I removed column f (the object type) because it's not compatible with the materialize hint.
WITH y AS (
SELECT /*+ materialize */ x.f.bar1 AS bar1, x.f.bar2 AS bar2, x.f.bar3 AS bar3
FROM (
SELECT foo(p_Bar1 => 1, p_Bar2 => 2, p_Bar3 => 3) f
FROM dual d
) x
SELECT y.bar1, y.bar2, y.bar3
FROM y
WHERE y.bar1 = y.bar1 AND y.bar2 = y.bar2Another work-around is described in this thread... Accessing fields of a custom object type... which makes use of a collection type combined with the TABLE operator, like so...
create or replace type FooTable as table of Foo;
SELECT x.bar1 AS bar1, x.bar2 AS bar2, x.bar3 AS bar3, value(x) f
FROM table(FooTable(
foo(p_Bar1 => 1, p_Bar2 => 2, p_Bar3 => 3)
)) x
WHERE x.bar1 = x.bar1 AND x.bar2 = x.bar2
BAR1 BAR2 BAR2 F
1 2 3 (1, 2, 3)
Foo Constructor Called
Hope that helps...
Gerard -
Dynamic where clause with loop statement
Hi all,
is it possible to use a dynamic where clause with a loop statement?
Can you please advise me, how the syntax needs to be?
Thanks for your suggestions,
kind regards, Kathrin!Hi Kathrin,
If u are in ECC 6.0, please go through the code...
REPORT zdynamic_select.
TYPES:
BEGIN OF ty_sales,
vbeln TYPE vbak-vbeln, " Sales document
posnr TYPE vbap-posnr, " Sales document item
matnr TYPE vbap-matnr, " Material number
arktx TYPE vbap-arktx, " Short text for sales order item
kwmeng TYPE vbap-kwmeng, " Order quantity
vkorg TYPE vbak-vkorg, " Sales organization
kunnr TYPE vbak-kunnr, " Sold-to party
netwr TYPE vbak-netwr, " Net Value of the Sales Order
END OF ty_sales.
DATA :
gt_sales TYPE STANDARD TABLE OF ty_sales,
wa_sales TYPE ty_sales.
DATA: ob_select TYPE REF TO cl_rs_where.
DATA: ob_from TYPE REF TO cl_rs_where.
DATA: ob_where TYPE REF TO cl_rs_where,
gv_source TYPE abapsource.
START-OF-SELECTION.
*Step 1 : Prepare the select fields.
PERFORM zf_build_select.
*Step 2 : Build the from clause for the select
PERFORM zf_build_from.
*Step 3 : Build the where clause for the select
PERFORM zf_build_where.
*Step 4 : Execute the dynamic select
SELECT (ob_select->n_t_where)
FROM (ob_from->n_t_where)
INTO CORRESPONDING FIELDS OF TABLE gt_sales
WHERE (ob_where->n_t_where).
LOOP AT gt_sales INTO wa_sales.
WRITE : /5 wa_sales-vbeln,
15 wa_sales-vkorg,
20 wa_sales-kunnr,
40 wa_sales-netwr,
50 wa_sales-posnr,
60 wa_sales-matnr,
70 wa_sales-arktx,
90 wa_sales-kwmeng.
ENDLOOP.
*& Form zf_build_select
FORM zf_build_select .
CREATE OBJECT ob_select.
*Build the table name/field name combination
*Add Sales order header fields
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAK'
i_fieldname = 'VBELN'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAK'
i_fieldname = 'VKORG'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAK'
i_fieldname = 'KUNNR'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAK'
i_fieldname = 'NETWR'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
*Add Sales order item fields
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAP'
i_fieldname = 'POSNR'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAP'
i_fieldname = 'MATNR'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAP'
i_fieldname = 'ARKTX'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
CALL METHOD cl_rs_where=>build_tabname_fieldname
EXPORTING
i_tabname = 'VBAP'
i_fieldname = 'KWMENG'
i_sign = '~'
IMPORTING
e_combined = gv_source.
*Add the where line
CALL METHOD ob_select->add_line
EXPORTING
i_line = gv_source.
ENDFORM. " zf_build_select
*& Form zf_build_from
FORM zf_build_from .
CREATE OBJECT ob_from.
*Add opening bracket
CALL METHOD ob_from->add_opening_bracket
CLEAR gv_source.
*Add the join condition.This can be made
*fully dynamic as per your requirement
gv_source = 'VBAK AS VBAK INNER JOIN VBAP AS VBAP'.
*Add the where line
CALL METHOD ob_from->add_line
EXPORTING
i_line = gv_source.
CLEAR gv_source.
*Add the join condition.This can be made
*fully dynamic as per your requirement
gv_source = 'ON VBAKVBELN = VBAPVBELN'.
*Add the where line
CALL METHOD ob_from->add_line
EXPORTING
i_line = gv_source.
*Add the closing bracket
CALL METHOD ob_from->add_closing_bracket
ENDFORM. " zf_build_from
*& Form zf_build_where
FORM zf_build_where .
DATA :
lv_field TYPE REF TO data,
lv_field_low TYPE REF TO data,
lv_field_high TYPE REF TO data.
CREATE OBJECT ob_where.
*Add the field VBELN : Sales Document
*Use this method if you want to assign a single value to a field
*Set the value for VBELN : Sales Document Number
CALL METHOD ob_where->add_field
EXPORTING
i_fieldnm = 'VBAK~VBELN'
i_operator = '='
i_intlen = 10
i_datatp = 'CHAR'
IMPORTING
e_r_field = lv_field.
CALL METHOD ob_where->set_value_for_field
EXPORTING
i_fieldnm = 'VBAK~VBELN'
i_value = '0000120020'.
*Use this method if you want to assign a range of values
*Set a range for the Sales Document number
CALL METHOD ob_where->add_field_between_2values
EXPORTING
i_fieldnm = 'VBAK~VBELN'
i_intlen = 10
i_datatp = 'CHAR'
IMPORTING
e_r_field_low = lv_field_low
e_r_field_high = lv_field_high.
CALL METHOD ob_where->set_2values_for_field
EXPORTING
i_fieldnm = 'VBAK~VBELN'
i_value_low = '0000120020'
i_value_high = '0000120067'.
*Set the 'AND' Clause
CALL METHOD ob_where->add_and.
*Add the field MATNR : Material
CALL METHOD ob_where->add_field
EXPORTING
i_fieldnm = 'MATNR'
i_operator = '='
i_intlen = 18
i_datatp = 'CHAR'
IMPORTING
e_r_field = lv_field.
*Set the value for the Material field
CALL METHOD ob_where->set_value_for_field
EXPORTING
i_fieldnm = 'MATNR'
i_value = '000000000050111000'.
*Set the 'AND' Clause
CALL METHOD ob_where->add_and
*Add the field VKORG
CALL METHOD ob_where->add_field
EXPORTING
i_fieldnm = 'VKORG'
i_operator = '='
i_intlen = 4
i_datatp = 'CHAR'
IMPORTING
e_r_field = lv_field.
*Set the value for VKORG : Sales Organization
CALL METHOD ob_where->set_value_for_field
EXPORTING
i_fieldnm = 'VKORG'
i_value = 'GMUS'.
ENDFORM. " zf_build_where -
Creating Dynamic Internal table with a dynamic name
Hi,
I want to create dynamic internal tables with dynamic names.
For example:
Suppose I have a table with three fields.
1. Structure name
2.Fields
3.file
And the structure of the internal table is as follows:
TYPES:BEGIN OF table_type,
struct TYPE char70,
fields TYPE tt_type OCCURS 0,
File TYPE ttab_type OCCURS 0,
END OF table_type.
Suppose I have one record inside my internal table with struct as "STRUCTURE", fields have an internal table content of set of fields and File has some set of records.
Now I want to create dynamic internal table whose name will be "STRUCTURE" , the fields of the dynamic internal table structure[] will be as in fields, and the records will be as in File.
Like this if i have 100 records in my internal table then I have to create 100 dynamic internal table dynamically.
Can anyone suggest how to do this?
Edited by: Jjammy on Jul 22, 2009 7:52 AMHi,
Check the sample program and develop your program accordingly.
<font color=blue><pre>
REPORT ztest_notepad.
*& Declarations
*Type-pools
TYPE-POOLS:
slis.
*Types
TYPES:
ty_fcat TYPE lvc_s_fcat,
ty_fcatalog TYPE slis_fieldcat_alv.
*Work areas
DATA:
wa_fcat TYPE ty_fcat,
wa_fcatalog TYPE ty_fcatalog.
*Internal tables
DATA:
it_fcat TYPE STANDARD TABLE OF ty_fcat,
it_fcatalog TYPE STANDARD TABLE OF ty_fcatalog.
*Type reference
DATA:
it_dyn_tab TYPE REF TO data,
wa_newline TYPE REF TO data.
*Filed symbols
FIELD-SYMBOLS:
<gt_table> TYPE STANDARD TABLE,
<fs_dyntable>,
<fs_fldval> TYPE ANY,
<l_field> TYPE ANY.
*Variables
DATA:
l_fieldname TYPE lvc_s_fcat-fieldname,
l_tabname TYPE lvc_s_fcat-tabname,
l_fieldtext TYPE lvc_s_fcat-seltext,
l_index TYPE char2.
"Selection-screen
PARAMETERS:
p_colms TYPE i.
*& start-of-selection.
START-OF-SELECTION.
PERFORM build_fieldcat.
PERFORM create_dynamic_table.
DO 20 TIMES.
DO p_colms TIMES.
l_index = sy-index.
CONCATENATE 'FIELD' l_index INTO l_fieldname.
ASSIGN COMPONENT l_fieldname OF STRUCTURE <fs_dyntable> TO <l_field>.
<l_field> = sy-index.
ENDDO.
INSERT <fs_dyntable> INTO TABLE <gt_table>.
ENDDO.
LOOP AT it_fcat INTO wa_fcat.
PERFORM fieldcatalog1 USING: wa_fcat-fieldname
wa_fcat-tabname
wa_fcat-seltext.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = 'ZTEST_NOTEPAD'
it_fieldcat = it_fcatalog
TABLES
t_outtab = <gt_table>.
*& Form BUILD_FIELDCAT
FORM build_fieldcat .
CLEAR: l_fieldname,
l_tabname,
l_fieldtext,
l_index.
DO p_colms TIMES.
CLEAR l_index.
l_index = sy-index.
CONCATENATE 'FIELD' l_index INTO l_fieldname.
CONCATENATE 'Field' l_index INTO l_fieldtext.
l_tabname = '<GT_TABLE>'.
PERFORM fieldcatalog USING: l_fieldname
l_tabname
l_fieldtext.
ENDDO.
ENDFORM. " BUILD_FIELDCAT
*& Form CREATE_DYNAMIC_TABLE
FORM create_dynamic_table .
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = it_dyn_tab.
ASSIGN it_dyn_tab->* TO <gt_table>.
Create dynamic work area and assign to FS
CREATE DATA wa_newline LIKE LINE OF <gt_table>.
ASSIGN wa_newline->* TO <fs_dyntable>.
ENDFORM. " CREATE_DYNAMIC_TABLE
*& Form FIELDCATALOG
FORM fieldcatalog USING field table f_txt.
wa_fcat-fieldname = field.
wa_fcat-tabname = table.
wa_fcat-seltext = f_txt.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
ENDFORM. " FIELDCATALOG
*& Form FIELDCATALOG1
FORM fieldcatalog1 USING field table f_txt.
wa_fcatalog-fieldname = field.
wa_fcatalog-tabname = table.
wa_fcatalog-seltext_m = f_txt.
APPEND wa_fcatalog TO it_fcatalog.
CLEAR wa_fcatalog.
ENDFORM. " FIELDCATALOG1 </pre>
</font>
Thanks
Venkat.O -
Create dynamic internal table with deep structure;cell coloring dynamic ALV
Hi,
My requirement is to do cell colouring for a dynamic ALV.
So I am creating a dynamic internal table using the following method.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_fieldcatalog[]
IMPORTING
ep_table = i_output.
But how do I define field COLORS which should be again an internal table ?
Is there any other way for cell colouring?
Putting my problem in another way:
How do I create a dynamic internal table with one field as another internal table.
Quick replies are highly appreciated.
Thanks,
Nisha Vengal.halo Nisha
Before building the display table . you can add the field in the feild catalog right . This display table gets generated from the field catalog right
1 Create a global structute say ZEXTEND_FIELDCAT
2 Have fields like STYLE type lvc_t_styl
COLOR type LVC_T_SCOL.
3 Now you have to extend ur fieldcatalog
l_fieldcat-fieldname = COLOR'.
l_fieldcat-ref_field = 'COLOR'.
l_fieldcat-ref_table = 'ZEXTEND_FIELDCAT'.
APPEND l_fieldcat TO lt_field_catalog.
CLEAR l_fieldcat.
Maybe you are looking for
-
How can I get photos in folders on an external hard drive to display in Bridge? At present only those located in Users>Pictures will display. I'm in CC. Thanks, Fran
-
Signing a trusted jar for use with forms
I have not found sufficient documentation on how to sign a new jar for use in conjunction with forms. I have read the descriptions in the getCLientInfo bean. This doesn't cover the whole subject. What must be done in Jinitiator? for instance. Can som
-
Call a routine in a dynamic action.
Hi Experts, i want to write a routine in which i can give the error msg while saving the infotype 0002 incase the given condition is not fulfilled. Can you tell me where i can write this routine and how to call it in a dynamic action. i hav written o
-
Windows 7 64 - SB X-fi - Only front speakers
-Windows 7-64 Ultimate -SB X-Fi Xtreme Music -Driver SBXF_PCDRV_LB_2_8_003 Problem: Rear?and cencer speakers are?not recogniced.
-
Losing of amImpl after a popup
Dear All, I have created a AMImpl calling a stored procedure inside and bind that data control to a page fragment. Then I use the following to get the AMImpl in the backing bean and run the stored procedure: ViewObject vo = (DCBindingContainer)Bindin