HELP!! WebDynpro don't pass Tables parameters to BAPI.
hello everyone
I am in trouble.I use a bapi with Tables parameter in my wedDynpro,and bind some data to this Tables model structure.Unfortunately,these data aren't be passed to bapi,and in my bapi the Tables paremeterTable is initial state.
Could some to help me ?
My wedDynpro programme follows:
public void execute_Test( )
//@@begin execute_Test()
IWDMessageManager manager = wdComponentAPI.getMessageManager();
Zzshibin_Test5_Input input = new Zzshibin_Test5_Input();
wdContext.nodeZzshibin_Test5_Input().bind(input);
Zzbsctmydsub_Score score = new Zzbsctmydsub_Score();
score.setZzmydkey("1");
score.setZzrltkey("2");
score.setZzsubdes("3");
score.setZzsubwgtrst("4");
AbstractList list = new Zzbsctmydsub_Score.Zzbsctmydsub_Score_List();
list.add(score);
input.setTable(list);
try
wdContext.currentZzshibin_Test5_InputElement().modelObject().execute();
catch(Exception e)
manager.reportException("error",true);
return;
I am wating for answer.
Hi Bin,
Please try the follwoing code.
public void execute_Test( )
//@@begin execute_Test()
IWDMessageManager manager = wdComponentAPI.getMessageManager();
Zzshibin_Test5_Input input = new Zzshibin_Test5_Input();
wdContext.nodeZzshibin_Test5_Input().bind(input);
Zzbsctmydsub_Score score = new Zzbsctmydsub_Score();
score.setZzmydkey("1");
score.setZzrltkey("2");
score.setZzsubdes("3");
score.setZzsubwgtrst("4");
<b>input.add<tablename>(score);</b>
try
wdContext.currentZzshibin_Test5_InputElement().modelObject().execute();
catch(Exception e)
manager.reportException("error",true);
return;
With Regards
Balaram Naidu Bankuru
Similar Messages
-
I am having difficulty passing tables as parameters using an RFC function defined in SE37 and an RPG ILE program running on a separate iSeries.
I have successfully passed import/export parameters, however tables are proving to be difficult.
The function builder will test with no errors, but does not pass or return tables.
A trace performed with the server side of the RFC shows the message "discarding unrequested T:" along with the table names.
Any help would be appreciated.I am using a multiple occurring data structure to define the tables.
DRFC_TABLES DS ALIGN OCCURS(3)
D TNAME * INZ(*NULL)
D TNLEN 10U 0 INZ(0)
D TTYPE 10U 0 INZ(0)
D TLENG 10U 0 INZ(0)
D TITHANDLE * INZ(*NULL)
D TITMODE * INZ(*NULL)
D TNEWITAB 10I 0 INZ(0)
I then fill occurrences 1 & 2 with the defining parameters, and occurrence 3 with *NULL in TNAME.
Then I do the following to get data, with a similar routine to send data.
C 1 occur RFC_TABLES
C EVAL TBPTR = %ADDR(TNAME)C EVAL Rcge = RfcGetData(hRfc : POINT : TBPTR) -
How BAPI Tables parameters are passed by reference
Hi Gurus,
I have a genuine doubt regarding BAPI parameters. I would like to point out the genreal rules of bapi like,
1. BAPI parameters should be passed by value. (Because they are rfc fm's. So both systems will be in different servers. This is the normal scenario.)
2. But the tables parameters in BAPI can't be passed by value. Instead they are passed by reference.
3. I know they use some kind of delta mechanism to transfer tables parameters to remote servers.
So gurus I would like to know what exactly happens when a tables parameter is passed. And also I didn't understand the delta mechanism. Kindly guide me.
Thanks in advance,
Jerry JeromeYou'll see in [SAP Library - RFC - Parameter Handling in Remote Calls|http://help.sap.com/saphelp_nw04s/helpdata/en/22/042551488911d189490000e829fbbd/frameset.htm] that tables are not passed by reference when you use RFC. It also explains the delta.
When you make a remote function call, the system handles parameter transfer differently than it does with local calls.
TABLES parameters
The actual table is transferred, but not the table header. If a table parameter is not specified, an empty table is used in the called function.
The RFC uses a delta managing mechanism to minimize network load during parameter and result passing. Internal ABAP tables can be used as parameters for function module calls. When a function module is called locally, a parameter tables is transferred u201Cby reference". This means that you do not have to create a new local copy. RFC does not support transfer u201Cby referenceu201D. Therefore, the entire table must be transferred back and forth between the RFC client and the RFC server. When the RFC server receives the table entries, it creates a local copy of the internal table. Then only delta information is returned to the RFC client. This information is not returned to the RFC client every time a table operation occurs, however; instead, all collected delta information is passed on at once when the function returns to the client.
The first time a table is passed, it is given an object-ID and registered as a "virtual global table" in the calling system. This registration is kept alive as long as call-backs are possible between calling and called systems. Thus, if multiple call-backs occur, the change-log can be passed back and forth to update the local copy, but the table itself need only be copied once (the first time). -
Passing Tables from one method to another method.
Hi All,
I'm creating a Web-Dynpro program in which I wouild like to passing an internal table from one method to another method within the same View.
Is this possible? And if so, how can I set it up.
Thank you.
PaulHi Paul ,
I hope u wud be clear with passing table from one method to another now .U may also wish to see this WIKI
Link: [Passing table parameters|https://wiki.sdn.sap.com/wiki/display/WDABAP/Passingtableparameterfromoneviewtoanotherview+locally]
I hope it wud help u .
regards,
amit -
How to pass runtime parameters to MySQL Query from xMII server
Please can anybody help in How to pass runtime parameters to Orcle Query from xMII server
The answer is the same as for your other thread. The mechanism is the same regardless of the end database. The SQL syntax will be different for each database vendor depending upon which functions you are invoking. The main areas of difference between SQL Server, Oracle, DB2, etc. deal with dates (times also) and strings, but there are others as well.
Regards,
Mike -
WebDynpro - How to pass a single field value to BAPI table?
Hello,
I have just come from WebDynpro ABAP training and being a novice hit my first issue right away.
I need to use BAPI - BAPI_CONTRACT_CREATEFROMDATA to create SD contract (I have used this BAPI to create a service call inside Webdynpro). I have two required fields: contract start and end dates. These fields passed in a table called CONTRACT_DATA_IN.
When I use the fields from the structures or individual fields, all I need to do is just put them on the view, and when I hit my submit button they will be passed to the BAPI. They are a part of COMPONENTCONTROLLER context (I have also mapped them in View context), but tables are obviously different.
Is there any way to pass data to tables as seamlessly without any code as for structures? Or do I need to write code to get the values from the input fields and then populate the table manually?
Thanks,
AlexHi,
Single customer contract creation use the struture-
If you want to pass only one record then using the input fields for those 2 fields we can pass them to BAPI and then create the Customer Contract. This will work for only one record of customer contract.
then we can directly read these input fields and pass to BAPI.
Creating many customer contracts -
For example, If you want to provide the group of records at a time and then you want to create the cusotmer contracts for so many records then you fill these fields and pass them to table then pass this table to the tables parameters of that BAPI.
Here we need not create the Table UI element separate input fields would serve the purpose.
Now we can create the batch of contracts for N customers.
these input fields of a customer will be passed to table, then next set of input fields etc.
For this create the Table UI element and fill all the records and then pass it to the Tables of the BAPI.
Regards
Lekha -
PASSING TABLES AS PARAMETERS IN FOR ALL INSERT
Hi All,
I want to pass table as a parameter to perform update in dynamic sql....
sample code:
declare
cur_tab1 is select * from tabl1;
TYPE tables_bulk is TABLE OF table2.source_table%TYPE;
v_tables_bulk tables_bulk;
ls_exe varchar2(2000);
begin
for i in cur_tab1 loop
select source_table bulk collect into v_tables_bulk from table2 where table_id =i.col1
forall i in 1..v_tables_bulk.count
ls_exe :='update '|| v_tables_bulk(i) || set bulk_col1|| =i.col2'
end;
code description :
here source_table is a column in table 2..source table column contains many tables..I have to fecth that table and update it with conditions using cursor.Also for select condition , we will get more than one value (more tables)..so i used bulk collect instead of normal variable.......i get local collection error..please help me out..user2639048 wrote:
I did that but still it showed invalid sql....What is version of your database ?
Some syntax works on newer versions, and is disallowed on older.
Here is an example that works on Oracle 11g2
-- create base table
CREATE TABLE TAB AS
SELECT TAB_ID,
EMP_ID,
'NAME ' || TAB_ID NAME,
ROUND( DBMS_RANDOM.VALUE( 1, 1000 ), 2 ) SALARY
FROM (
SELECT ROUND( DBMS_RANDOM.VALUE(1,20)) TAB_ID,
LEVEL EMP_ID
FROM DUAL
CONNECT BY LEVEL <= 100
-- create child tables
DECLARE
X PLS_INTEGER;
BEGIN
SELECT MAX( TAB_ID ) INTO X
FROM TAB;
FOR I IN 1 .. X LOOP
EXECUTE IMMEDIATE
'CREATE TABLE TAB' || I ||
q'{ AS SELECT * FROM TAB
WHERE 1 = 0 }';
END LOOP;
END;
CREATE OR REPLACE
PACKAGE UPDATE_TAB IS
TYPE TAB_TAB_TYP IS TABLE OF TAB%ROWTYPE;
PROCEDURE UPDATE_TAB( I_TAB IN TAB_TAB_TYP );
PROCEDURE TEST_UPDATE_TAB;
END UPDATE_TAB;
CREATE OR REPLACE
PACKAGE BODY UPDATE_TAB AS
PROCEDURE UPDATE_TAB( I_TAB IN TAB_TAB_TYP ) AS
BEGIN
FOR I IN I_TAB.FIRST .. I_TAB.LAST
LOOP
EXECUTE IMMEDIATE
' UPDATE TAB' || I_TAB(I).TAB_ID ||
Q'{ SET TAB_ID = :TABID, NAME = :NAM, SALARY = :SAL
WHERE EMP_ID = :EMPID }'
USING I_TAB(I).TAB_ID, I_TAB(I).NAME,
I_TAB(I).SALARY, I_TAB(I).EMP_ID;
IF SQL%ROWCOUNT <= 0 THEN
EXECUTE IMMEDIATE
' INSERT INTO TAB' || I_TAB(I).TAB_ID ||
' ( TAB_ID, EMP_ID, NAME, SALARY ) ' ||
' VALUES( :TABID, :EMPID, :NAME , :SAL )'
USING I_TAB(I).TAB_ID, I_TAB(I).EMP_ID,
I_TAB(I).NAME, I_TAB(I).SALARY;
END IF;
END LOOP;
END UPDATE_TAB;
PROCEDURE TEST_UPDATE_TAB IS
L_TAB TAB_TAB_TYP;
BEGIN
SELECT * BULK COLLECT INTO L_TAB
FROM TAB;
UPDATE_TAB( L_TAB );
END;
END UPDATE_TAB;
--- TEST
BEGIN
UPDATE_TAB.TEST_UPDATE_TAB;
END;
SELECT * FROM TAB16;
TAB_ID EMP_ID NAME SALARY
16 2 NAME 16 455.86
16 6 NAME 16 253.18
16 14 NAME 16 478.92
16 32 NAME 16 381.27
16 56 NAME 16 737.77
16 58 NAME 16 382.65
16 70 NAME 16 203.03
16 100 NAME 16 435.73
8 rows selected
SELECT * FROM TAB2;
TAB_ID EMP_ID NAME SALARY
2 1 NAME 2 737.91
2 18 NAME 2 35.61
2 22 NAME 2 57.76
2 33 NAME 2 851.72
2 73 NAME 2 109.74
5 rows selected
UPDATE TAB SET SALARY = 100
WHERE TAB_ID = 2;
5 rows updated
BEGIN
UPDATE_TAB.TEST_UPDATE_TAB;
END;
SELECT * FROM TAB2;
TAB_ID EMP_ID NAME SALARY
2 1 NAME 2 100
2 18 NAME 2 100
2 22 NAME 2 100
2 33 NAME 2 100
2 73 NAME 2 100
5 rows selected -
Help passing table name as parameter to a procedure
Hello,
i'm trying to write a procedure that takes a table name as input and uses a cursor to select a column,count(1) from the passed table to the cursor. The procedure i've come up with is as follows,
CREATE OR REPLACE
PROCEDURE excur(
p_tbl user_tables.table_name%type )
AS
type rc is ref cursor;
c rc;
res BOOLEAN;
BEGIN
open c for 'SELECT columnA,COUNT(1) FROM'|| p_tbl||';';
close c;
END excur;When i try to execute it, an error pops up informing that a table cannot be used in this context. As in i cannot pass a table name as an argument to a procedure. Kindly guide as to how to solve this situation.vishm8 wrote:
Hello,
i'm trying to write a procedure that takes a table name as input and uses a cursor to select a column,count(1) from the passed table to the cursor. The procedure i've come up with is as follows,
CREATE OR REPLACE
PROCEDURE excur(
p_tbl user_tables.table_name%type )
AS
type rc is ref cursor;
c rc;
res BOOLEAN;
BEGIN
open c for 'SELECT columnA,COUNT(1) FROM'|| p_tbl||';';
close c;
END excur;When i try to execute it, an error pops up informing that a table cannot be used in this context. As in i cannot pass a table name as an argument to a procedure. Kindly guide as to how to solve this situation.Generally speaking, Dynamic code is a bad idea for a staggering number of reasons.
That aside, what do you want to return? You're selecting a column and applying an aggregate function (count) but you're not grouping, that doesn't usually work out too well.
TUBBY_TUBBZ?select owner, count(*) from all_objects;
select owner, count(*) from all_objects
ERROR at line 1:
ORA-00937: not a single-group group functionWhy do you perceive the need to be able to take in ANY table name, can't you design an application where table names are known at compile time and not run time? -
How pass url parameters on init webdynpro app.?
Hi all,
i want to pass a parameter to my wd app. when its start. How can i do it? where do i have to do it?
Thanx in advance
CPYou can define parameter using two methods:
1. Via properties of the iview you have created, system will pass these parameters automatically to the iview.
2. Via Code, you can use Portal Navigation and pass parameters at runtime. Check following sample code:
WDPortalNavigation.navigateAbsolute(
"ROLES://portal_content/myIview/LoadEmployees",
WDPortalNavigationMode.SHOW_INPLACE,
(String) null,
(String) null,
WDPortalNavigationHistoryMode.NO_DUPLICATIONS,
(String) null,
(String) null,
"action=E");
The last parameter is for passing parameters, in the example parameter name: action and its value: E.
Regards,
Jawed Ali -
Help needed for report on tables vbak and vbap
Hello,
I needed help in one of my work issues, this is my first project and Iam still learning. kindly help.
I was asked to take erdat,vbeln,posnr from selection screen and compare it with the data already in tables vbap,vbak. If the data
already exists and exception needs to be raised saying that the 'data exists',but if the data is not present in the tables the
tables have to be updated. This has to be done using function module only.
Then I have to write a REPORT calling the above function module and finally displaying the number of records updated and the
list of them.
I have started writing a function module:
FUNCTION z_tableupdate.
""Local Interface:
*" IMPORTING
*" VALUE(DATE) LIKE VBAK-ERDAT DEFAULT SY-DATUM
*" VALUE(SALESORDERNO) LIKE VBAK-VBELN
*" VALUE(ITEMNO) LIKE VBAP-POSNR
*" EXPORTING
*" VALUE(EX_VBAP) LIKE VBAP STRUCTURE VBAP
*" VALUE(SYS) LIKE SY-SYSID
*" VALUE(EX_VBAK) LIKE VBAK STRUCTURE VBAK
*" EXCEPTIONS
*" DATA_UPDATED
*" DATA_EXISTS
SELECT * FROM vbak INTO vbak_wa WHERE erdat = date
AND vbeln = salesorderno.
ENDSELECT.
SELECT * FROM vbap INTO vbap_wa WHERE posnr = itemno.
ENDSELECT.
IF sy-subrc EQ 0.
ex_vbap = vbap_wa.
ex_vbak = vbak_wa.
ELSE.
RAISE data_exists.
ENDIF.
sys = sy-sysid.
ENDFUNCTION.
How is the above code for function module, will this work??
Now can I write a report to call the above function module and update the record?? if so, how to update ??? please help...Lots of thanks in advance.Hi
Welcome to SDN forum
Whay can't you write a simple report in SE38.
why you are using Fun module
Nothing wrong in it.
But first become perfetc in reports in SE38 and then do using the fun modules
write a simple select statement like
SELECT AVBELN AERDAT BPOSNR BMATNR
INTO TABLE ITAB
FROM VBAK AS A JOIN VBAP ON
AVBELN = BVBELN
WHERE A~VBELN IN S_VBELN AND
A~ERDAT IN S_ERDAT AND
B~POSNR IN S_POSNR.
IF SY-SUBRC <> O.
WRITE: / 'No data found'.
ENDIF.
First write this in SE38 by defining a proper selection screen and internal tables
then do as fun module
see the doc for fun module
Function Modules;
Check this matter.
Function Modules are Global ABAP programs created by SAP for reusable purpose.they have IMPORT,EXPORT and TABLE parameters, and EXCEPTIONS to through when error occurs.
You can create them from TCode SE37.
Go through the following doc:
Function modules are cross-program, reusable procedures that are organized into function groups, and whose functions are implemented between the statements FUNCTION and ENDFUNCTION. Function modules and their interfaces are created in the Function Builder.
Function Module Interfaces
The parameter interface of a function module is defined in the Function Builder. It includes the definition of interface parameters and the specification of exceptions that can be triggered by a function module. The Function Builder automatically generates comment lines below the FUNCTION statement in the source code of the function module, which represent the interface of the function module with the following syntax:
Syntax
... [IMPORTING parameters]
[EXPORTING parameters]
[CHANGING parameters]
[TABLES table_parameters]
[{RAISING|EXCEPTIONS} exc1 exc2 ...]
The syntax and semantics of IMPORTING, EXPORTING, CHANGING, RAISING, and EXCEPTIONS mainly correspond to the definition of method interfaces with [CLASS-]METHODS. The additional option of defining table parameters using TABLES is obsolete.
Interface parameters
The interface parameters are defined on the relevant tab pages in the Function Builder.
IMPORTING parameters are input parameters. When the function module is called, a suitable actual parameter must be specified for every non-optional input parameter. The content of the actual parameter is passed to the input parameter when the call is made. The content of an input parameter for which 'pass by reference' is defined cannot be changed in the function module.
EXPORTING parameters are output parameters. When the function module is called, a suitable actual parameter can be specified for every output parameter. The content of an output parameter that is defined for 'pass by value' is transferred to the actual parameter if the function module is completed without errors. An output parameter that is defined for pass by reference is not initialized when the function module is called.
CHANGING parameters are input and output parameters. When the function module is called, a suitable actual parameter must be specified for every non-optional input or output parameter. When the function module is called, the content of the actual parameter is passed to the input/output parameter, and when the function module is completed, the content of the input/output parameter is passed to the actual parameter.
TABLES parameters are table parameters. Table parameters are obsolete CHANGING parameters that are typed as standard tables with a header line. If an internal table without a header line or a table body is passed as an actual parameter to a formal parameter of this type, an empty local header line is generated in the function module. If an internal table with a header line is used as an actual parameter, both the table body and the header line are passed to the function module. Pass by value is not possible in formal parameters defined using TABLES. Formal parameters defined with TABLES can be replaced by formal parameters defined with CHANGING. A local work area can be created for the internal table in the function module by using the addition LIKE LINE OF itab of the DATA statement.
Exceptions
The exception of a function module are defined on the Exceptions tab page in the Function Builder. Here you can select exception classes to define whether class-based exceptions are declared or non-class-based exception are defined. Class-based exceptions are represented in the above syntax by RAISING, and non-class-based exceptions are represented by EXCEPTIONS.
The addition RAISING is used to declare class-based exceptions that can be propagated from the function module to the caller. Exceptions in the categories CX_STATIC_CHECK and CX_DYNAMIC_CHECK must be explicitly declared, otherwise a propagation can lead to an interface violation. A violation of the interface leads to the treatable exception CX_SY_NO_HANDLER. Exceptions of the category CX_NO_CHECK are implicitly always declared. The declaration of exceptions of the category CX_STATIC_CHECK is statically checked in the syntax check. For exceptions of the category CX_DYNAMIC_CHECK, the check is not performed until runtime. In a function module in which class-based exceptions are declared with the RAISING addition, the statement CATCH SYSTEM-EXCEPTIONS cannot be used. Instead, the relevant treatable exceptions should be handled in a TRY control structure.
The addition EXCEPTIONS is used to define a list of non-class-based exceptions that can be triggered in the function module using the statements RAISE or MESSAGE RAISING. Exceptions defined in this way - as with formal parameters - are bound to the function module and cannot be propagated. If an exception of this type is triggered in a function module, and no return value has been assigned to it with the homonymous addition EXCEPTIONS of the CALL FUNCTION statement when the call was made, this leads to a runtime error.
Note
For new developments after release 6.10, SAP recommends that you work with class-based exceptions that are independent of the function module.
RFC is a technology which is used to access a functions (Modules) from
the remote systems.
If a function module is set as remote enabled which can be access from
the remote system via RFC.Eg: U can access the Remote enabled function modules in ur VB,Webdynpro,Java,Visual composer program.
A function module can be set as remote enabled by SE37->Go to ur FM->click the option Button "remote enabled".
But Normal function modules can not accessd from the remote system.
Good Example for RFC enabled function module is : BAPI(Business Application Programming Interface)
Note: All BAPIs are Remote enabled but not all remote enabled function modules are BAPI.
CALLING A FUNCTION MODULE:
1)In U ABAP Editor --> Click "Patter" ---> Selection Option Button "Call Function"
--> Write the Corresponding FM name --> Hit Enter
2)The appropriate import ,export Parameters will be displayed in ur editor
3)Pass the Values Here.
Also check these links.
http://www.geocities.com/victorav15/sapr3/abapfun.html
Check this link:
http://help.sap.com/saphelp_erp2004/helpdata/en/9f/db988735c111d1829f0000e829fbfe/content.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/ef/d94b78ebf811d295b100a0c94260a5/frameset.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/43/41341147041806e10000000a1553f6/frameset.htm
Check this link:
http://help.sap.com/saphelp_erp2004/helpdata/en/9f/db988735c111d1829f0000e829fbfe/content.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/ef/d94b78ebf811d295b100a0c94260a5/frameset.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/43/41341147041806e10000000a1553f6/frameset.htm
See the following links:
http://help.sap.com/saphelp_erp2005vp/helpdata/en/9f/db970e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_erp2005vp/helpdata/en/9f/db970e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_erp2005vp/helpdata/en/9f/db970e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_erp2005vp/helpdata/en/9f/db970e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_erp2005vp/helpdata/en/9f/db970e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/26/64f623fa8911d386e70000e82011b8/content.htm
Regards
Anji -
Issues passing drillthrough parameters from a multi-level tablix in SSRS 2008 R2
Hello,
I am really struggling with trying creating a drillthrough report that starts with a matrix (tablix) and passing those parameters. I am using SSRS 2008 R2.
Here's my scenario:
I have a matrix that has mulitple levels where you can drill down. Here an example with all the levels open:
Active
Term
Leave
Total
128
88
121
United States
110
80
85
New York
65
30
57
Manhattan
10
6
9
Buffalo
20
23
4
Albany
35
1
44
Texas
45
50
28
Dallas
40
30
22
Houston
5
20
6
France
18
8
36
Centre
18
8
36
Blois
7
2
8
Druex
6
1
15
Tours
5
5
13
I want to drillthrough to another report - Detail Report. As I understand it, I would click the 65 for New York and I would see the detail for the 65 Active people. If I click the 2 under Blois, I would see the 2 terminated people in Blois. My understanding
for this to work, the Detail Report would need a a parameter for each of the level possibilities in the matrix that I could click: Country, State, City as well as the Status (Active, Term, Leave).
While I understand about passing parameters, what I don't understand is how to pass the parameters if they are blank. Let's say I clicked 65 for New York, I would need to pass State = New York Status = Active. But the remaining parameters (Country
and City would be null). I know Country doesn't need to be Null in this case.
My Detail Report has the parameters defaulted to Null, but whether I put the parameters in a Filter for the dataset or in the query itself, I cannot get it to ignore the Nulls.
As a crazy work-around (I think) I can put in the Where of the query something along the lines of: this:
and (a.Country in (@paramCountryCode) or NULL in (@paramCountryCode) )
and I would need to do that for each parameter. Usually I have to use 'ALL' instead of NULL, I'm note sure why.
Additionally, in the Report Action of the Main Report, I need to pass those parameters for each level and their Status. I am also not clear whether or not I need to put in all the parameters on each of the levels (Country, State, City) of the matrix. And if
I do, do I need to make the expressions an IIF statement stating whether or not they are In Scope?
All the examples I was able to find, only showed one or maybe two parameters being passed. Doing the way I am trying, seems convoluted, error-prone and tedious. I really hope that I am wrong.
Is there a better way to approach drilltrough reports from a matrix when there are multiple levels?
Thank you for the help.
~JHi Jenna_Fire,
According to your description, you have a matrix contains total for each group on each level. Now your requirement is, when you click on any number (data field or total), it will go to the detail report which returns all the detail information of the people
within the group scope. For example, if you click on the total of Active users in United States, it will return the detail information of Active users in New York and Texas. Right?
In this scenario, we should set the parameter (@Country, @State, @City) allow multiple values in both main and detail report. And in Default Value (@Country, @State, @City), query out all distinct values. In the textbox which contains
those total values, when set use these parameters to run the report, we only need to pass the parameters of parent groups. For example, if we click on the total of Active users in New York, we only need to pass Country, State, Status to detail report, and
in the detail report, the City parameter will use all distinct values (Default Values) because we don't pass the City parameter. We have tested this case with sample data in our local environment. Here are steps and screenshots for your reference:
1. Create parameter Country, State, City and Status in both main report and detail report. Set both Available Value and Default Value get values from query (Create a dataset for each parameter, use "select distinct [column] from [table]" as query). Set allow
multiple values for parameter Country, State and City in both reports.
2. In corresponding textbox, pass appropriate parameters in go to report Action.
4. Filter data in detail report (in where clause or using filters).
5. Save and preview. It looks like below:
Reference:
Using Parameters to Connect to Other Reports
If you have any question, please feel free to ask.
Best Regards,
Simon Hou -
Passing table data to pl sql procedure oaf
Hi All,
I have a requirement where i have to pass table data to plsql procedure.
In the first page i select the REQUISITION and click on RETURN button and it will take me to the next page.
and in the Next page i will click on APPLY button.
When i click on APPLY, it will call the procedure and will give input to the procedure whatever has been selected when i have selected requisition.
Please help. Please tell me the approach how to get this task done. A sample code will work.
Hope the requirement is clear.
Thanks in Advance.Hi Chinmay,
Refer below code for Your Requirement.
//Code For Quering Data
import java.sql.PreparedStatement;
import java.sql.ResultSet;
Connection conn = pageContext.getApplicationModule(webBean).getOADBTransaction().getJdbcConnection();
String Query = "SELECT organization_id FROM hr_operating_units WHERE organization_id = fnd_global.org_id";
PreparedStatement stmt = conn.prepareStatement(Query);
resultset=stmt.executeQuery();
while (resultset.next())
orgId = (String)resultset.getString("ORGANIZATION_ID").toString();
conn.commit();
catch(Exception e)
e.printStackTrace();
//Code for Pass Resulted column to Procedure Input for delete Particular Record
Execute parameterized PL SQL procedure from OAF page
Let us try to call PL/SQL package from OAF page. We will try to remove selected line from Database.
Package Spec
CREATE OR REPLACE PACKAGE APPS.genpack_pkg
AS
PROCEDURE roll_delete_proc (orgId IN VARCHAR2);
END genpack_pkg;
Package Body
CREATE OR REPLACE PACKAGE BODY APPS.genpack_pkg
AS
PROCEDURE roll_delete_proc (orgId IN VARCHAR2)
AS
BEGIN
DELETE FROM pklist_roll_details_temp
WHERE roll_line_id = orgId;
COMMIT;
END roll_delete_proc;
END genpack_pkg;
//in Controller PFR
import java.sql.CallableStatement;
if (pageContext.getParameter("ActionsButton") != null)
String val = pageContext.getParameter("ActionsChoice");
if ("DELLN".equals(val))
CallableStatement cstmt = null;
for (OAViewRowImpl row = (OAViewRowImpl)tempvo.first(); row != null; row = (OAViewRowImpl)tempvo.next()) {
if ((row.getAttribute("Selectflag") == null) ||
(!row.getAttribute("Selectflag").toString().equals("Y"))) continue;
try {
int rollid = Integer.parseInt((String)row.getAttribute("orgId"));
Connection conn = am.getOADBTransaction().getJdbcConnection();
if (rollid == 1)
temphm.put(row.getAttribute("orgId").toString(), row.getAttribute("PoNumber").orgId());
tempvo.removeCurrentRow();
else
try
StringBuilder sb = new StringBuilder();
sb.append(rollid);
String strI = sb.toString();
System.out.println("Inside else in delete");
cstmt = conn.prepareCall("{call GENPACK_PKG.tpc_roll_delete_proc(?)}");
cstmt.setString(1, strI);
System.out.println("Oracle Callable Statment Execution Init for Delete");
cstmt.execute();
catch (SQLException e) {
throw new OAException(e.toString(), (byte)0);
}tempvo.removeCurrentRow();
catch (OAException e) {
throw new OAException("No row selected", (byte)3);
Thanks,
Dilip -
Hi...
I am trying to call an external function in R/3 via WebDynpro. The function uses a table with associated type W3Query. I execute the function in R/3 by adding name/value pairs to the table.
In WebDynpro, I am setting the same values in table.
When I execute the function, an exception is thrown by the program that indicates that the parameters aren't present.
However, the parameter data is being displayed from the context on my output screen. Any suggestions on how to pass the parameters would be appreciated.....
In the init method, I am binding the input and output:
Www_Get_Report_Input wgri = new Www_Get_Report_Input();
Www_Get_Report_Output wgro = new Www_Get_Report_Output();
wdContext.nodeWWW_GET_REPORT().bind(wgri);
wdContext.nodeOutput().bind(wgro);
In the implementation for testing, I am binding the Query String table:
Vector v = new Vector();
W3Query w3q1 = new W3Query(wdContext.currentWWW_GET_REPORTElement().modelObject().modelInstanceId());
w3q1.setName("_REPORT");
w3q1.setValue("ZM1BOMX2");
v.add(w3q1);
wdContext.nodeQuery_String().bind(v);
W3Query wqnew = new W3Query(wdContext.currentWWW_GET_REPORTElement().modelObject().modelInstanceId());
try {
wdContext.currentWWW_GET_REPORTElement().modelObject().execute();hello Stephen
instead of creating a Vector object you create the objects of ur internal table that you want to pass ( here i think its "W3Query" )
ie W3Query obj = new W3Query();
obj.setName("_REPORT");
obj.setValue("ZM1BOMX2");
wgri.addW3Query(obj); // wgri is ur "Www_Get_Report_Input" object.
repeate this in a loop for "n" no. of records. hope this will help u. no need of creating " Www_Get_Report_Output" object.
regards,
Piyush -
New in NW04s: FL069 TABLES parameters are obsolete (in function modules)
Can somebody explain what is the fundamental reason for this behaviour in NW04s?
In Netweaver 2004s system (like ERP2005 ) you get a warning message in SE37:
FL069 TABLES parameters are obsolete! when defining quite ordinary tables parameter using LIKE and reference to a structure in ddic.
I now speak normal function modules, not RFC enabled.
This example of tables parameter definition will cause the warning message:
return LIKE BAPIRET2
I of course looked the additional help provided by this message FL069. I understood it as following:
you should stop using TABLES parameter and more often use CHANGING parameter by referring a TABLE TYPE defined in dictionary.
if using CHANGING parameter and still want to pass the header line of your internal table you should use a separate parameter (EXPORT or CHANGING parameter)
Developers have too much used TABLES parameters for passing internal tables for reading (by value) rather than to be modified (by reference). As a consequence, fm could have change the header line without caller to know it.
in my opinion the message help is missleadingly telling that header line is no longer passed to function module if TABLES parameter is used. I made a small test program and fm (with TABLES paramerer), and everything worked as before.
The warning message can be ignored by pressing Enter a few times and your fm with TABLES parameter works as it had in older versions of Netweaver.
SAP is still using a lot of TABLES parameters in their own function modules. For example SD_SALES_HEADER_MAINTAIN.
So what is the point of this warning message while everything still works as it used to be and SAP uses this same "OBSOLETE" feature itself? Is there anything more fundamental behind this message? Like TABLES paremeters will no longer work in future versions of ABAP (or header line passing will be ignored in future versions) and therefore developers should switch to CHANGING/EXPORT parameters with TABLE TYPES as soon as possible??
Please understand that I don't need any assistance how to avoid this message, just interested to share your opinions what is the purpose of this warning message.
That is why I did not marked this thread as a question.
Br: KimmoHello,
This is the view under Tables tab in my function builder:
I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT
I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS
E_T_DATA LIKE SFLIGHT (which I change to YBWxxxx)
The moment I change to YBWxxxxx it gives me that error '"TABLES parameters are obsolete! "'
and unfortunately hitting enter several times is not helping either
Thanks! -
What is the better way to pass input parameters between components?
Hi all,
I had a dispute with a colleague about passing data between different WDP Development Components. The situation is like this:
Colleague has a SearchWDP (parent) und I have a BrowseWDP (child). After searching for some objects and clicking a hit in the SearchWDP, the corresponding details should be shown in BrowseWDP, via passing a bunch of parameters such as selected item's id, etc.
Now which of the following is the better practice:
- Defining a node in BrowseWDP (child) with isInputParameter set to TRUE, creating a similar node from the same type (simply via ModelBinding, both WDPs are using the same model) in SearchWDP, and defining a mapping between them so that SearchWDP fills the input nodes. From BrowserWDPs perspective, I'd call this Pull method.
or...
- Defining a node in BrowseWDP (child) with isInputParameter set to FALSE, creating a setter method in BrowseWDP Interface Controller for the collection (to be passed as parameters) and calling a wdContext.nodeBlaBla().bind(pInputParameterFromModelType). From BrowserWDPs perspective, I'd call this Push method.
The colleague's argumentation in favor of Push has not convinced me at all and I'd like to ask your opinions. Is there a best practice or recommendation for this scenario? TIA
ps: Any answer will be rewarded.Hi Cuneyt,
Refer the links below, they are very informative!
http://help.sap.com/saphelp_nw04s/helpdata/en/22/15a441cd47a209e10000000a155106/content.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/67/cc744176cb127de10000000a155106/content.htm
These links are a part of the WebDynpro ABAP documentation, but the concepts are same for WDA and WDJ.
Considering your scenario, I would recommend the first alternative you have mentioned (if you refer the second link its called External Context Mapping), where component controller context node of component A (SearchWDP) is the source for Interface controller context (same name) of component B (BrowseWDP).
Thanks.
Chitrali
Maybe you are looking for
-
Can i use a seagate external drive with my mac?
Hi, probably a dumb question but i want to make sure before i buy, can i use this drive- http://www.tigerdirect.com/applications/searchtools/item-details.asp?EdpNo=18283 84&Tab=5 with an imac g5? to me,it seems like a good price. i have fceHD and a 1
-
BT, An absolute joke. Lies/Ignorance/Lack of train...
I have had my infinity 2 connection for around 12 months now, first sync speed, 64.1meg down, 20 meg up. After around 2 weeks it settled to 55-60 meg down, 20 meg up and I have not had an issue since the very start. Always download at speeds around 7
-
Revision: 11188 Author: [email protected] Date: 2009-10-27 12:16:37 -0700 (Tue, 27 Oct 2009) Log Message: In 'for each (var in)' statements, defend against undefined entries in the AysncListView/pendingResponders sparse array. QE notes: Doc not
-
Use Different mailbox or same mailbox if setup two accepted domains in one Exchange Server 2010
Hi, I want to know if I setup two accepted domain in one Exchange Server 2010, will it have another mailbox or use same mailbox?
-
i read that verizon would throttle new users who are in the top 5% of data users. is this for smartphones or 4g modems, does this new throttle also apply to 4g modems. if i have a 4g modem and use 20 gb a month and pay for the overage, will verizon