Using functions in plsql
Hello All:
My question is, Which is more efficient to use in Plsql:
IF v_DestFile IS NULL THEN
v_DestFile := in_DestFile ;
END IF;
OR
v_DestFile := NVL(v_DestFile , in_DestFile);
Using the second one requires a call to a function..
What are your thoughts.
Thanks
Leonard
The following test run on Windows XP with an Athlon 3400 shows that NVL function take more time to execute. However to see the difference you have to run this code many many times (if you run this this code 1 million of times within a SQL query or within PL/SQL, you will likely get other performance problems ...):
SQL> set timing on
SQL>
SQL> select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Elapsed: 00:00:00.00
SQL>
SQL> declare
2 vdf varchar2(10) := null;
3 vidf varchar2(10) := 'ok';
4 begin
5 for i in 1..100000000
6 loop
7 if vdf is null then
8 vdf := vidf;
9 end if;
10 end loop;
11 end;
12 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.57
SQL> show errors
No errors.
SQL>
SQL>
SQL> declare
2 vdf varchar2(10) := null;
3 vidf varchar2(10) := 'ok';
4 begin
5 for i in 1..100000000
6 loop
7 vdf := nvl(vdf, vidf);
8 end loop;
9 end;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:21.71
SQL> show errors
No errors.
SQL>
SQL>
SQL> declare
2 vdf varchar2(10) := 'ok';
3 vidf varchar2(10) := 'ok';
4 begin
5 for i in 1..100000000
6 loop
7 if vdf is null then
8 vdf := vidf;
9 end if;
10 end loop;
11 end;
12 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.61
SQL> show errors
No errors.
SQL>
SQL>
SQL> declare
2 vdf varchar2(10) := 'ok';
3 vidf varchar2(10) := 'ok';
4 begin
5 for i in 1..100000000
6 loop
7 vdf := nvl(vdf, vidf);
8 end loop;
9 end;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:21.76
SQL> show errors
No errors.
SQL> exit
[pre]
Message was edited by:
Pierre Forstmann
Message was edited by:
Pierre Forstmann
Similar Messages
-
Can record comparisons be done without functions or PLSQL
I am used to writing Oracle functions to do record comparisons, however on this particular project the managers do not want to use functions or PLSQL
Is there a way to do the following with a SQL statement rather than writing a function - see data set below? Oracle 9i.
I have the following data set used to track packages that are moved from warehouse to warehouse on trucks
I only want to retrieve a record if the starting location is Dallas Ft Worth and the end location is another city.
I do not want to retrieve a record if the package moves between other cities (say Boston and New York)
For this data set package 1324 was added and removed to the warehouses at Dallas 4 times via truck 735 before it was finally moved to a warehouse in Boston by the same truck
I want the query to return the following record
105273 345 1324 725 11/3/2010 14:32 11/3/2010 15:46 Dallas Ft Worth WH4
Showing the last location in Dallas before it was moved to Boston
I do not want to return any of the Boston or NY records or any of the previous Dallas Ft Worth Records.
The way the system updates the records is as follows:
If a package is added to a warehouse the record gets an added date.
When it is removed the system updates the removed date of that same record
Once it is added to a new warehouse there is a new record with an added date and null date for the removed date unless it leaves that location
In the record set if the removed date is null then that is the current location of the package
CREATE TABLE package_location
( track_id NUMBER(10)
, sender_id NUMBER(10)
, package_id NUMBER(10)
, truck_id NUMBER(10)
, package_add_date DATE,
, package_remove_date DATE,
, city VARCHAR2 (50)
, Warehouse VARCHAR2(50)
INSERT ALL
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (100012
, 345, 1324, 725, 8/4/2010 2:39:48 PM, 8/4/2010 2:53:07 PM, 'Dallas Ft Worth', 'WH1')
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (100016
, 345, 1324, 725, 8/4/2010 2:53:07 PM, 9/30/2010 10:41:01 AM, 'Dallas Ft Worth', 'WH2')
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (103055
, 345, 1324, 725, 9/30/2010 10:41:01 AM, 11/3/2010 2:32:14 PM, 'Dallas Ft Worth', 'WH3')
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (105273
, 345, 1324, 725, 11/3/2010 2:32:14 PM, 11/3/2010 3:46:22 PM, 'Dallas Ft Worth', 'WH4')
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (105284
, 345, 1324, 725, 11/3/2010 3:46:22 PM, 11/22/2010 11:55:18 AM, 'Boston', 'WH34')
INTO package_location(track_id, sender_id, package_id, truck_id, package_add_date, package_remove_date, city, warehouse) VALUES (106674
, 345, 1324, 725, 11/22/2010 11:55:18 AM, NULL, 'New York', 'WH56')
I tried to do a query with a subquery... the main query was getting all the records with Dallas Ft Worth and then the subquery was to check if the location was not Dallas Ft Worth, but so far I haven't quite been able to get the correct dataset.
Any help is greatly appreciated. I don't know if there is a way to do this with just a sql query, if not other suggestions are welcomed!
Thanks in advanceI added a couple of rows to your table, shipping the package back from New York to Dallas on a different truck, then back out from Dallas to New York just to make sure I understand the requirements.
SQL> SELECT * FROM package_location;
TRACK_ID SENDER_ID PACKAGE_ID TRUCK_ID PACKAGE_ADD_DATE PACKAGE_REMOVE_DATE CITY WAREH
100012 345 1324 725 04-aug-2010 14:39:48 04-aug-2010 14:53:07 Dallas Ft Worth WH1
100016 345 1324 725 04-aug-2010 14:53:07 30-sep-2010 10:41:01 Dallas Ft Worth WH2
103055 345 1324 725 30-sep-2010 10:41:01 03-nov-2010 14:32:14 Dallas Ft Worth WH3
105273 345 1324 725 03-nov-2010 14:32:14 03-nov-2010 15:46:22 Dallas Ft Worth WH4
105284 345 1324 725 03-nov-2010 15:46:22 22-nov-2010 11:55:18 Boston WH34
106674 345 1324 725 22-nov-2010 11:55:18 New York WH56
106675 345 1324 804 25-nov-2010 09:55:18 30-nov-2010 15:46:22 Dallas Ft Worth WH4
106676 345 1324 804 25-nov-2010 09:55:18 01-dec-2010 15:46:22 New York WH42Given this data, you would want to get back track_id 105273 and 106675 correct?
If so, then something like:
SQL> SELECT track_id, sender_id, package_id, truck_id, package_add_date,
2 package_remove_date, city, warehouse
3 FROM (SELECT track_id, sender_id, package_id, truck_id, package_add_date,
4 package_remove_date, city, warehouse,
5 LEAD (city) OVER(PARTITION BY package_id
6 ORDER BY package_remove_date) next_city
7 FROM package_location)
8 WHERE city = 'Dallas Ft Worth' and
9 next_city != city;
TRACK_ID SENDER_ID PACKAGE_ID TRUCK_ID PACKAGE_ADD_DATE PACKAGE_REMOVE_DATE CITY WAREH
105273 345 1324 725 03-nov-2010 14:32:14 03-nov-2010 15:46:22 Dallas Ft Worth WH4
106675 345 1324 804 25-nov-2010 09:55:18 30-nov-2010 15:46:22 Dallas Ft Worth WH4John
Edited by: John Spencer on Aug 14, 2011 2:22 PM
Fixed non-displaying operator -
Can I use Count, Max function in PLSQL BLOCK.
Can U help me to use count, max function in PLSQL BLOCK.
Because it is giving me error "It is a SQL function"SELECT COUNT(*)
INTO l_variable
FROM dual;
Will work inside PL/SQL -
How To Store XML Fragments Using Functions Such As XMLElement
Hi
Not sure what I am missing. I wish to store XML fragments in variables so can pass around and concatenate with other fragments to make final XML document. Even before attempting to concatenate XML fragments, I am struggling to store any XML fragment in a variable. I am trying to use simple functions such as XMLElement to generate XML so can store in variable. I have seen many examples of XMLElement in SQL select statement. Can XMLElement be used in plsql? XMLElement says it returns value of type XMLType. Functions such as XMLElement make generating XML easier than creating all tags manually.
Below is simple example that demonstrates what I would like to do. I would like to be able to pass the XML fragment as either XMLType or clob. I receive error saying PLS-00201: identifier 'XMLELEMENT' must be declared
declare
vTheData XMLType;
vTheDataClob clob;
begin
vTheData:= XMLelement("empno",'1234567');
vTheDataClob:= xmlelement("empno",'1234567').getclobval();
end;
Where as I can use below, but surely don't have to use select into from dual method. I just expect can use XMLElement function in plsql same as sql, such as most other functions eg length, rtrim etc.
declare
vTheData XMLType;
vTheDataClob clob;
begin
select xmlelement("empno",'1234567')
into vTheData
from dual;
select xmlelement("empno",'1234567').getclobval()
into vTheDataClob
from dual;
end;
Hope this makes sense.
ThanksHaving said that, is there a more elegant way to achieve below. That is populate two XML fragments and concatenate together.
Sure, why not just only one statement?
select XMLConcat(
XMLElement( ... )
, XMLElement( ... )
into vTheResult
from dual;
As a second question, is it better to build and pass XML fragments as XMLType or clob?
I would say stay with XMLType but it depends on your requirement.
I generally avoid passing around pieces of data, SQL/XML functions are powerful in the way they can be used with set operations, so using them in a piecewise approach kinda negates what they're for. -
Is it possible to call a java function from plsql?
I have a plsql script which loads data in to a table. One of the fields is a notes field. I would like to use advance offerings of java to manipulate the data before inserting. Is there away I can pass the data to a java function and have it return the manipulated data?
Thanks
AaronYou can use java stored procedure to call java function from plsql.
1. Create a java class with a static function(which will be called from plsql).
2. Compile and load the class into database using LOADJAVA command.
3. Create a wrapper stored procedure or function in plsql which calls the above java function.
4. Access this plsql procedure like normal database procedure. This will invoke underlying java function in which you can do all the processing and return result.
Refer this url for help on implementing above steps :
http://otn.oracle.com/tech/java/jsp/pdf/developing_o8i_apps_with_plsql_and_java_twp.pdf
Samples on java stored procedure :
http://otn.oracle.com/sample_code/tech/java/jsp/oracle9ijsp.html
Chandar -
How to return multiples values useing functions
Hi to all,
I am using functions to return multiple values of two rows or multiple rows.
For example emp id = 100 and i need to return the value for this(empid) input and output of this first_name and salary.
I am tried in this way below but got errors (ORA-00932: inconsistent datatypes: expected NUMBER got HR.EMP_TYPE)
create or replace type emp_type as object(first_name varchar2(20),salary number);
create or replace function f1(empid in number)
return emp_type
as
emp_record emp_type;
begin
select first_name,salary into emp_record.first_name,emp_record.salary from employees where employee_id = empid ;
return emp_record;
end;
select f1(100) from dual;Sql is Sql and plsql is plsql. Though we can almost use all the sql objects inside a plsql code but vice versa is not always possible. Since plsql is tightly integrated with sql , if you return a number/date/varchar2 datatype values from plsql code to sql code,there is nothing wrong .Sql acknowledges this return type and knows well about how to handle it .But plsql record is a plsql specific datatype ,oracle was not built keeping in mind the fact that people will be creating difference types of records in plsql .So if you return a plsql datatype into a sql statement (which is processed by a sql engine) ,you need to tell oracle that I have written a plsql code which is going to return a record type so that sql engine can interpret it well.
So all you need to do is create record in sql (known as object in sql ),when you make one, the entry is going to be shown in user_types views. Now use it like any other data type. I assume that the forum link provided in the above post is the best one to understand.
Thanks,
Rahul -
i use a function like:
00001 FUNCTION hhbtest
00002 RETURN number is
00003 a_ret number;
00004 BEGIN
00005 select count(*)
00006 into a_ret from user_message where userid=208289;
00007 dbms_output.put_line
00008 ( 'hello');
00009 return(a_ret);
00010 exception
00011 when others then
00012 err_num :=SQLCODE;
00013 err_msg := SUBSTR(SQLERRM, 1, 1000);
00014 rollback;
00015 insert into err_report(errno,errcode,errmsg,errdate,errsql) values (sq_err_report_errno.nextval,err_num,err_msg,sysdate(),'hhbtest');
00016 commit;
00017 END;
it report error:
SQL> exec function hhbtest;
BEGIN function hhbtest; END;
ERROR at line 1:
ORA-06550: line 1, column 16:
PLS-00103: Encountered the symbol "HHBTEST" when expecting one of the
following:
:= . ( @ % ;
The symbol ":=" was substituted for "HHBTEST" to continue.
this is the first time i use function
and i can not find out the source of error
pls help me
nullHello,
At any condition, a function will return ONLY ONE VALUE.
for ex:
it is generic..
CREATE FUNCTION tempFunc RETURN number as
BEGIN
return 2;
return 1;
return 4;
END;
this will always return 2 only.
Note:
1. The very first return statement breaks the further execution & return the first value.
2. U can have multiple return statements with in IF .. THEN ..ELSE condition
like
IF a > 5 AND a < 10 THEN
return 'a is bet. 5 and 10';
ELSIF a<5 THEN
return 'a is less then 5';
END IF;
3. If U want to return more then one value, then U have to use a procedure which will return U a recordset.
for further informn regdng. returning record set,
reffer usage of REF cursors in PLSQL block.
hope this clarifies few PLSQL fundas..
regards
Prakash -
How to upload Excel file in BI using function module in abap program
How to upload Excel file in BI using function module in abap program?
Hi Anuj,
To upload the file , you can try a standard program "RSEPSFTP" .
while you execute the program , a selection screen appears in which the inputs should be give as
RFC destination - The target server name
FTP command- PUT
local file - your file name
local directory - path of your local file
remote file - your target file name
remote directory - where it has to be stored
Hope this is useful for you
Thanks & regards
Anju -
How to maintain Ztable using function module instead of SM30
Hi Friends,
please tell me , How to maintain Ztable or view using function module instead of SM30.
Thanks,
Veerendra.Hi,
You can design your report and use Function module VIEW_MAINTENANCE_CALL for that.
You need to use Action type as 'S' for displaying and 'U' for maintaining the table.
Ex:
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
ACTION = 'S'
VIEW_NAME = 'Table Name'
EXCEPTIONS
CLIENT_REFERENCE = 1
FOREIGN_LOCK = 2
INVALID_ACTION = 3
NO_CLIENTINDEPENDENT_AUTH = 4
NO_DATABASE_FUNCTION = 5
NO_EDITOR_FUNCTION = 6
NO_SHOW_AUTH = 7
NO_TVDIR_ENTRY = 8
NO_UPD_AUTH = 9
ONLY_SHOW_ALLOWED = 10
SYSTEM_FAILURE = 11
UNKNOWN_FIELD_IN_DBA_SELLIST = 12
VIEW_NOT_FOUND = 13
OTHERS = 14.
Hope this helps.
Message was edited by: Imtiaz Ahmed -
How to lock transaction using function module or something like that
Hi, all
I'd like to know the way to lock transacitons using function module or something like that.
I know this would be possible if calling transaciton SM01, but I want to know other ways like calling function module (BAPI ) or method.
Thank you for your cooperation In advance.
Regards,
Hideki KozaiHi,
Try the following FM
BRF_NETWORK_GRAPHICS BRF: Network Graphics for BRF Objects
BRF_INITIALIZE_GRAPHICS_NGR BRF: Initialize Network Graphics
BRF_NETWORK_GRAPHICS_NGR BRF: Network Graphics: Start
BUSG SAP Business Graphics
GRAPH_2D Calling up the 2D business graphics
GRAPH_2D_MENUE DO NOT USE (use 'GRAPH_2D' and 'GRAPH_BUSG_MENU_SET')
GRAPH_3D Calling up the 3D presentation graphics
GRAPH_BUSG_COLOR_SET Definition of color pallets for business graphics
GRAPH_BUSG_MENU_SET Pushbutton menu (tool bar) for all BUSG modules
GRAPH_MATRIX Calling up SAP Business Graphics (2D, 3D and 4D)
GRAPH_MATRIX_2D Calling up the 2D graphics (user-friendly version)
GRAPH_MATRIX_3D Structure of 3D graphics (user-friendly version)
GRAPH_MATRIX_4D Calling up a 3D graphic (4th dimension stacked representation)
Regards, -
How to Send Internal table to SAP Spool using Function Modules or Methods?
Hi Experts,
How to Send Internal table to SAP Spool using Function Modules or Methods?
Thanks ,
KiranThis is my code.
I still get the no ABAP list data for the spool, even tho I can see it sp01?
REPORT Z_MAIL_PAYSLIP.
* Declaration Part *
tables: PERNR, PV000, T549Q, V_T514D, HRPY_RGDIR.
infotypes: 0000, 0001, 0105, 0655.
data: begin of ITAB occurs 0,
MTEXT(25) type C,
PERNR like PA0001-PERNR,
ABKRS like PA0001-ABKRS,
ENAME like PA0001-ENAME,
USRID_LONG like PA0105-USRID_LONG,
end of ITAB.
data: W_BEGDA like HRPY_RGDIR-FPBEG,
W_ENDDA like HRPY_RGDIR-FPEND.
data: RETURN like BAPIRETURN1 occurs 0 with header line.
data: P_INFO like PC407,
P_FORM like PC408 occurs 0 with header line.
data: P_IDX type I,
MY_MONTH type T549Q-PABRP,
STR_MY_MONTH(2) type C,
MY_YEAR type T549Q-PABRJ,
STR_MY_YEAR(4) type C,
CRLF(2) type x value '0D0A'.
data: W_CMONTH(10) type C.
data: TAB_LINES type I,
ATT_TYPE like SOODK-OBJTP.
data: begin of P_INDEX occurs 0,
INDEX type I,
end of P_INDEX.
constants: begin of F__LTYPE, "type of line
CMD like PC408-LTYPE value '/:', "command
TXT like PC408-LTYPE value 's', "textline
end of F__LTYPE.
constants: begin of F__CMD, "commands
NEWPAGE like PC408-LINDA value '',
end of F__CMD.
data: P_LIST like ABAPLIST occurs 1 with header line.
*data: OBJBIN like SOLISTI1 occurs 10 with header line,
data: OBJBIN like LVC_S_1022 occurs 10 with header line,
DOCDATA like SODOCCHGI1,
OBJTXT like SOLISTI1 occurs 10 with header line,
OBJPACK like SOPCKLSTI1 occurs 1 with header line,
RECLIST like SOMLRECI1 occurs 1 with header line,
OBJHEAD like SOLISTI1 occurs 1 with header line,
it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
gd_buffer type string,
l_no_of_bytes TYPE i,
l_pdf_spoolid LIKE tsp01-rqident,
l_jobname LIKE tbtcjob-jobname.
data: file_length type int4,
spool_id type rspoid,
line_cnt type i.
*-------------------------------------------------------------------* * INITIALIZATION *
OBJBIN = ' | '.
append OBJBIN.
OBJPACK-HEAD_START = 1.
data: S_ABKRS like PV000-ABKRS.
data: S_PABRP like T549Q-PABRP.
data: S_PABRJ like T549Q-PABRJ.
* SELECTION SCREEN *
selection-screen begin of block BL1.
parameters: PAY_VAR like BAPI7004-PAYSLIP_VARIANT default 'ESS_PAYSLIPS' obligatory.
selection-screen end of block BL1.
START-OF-SELECTION.
s_ABKRS = PNPXABKR.
S_PABRP = PNPPABRP.
s_pabrj = PNPPABRJ.
w_begda = PN-BEGDA.
w_endda = PN-ENDDA.
get pernr.
* "Check active employees
rp-provide-from-last p0000 space pn-begda pn-endda.
CHECK P0000-STAT2 IN PNPSTAT2.
* "Check Payslip Mail flag
rp-provide-from-last p0655 space pn-begda pn-endda.
CHECK P0655-ESSONLY = 'X'.
rp-provide-from-last p0001 space pn-begda pn-endda.
* "Find email address
RP-PROVIDE-FROM-LAST P0105 '0030' PN-BEGDA PN-ENDDA.
if p0105-usrid_LONG ne ''.
ITAB-PERNR = P0001-PERNR.
ITAB-ABKRS = P0001-ABKRS.
ITAB-ENAME = P0001-ENAME.
ITAB-USRID_LONG = P0105-USRID_LONG.
append itab.
clear itab.
endif.
"SY-UCOMM ='ONLI'
END-OF-SELECTION.
*------------------------------------------------------------------* start-of-selection.
write : / 'Payroll Area : ', S_ABKRS.
write : / 'Payroll Period/Year : ',STR_MY_MONTH,'-',STR_MY_YEAR. write : / 'System Date : ', SY-DATUM.
write : / 'System Time : ', SY-UZEIT.
write : / 'User Name : ', SY-UNAME.
write : / SY-ULINE.
sort ITAB by PERNR.
loop at ITAB.
clear : P_INFO, P_FORM, P_INDEX, P_LIST, OBJBIN, DOCDATA, OBJTXT, OBJPACK, RECLIST, TAB_LINES.
refresh : P_FORM, P_INDEX, P_LIST, OBJBIN, OBJTXT, OBJPACK, RECLIST.
* Retrieve Payroll results sequence number for this run
select single * from HRPY_RGDIR where PERNR eq ITAB-PERNR
and FPBEG ge W_BEGDA
and FPEND le W_ENDDA
and SRTZA eq 'A'.
* Produce payslip for those payroll results
if SY-SUBRC = 0.
call function 'GET_PAYSLIP'
EXPORTING
EMPLOYEE_NUMBER = ITAB-PERNR
SEQUENCE_NUMBER = HRPY_RGDIR-SEQNR
PAYSLIP_VARIANT = PAY_VAR
IMPORTING
RETURN = RETURN
P_INFO = P_INFO
TABLES
P_FORM = P_FORM.
check RETURN is initial.
* remove linetype from generated payslip
loop at p_form.
objbin = p_form-linda.
append objbin.
line_cnt = line_cnt + 1.
endloop.
file_length = line_cnt * 1022.
* create spool file of paylsip
CALL FUNCTION 'SLVC_TABLE_PS_TO_SPOOL'
EXPORTING
i_file_length = file_length
IMPORTING
e_spoolid = spool_id
TABLES
it_textdata = objbin.
IF sy-subrc EQ 0.
WRITE spool_id.
ENDIF.
DESCRIBE table objbin.
DATA PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = spool_id
NO_DIALOG = ' '
DST_DEVICE = 'MAIL'
* PDF_DESTINATION =
* IMPORTING
* PDF_BYTECOUNT = l_no_of_bytes
* PDF_SPOOLID = l_pdf_spoolid
* LIST_PAGECOUNT =
* BTC_JOBNAME =
* BTC_JOBCOUNT =
TABLES
PDF = pdf
EXCEPTIONS
ERR_NO_ABAP_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DESTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11
OTHERS = 12
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Download PDF file C Drive
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\itab_to_pdf.pdf'
filetype = 'BIN'
TABLES
data_tab = pdf.
* Transfer the 132-long strings to 255-long strings
* LOOP AT pdf.
* TRANSLATE pdf USING ' ~'.
* CONCATENATE gd_buffer pdf INTO gd_buffer.
* ENDLOOP.
* TRANSLATE gd_buffer USING '~ '.
* DO.
* it_mess_att = gd_buffer.
* APPEND it_mess_att.
* SHIFT gd_buffer LEFT BY 255 PLACES.
* IF gd_buffer IS INITIAL.
* EXIT.
* ENDIF.
* ENDDO.
OBJHEAD = 'Objhead'.
append OBJHEAD.
* preparing email subject
concatenate W_ENDDA(6)
' Payslip-'
ITAB-ENAME+0(28)
ITAB-PERNR+4(4) ')'
into DOCDATA-OBJ_DESCR.
DOCDATA-OBJ_NAME = 'Pay Slip'.
DOCDATA-OBJ_LANGU = SY-LANGU.
OBJTXT = 'Pay Slip.'.
append OBJTXT.
*prepare email lines
OBJTXT = DOCDATA-OBJ_DESCR.
append OBJTXT.
OBJTXT = 'Please find enclosed your current payslip.'.
append OBJTXT.
* Write Attachment(Main)
* 3 has been fixed because OBJTXT has fix three lines
read table OBJTXT index 3.
* DOCDATA-DOC_SIZE = ( 3 - 1 ) * 255 + strlen( OBJTXT ).
clear OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = 3.
OBJPACK-DOC_TYPE = 'RAW'.
append OBJPACK.
* Create Message Attachment
ATT_TYPE = 'PDF'.
describe table OBJBIN lines TAB_LINES.
read table OBJBIN index TAB_LINES.
* OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + strlen( OBJBIN ).
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = ATT_TYPE.
OBJPACK-OBJ_NAME = 'ATTACHMENT'.
OBJPACK-OBJ_DESCR = 'Payslip'.
append OBJPACK.
* Create receiver list refresh RECLIST.
clear RECLIST.
RECLIST-RECEIVER = itab-USRID_long.
translate RECLIST-RECEIVER to lower case.
RECLIST-REC_TYPE = 'U'.
append RECLIST.
* Send the document
*SO_NEW_DOCUMENT_ATT_SEND_API1
call function 'SO_DOCUMENT_SEND_API1'
exporting
DOCUMENT_DATA = DOCDATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
tables
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = pdf
CONTENTS_TXT = OBJTXT
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
RECEIVERS = RECLIST
exceptions
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
others = 8.
if SY-SUBRC NE 0.
ITAB-MTEXT = 'Message Not Sent to : '.
else.
ITAB-MTEXT = 'Message Sent to : '.
endif.
* else.
* ITAB-MTEXT = 'Message Not Sent to : '.
* endif.
else.
"SY-SUBRC Not = 0
ITAB-MTEXT = 'Payroll data not found : '.
endif.
"end of SY-SUBRC = 0.
modify ITAB.
endloop. "end loop at ITAB
sort ITAB by MTEXT PERNR.
loop at ITAB.
at new MTEXT.
uline.
write : / ITAB-MTEXT color 4 intensified on.
write : / 'Emp. Code' color 2 intensified on,
12 'Emp. Name' color 2 intensified on,
54 'Email ID' color 2 intensified on.
endat.
write : / ITAB-PERNR, 12 ITAB-ENAME, 54 ITAB-USRID_LONG.
endloop. -
ALV report ON WEB BROWSER USING FUNCTION MODULE
HI EXPERTS,
USING FUNCTION MODULE IN ALV ......HOW CAN WE DISPLAY ALV ON BROWSER(INTERNET).hi
good
go through these links, you ll find detail idea about displaying a ALV output in a browser.
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/5dc3e690-0201-0010-1ebf-b85b3bed962d
http://help.sap.com/saphelp_nw04/helpdata/en/3e/f496ef143a11d4b59f006094192fe3/content.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/77/3545415ea6f523e10000000a155106/frameset.htm
thanks
mrutyun^ -
Custom extractors using function modules
Hey all
Does anyone has a document regarding how to <b>Develop Custom extractors using function modules?Step by step method would be great</b>
Also document regarding <b>CTS in BW?</b>
Appreciate it
ThanksHi,
See here:
Generic Extractors
Generic data sources
Generic DS
/people/siegfried.szameitat/blog/2005/09/29/generic-extraction-via-function-module
Best regards,
Eugene -
Hi. i used Function module to change Characteristic values of a sales order
hi. i used Function module to change Characteristic values of a sales order..
but sales order's Characteristic values didn't change.
And the Function module doesn't occur any log message.
please tell me wrong code, and how to solve this problem.
if i have wrong method, what data can i pass to change the characteristic values
DATA: LT_E1CUVAL TYPE TABLE OF E1CUVAL.
DATA: WA_E1CUVAL TYPE E1CUVAL.
DATA: LS_CFG_HEAD LIKE CUXT_CUCFG_S,
LS_INSTANCES LIKE CUXT_CUINS_S,
LS_VALUES LIKE CUXT_CUVAL_S,
LS_E1CUCFG LIKE E1CUCFG,
LS_E1CUINS LIKE E1CUINS,
LS_E1CUVAL LIKE E1CUVAL,
LS_PROFILE LIKE E1CUCOM,
LS_VBAP LIKE VBAP,
L_CUOBJ LIKE INOB-CUOBJ,
L_ATINN LIKE CABN-ATINN.
DATA: LT_INSTANCES LIKE CUXT_CUINS_S OCCURS 0,
LT_PART_OF LIKE CUXT_CUPRT_S OCCURS 0,
LT_VALUES LIKE CUXT_CUVAL_S OCCURS 0,
LT_VAR_KEYS LIKE CUXT_CUVK_S OCCURS 0,
LT_KSML LIKE KSML OCCURS 0 WITH HEADER LINE,
BEGIN OF LT_CLINT OCCURS 0,
CLINT LIKE KSSK-CLINT,
END OF LT_CLINT.
DATA: LT_CUIB LIKE CUIB_CUOBJ_S OCCURS 0 WITH HEADER LINE.
DATA: E_ROOT_INSTANCE TYPE CUXT_INSTANCE_NO.
DATA: EV_ROOT_PERSIST_ID TYPE IBEXTINST_DATA-EXT_INST_ID.
DATA: EV_CFG_HAS_CHANGED TYPE XFELD.
DATA: EV_HANDLE_APPL_LOG TYPE BALLOGHNDL.
DATA: L_CUOBJ_NEW TYPE CUOBJ.
DATA: L_OWNER TYPE IBXX_BUSINESS_OBJECT.
REFRESH LT_E1CUVAL.
CLEAR LS_VBAP.
SELECT SINGLE CUOBJ INTO CORRESPONDING FIELDS OF LS_VBAP
FROM VBAP WHERE VBELN = I_VBELN
AND POSNR = I_POSNR.
IF SY-SUBRC <> 0.
RAISE INSTANCE_NOT_FOUND.
ENDIF.
REFRESH LT_CUIB. CLEAR LT_CUIB.
LT_CUIB-INSTANCE = LS_VBAP-CUOBJ.
APPEND LT_CUIB.
CALL FUNCTION 'CUCB_INITIALIZER'
EXPORTING
IT_INSTANCES = LT_CUIB[].
CALL FUNCTION 'CUXI_GET_SINGLE_CONFIGURATION'
EXPORTING
I_ROOT_INSTANCE = LS_VBAP-CUOBJ
IMPORTING
E_CFG_HEAD = LS_CFG_HEAD
ES_PROFILE = LS_PROFILE
ET_RETURN = ET_RETURN
TABLES
E_TAB_INSTANCES = LT_INSTANCES
E_TAB_PART_OF = LT_PART_OF
E_TAB_VALUES = LT_VALUES
E_TAB_VAR_KEYS = LT_VAR_KEYS
EXCEPTIONS
INVALID_INSTANCE = 1
NO_ROOT_INSTANCE = 2
INSTANCE_IS_A_CLASSIFICATION = 3
INTERNAL_ERROR = 4
NO_PROFILE_FOUND = 5
INVALID_DATA = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
CASE SY-SUBRC.
WHEN 1.
RAISE INSTANCE_NOT_FOUND.
WHEN 3.
RAISE INSTANCE_IS_A_CLASSIFICATION.
WHEN OTHERS.
RAISE INVALID_DATA.
ENDCASE.
ELSE.
LOOP AT LT_VALUES INTO LS_VALUES.
IF LS_VALUES-CHARC = 'SAP_MILLCA_PACKAGING'
OR LS_VALUES-CHARC = 'PD_CA_PACKING_DM'.
LS_VALUES-VALUE = '7100010'. "This is test data
MODIFY LT_VALUES FROM LS_VALUES.
ELSE.
DELETE LT_VALUES WHERE CHARC = LS_VALUES-CHARC.
ENDIF.
CLEAR LS_VALUES.
ENDLOOP.
ENDIF.
영업정보 특성 변경
CALL FUNCTION 'CUXI_SET_SINGLE_CONFIGURATION'
EXPORTING
I_CFG_HEADER = LS_CFG_HEAD
I_ROOT_INSTANCE = LS_VBAP-CUOBJ
I_PLANT =
I_STRUCTURE_EXPLOSION_DATE =
I_STRUCTURE_EXPLOSION_APPL_ID =
I_LOGSYS =
IS_PROFILE = LS_PROFILE
IV_ONLY_SINGLE_LEVEL =
IV_HANDLE_APPL_LOG =
IV_OBJECT_APPL_LOG = 'CIF'
IV_SUBOBJECT_APPL_LOG = 'T_CNFG'
IMPORTING
E_ROOT_INSTANCE = E_ROOT_INSTANCE
EV_ROOT_PERSIST_ID = EV_ROOT_PERSIST_ID
EV_CFG_HAS_CHANGED = EV_CFG_HAS_CHANGED
EV_HANDLE_APPL_LOG = EV_HANDLE_APPL_LOG
ET_RETURN = ET_RETURN
TABLES
I_TAB_INSTANCES = LT_INSTANCES
I_TAB_PART_OF = LT_PART_OF
I_TAB_VALUES = LT_VALUES
I_TAB_VAR_KEYS = LT_VAR_KEYS
I_TAB_BLOB =
EXCEPTIONS
NO_CONFIGURATION_DATA = 1
NO_ROOT_INSTANCE = 2
INVALID_INSTANCE = 3
INSTANCE_IS_A_CLASSIFICATION = 4
INTERNAL_ERROR = 5
NO_PROFILE_FOUND = 6
INVALID_DATA = 7
OTHERS = 8
IF SY-SUBRC <> 0.
CASE SY-SUBRC.
WHEN 1.
RAISE NO_CONFIGURATION_DATA.
WHEN 3.
RAISE NO_ROOT_INSTANCE.
WHEN 3.
RAISE INVALID_INSTANCE .
WHEN 3.
RAISE INSTANCE_IS_A_CLASSIFICATION.
WHEN 3.
RAISE INTERNAL_ERROR.
WHEN OTHERS.
RAISE INVALID_DATA.
ENDCASE.
ENDIF.
COMMIT WORK.
save configuration with next commit
CLEAR: LS_INSTANCES.
READ TABLE LT_INSTANCES INTO LS_INSTANCES INDEX 1.
L_OWNER-OBJECT_TYPE = LS_INSTANCES-OBJ_TYPE.
L_OWNER-OBJECT_TYPE = 'PVS_POSVAR'.
L_OWNER-OBJECT_KEY = LS_INSTANCES-OBJ_KEY.
CALL FUNCTION 'CUCB_CONFIGURATION_TO_DB'
EXPORTING
ROOT_INSTANCE = LS_VBAP-CUOBJ
ROOT_OBJECT = L_OWNER
IMPORTING
NEW_INSTANCE = L_CUOBJ_NEW
EXCEPTIONS
INVALID_INSTANCE = 1
INVALID_ROOT_INSTANCE = 2
NO_CHANGES = 3
OTHERS = 4.
IF SY-SUBRC > 1 AND SY-SUBRC <> 3.
CLEAR LS_VBAP-CUOBJ.
RAISE INTERNAL_ERROR.
ELSEIF SY-SUBRC = 1.
LS_VBAP-CUOBJ = L_CUOBJ_NEW.
ENDIF.
What's wrong?
help me to solve this problem.
Thanks a lot.<b>SD_SALES_DOCUMENT_READ</b> Reads sales document header and business data: tables VBAK, VBKD and VBPA (Sold-to (AG), Payer (RG) and Ship-to (WE) parties)
<b>SD_SALES_DOCUMENT_READ_POS</b> Reads sales document header and item material: tables VBAK, VBAP-MATNR
<b>SD_DOCUMENT_PARTNER_READ</b> partner information including address. Calls SD_PARTNER_READ
<b>SD_PARTNER_READ</b> all the partners information and addresses
<b>SD_DETERMINE_CONTRACT_TYPE</b>
In: at least VBAK-VBELN
Exceptions: NO CONTRACT | SERVICE_CONTRACT | QUANTITY_CONTRACT
<b>SD_SALES_DOCUMENT_COPY</b>
<b>RV_ORDER_FLOW_INFORMATION</b> Reads sales document flow of sales document after delivery and billing
SD_SALES_DOCUMENT_SAVE create Sales Doc from the copied document
SD_SALES_DOCUMENT_ENQUEUE to dequeue use DEQUEUE_EVVBAKE
RV_DELIVERY_PRINT_VIEW Data provision for delivery note printing
SD_PACKING_PRINT_VIEW
SD_DELIVERY_VIEW Data collection for printing
called from RV_DELIVERY_PRINT_VIEW, SD_PACKING_PRINT_VIEW
RV_BILLING_PRINT_VIEW Data Provision for Billing Document Print
regards
vinod -
Error occurred while loading Generic extraction using Function module
Hi all
I'm trying to do INIT for Generic Extractor using Function module, but i'm getting error as "Error occurred in the source system"
Error message from the source system
Diagnosis
An error occurred in the source system.
System Response
Caller 09 contains an error message.
Further analysis:
The error occurred in Extractor .
Refer to the error message.
Procedure
How you remove the error depends on the error message.
Note
If the source system is a Client Workstation, then it is possible that the file that you wanted to load was being edited at the time of the data request. Make sure that the file is in the specified directory, that it is not being processed at the moment, and restart the request.
Job terminated in source system --> Request set to red
Message no. RSM078
Can u help plz....Hi Vishnu
This are the Job log details i found in source system...Can u tell what whould be the problem?
Message
Job started
Step 001 started (program SBIE0001, variant &0000000002861, user ID
Asynchronous transmission of info IDoc 2 in task 0001 (0 parallel tasks)
DATASOURCE = ZYFI102
RLOGSYS =
REQUNR = REQU_D9Y4CZDQULRIHRRVU33KOLQZO
UPDMODE = D
LANGUAGES = *
Current Values for Selected Profile Parameters *
abap/heap_area_nondia......... 0 *
abap/heap_area_total.......... 10737418240 *
abap/heaplimit................ 40000000 *
zcsa/installed_languages...... DE *
zcsa/system_language.......... E *
ztta/max_memreq_MB............ 2047 *
ztta/roll_area................ 3000000 *
ztta/roll_extension........... 2000000000 *
No authorization for Acct type D
Job cancelled after system exception ERROR_MESSAGE
Thanks in advance
Edited by: MohanDP on Feb 25, 2011 11:58 AM
Edited by: MohanDP on Feb 25, 2011 12:01 PM
Maybe you are looking for
-
Ical birthday calendar wrong dates
Hello, I have an issue with iCal regarding the birthday calendar. It works pretty fine syncing with address book, but it ads the birthday obviously twice. The birthday itself and the day before the birthday. When refering the URL in iCal it directs m
-
The noise that it is making, sounds like its reading the disc and then makes eject noises and it repeats the process twice and stop. But it won't let me insert a disk in, is it broken or jammed. this problem just started two days ago when I was inser
-
[SOLVED] No sound through usb soundcard in Google Chromium
Hi there, Before switching to Arch I had used my external usb soundcard in Ubuntu and Kubuntu which worked almost flawlessly except for no sound through Google Chromium in Kubuntu. I thought this may have been isolated when switching KDE on Arch but
-
Trying to set up yahoo account on ipad
I am trying to set up my yahoo account on ipad so that I can access my emails, in the icloud page where you can add an account I choose yahoo from the list of providers and then I am asked to sign in, yet all the language on the sign in page is in ch
-
does anyone know how to insert a null value? For example: insert into tbl_table (col1,col2) values (null,null) thanks.