What to write to filter in start-routine.
Hi Experts.
What do I write in the Start-routine (in version 7) to filter out lines where a certain field is empty ( initial).
Thanks !
Dear Ingrid,
Please refer to the following help.sap.com link:
http://help.sap.com/saphelp_nw70/helpdata/en/43/c3963dfbde4dede10000000a422035/content.htm
and below is the example from the link:
METHOD start_routine.
*=== Segments ===
FIELD-SYMBOLS:
<SOURCE_FIELDS> TYPE tys_SC_1.
$$ begin of routine - insert your code only below this line -
DELETE SOURCE_PACKAGE where UMHAB = 0 and UMSOL = 0
$$ end of routine - insert your code only before this line -
ENDMETHOD. "start_routine
Hope it help you, assign points if helpful.
Best Regards,
Ankit Agrawal
Similar Messages
-
What is the logic behind the start routine
Dear One's,
Kindly take a moment and explain the logic behind this start routine written in update rules of ODS.
PROGRAM UPDATE_ROUTINE.
$$ begin of global - insert your declaration only below this line -
$$ end of global - insert your declaration only before this line -
The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CST_T07_O006.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
$$ begin of routine - insert your code only below this line -
fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
to make monitor entries.
DATA: ITAB_/BIC/AT07_O00600 TYPE SORTED TABLE OF /BIC/AT07_O00600
WITH HEADER LINE
WITH UNIQUE DEFAULT KEY INITIAL SIZE 0,
DATA_PACKAGE_NEW TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
sort the datapackage based on lead number and lead program definition
SORT DATA_PACKAGE BY /BIC/TLDNR /BIC/TLDPRGFTE.
from the resources ODS read all lead values based on the values those
SELECT * FROM /BIC/AT07_O00600 INTO TABLE
ITAB_/BIC/AT07_O00600
FOR ALL ENTRIES IN DATA_PACKAGE
WHERE /BIC/TLDNR = DATA_PACKAGE-/BIC/TLDNR.
FIELD-SYMBOLS: <LS_DATA_PACKAGE> TYPE DATA_PACKAGE_STRUCTURE.
FIELD-SYMBOLS: <LS_/BIC/AT07_O00600> TYPE /BIC/AT07_O00600.
loop at internal table of ODS to check if there are lead program defin
from the source which mean the values of lead program definition in OD
values of lead program definition in datapackage.
LOOP AT ITAB_/BIC/AT07_O00600 ASSIGNING <LS_/bic/at07_o00600>.
READ TABLE DATA_PACKAGE
TRANSPORTING NO FIELDS
WITH KEY
/BIC/TLDNR = <LS_/bic/at07_o00600>-/BIC/TLDNR
/BIC/TLDPRGFTE = <LS_/bic/at07_o00600>-/BIC/TLDPRGFTE
BINARY SEARCH.
IF SY-SUBRC <> 0.
new lines with zero values are inserted because there are no correspon
DATA_PACKAGE_NEW-/BIC/TLDNR = <LS_/BIC/AT07_O00600>-/BIC/TLDNR.
DATA_PACKAGE_NEW-/BIC/TLDPRGFTE = <LS_/BIC/AT07_O00600>-/BIC/TLDPRGFTE.
DATA_PACKAGE_NEW-/BIC/TLDFTE = 0.
APPEND DATA_PACKAGE_NEW.
ENDIF.
ENDLOOP.
append the new records which are created for the leads in the datapack
APPEND LINES OF DATA_PACKAGE_NEW TO DATA_PACKAGE.
reset the sorting of the datapackage back to its original state
SORT DATA_PACKAGE.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
$$ end of routine - insert your code only before this line -
ENDFORM.
Thanks in advancehi,
it's retrieve data from table /BIC/AT07_O00600
and add to data package, so your records will be more than from source
hope this helps. -
Start routine in DSO Self transformations
Hi SCN,
I need to write start routine to fill one of my target feild.
Here my info object is ZCust and attribute zpur_grp
My DSO have 0customer and zpur_grp.
Am creating self transformations for my dso and need to fill zpur_grp from zcust if dso-zpur_grp is blank.
condition is dso-0customer = info object-customer.
Am new to abap code part and confused about specifying fields and tables(/bic/).
Need suggestions to write sample format code.
Thanks in advance.
ChandraHi Chandra,
U need to write look-up code.
Below s sample code. it might be help you.
Declare Internal Table Like follow:
TYPES: BEGIN OF TY_CUST,
ZCust TYPE /BIC/ ZCust ,
zpur_grp TYPE /BIC/ zpur_grp
END OF TY_CUST.
select value for internal table.
SELECT /BIC/ ZCust /BIC/zpur_grp
FROM /BIC/PZCust
INTO TABLE IT_CUST
FOR ALL ENTRIES IN SOURCE_PACKAGE
WHERE /BIC/ZCust = SOURCE_PACKAGE-/BIC/0customer
AND OBJVERS = 'A'.
Then write Lookup code in start routine.
LOOP AT SOURCE_PACKAGE ASSIGNING <SOURCE_FIELDS>.
clear : WA_CUST_DBDIV.
* Read internal table for customer
READ TABLE IT_CUST
WITH KEY ZCust = <SOURCE_FIELDS>-/BIC/0custome
INTO WA_CUST_DBDIV
BINARY SEARCH.
*Populate the corresponding Customer and DB Division in RESULT_PACKAGE
IF SY-SUBRC = 0.
<SOURCE_FIELDS>-/BIC/0custome = WA_CUST_DBDIV-ZCust.
<SOURCE_FIELDS>-/BIC/zpur_grp = WA_CUST_DBDIV-zpur_grp.
ENDLOOP.
Hope it 'll help you.
Regards,
Mukesh -
Hi
How to write a lookup in Start Routine to calling customer table. we are maintains values in custom table.
i am
Regds,DSHi,
You simply need to create an internal table of type customer table in start routine global declaration part.
After that you will have to populate that internal table using select query in start routine. e.g.
SELECT *
FROM XYZ
into table it_xyz
where key1 = 'AB'. etc.
In this case XYZ is customer table and it_xyz is internal table. Once values are available in internal table you can use them in field routine or start routine as per the need.
Regards,
Durgesh. -
Start routine to filter the duplicate records
Dear Experts
I have two questions regarding the start routine.
1) I have a characteristic InfoObject with transactional InfoSource. Often the 'duplicate records' error happens during the data loading. I'm trying to put a start routine in the update rule to filter out the duplicate records.
After searching the SDN forum and SAPHelp, I use the code as:
DELETE ADJACENT DUPLICATES FROM DATA_PACKAGE COMPARING KEY1 KEY2 KEY3.
In my case, the InfoObject has 3 keys: SOURSYSTEM, /BIC/InfoObjectname, OBJVERS. My code is:
DELETE ADJACENT DUPLICATES FROM DATA_PACKAGE COMPARING SOURSYSTEM /BIC/InfoObjectname OBJVERS.
When checking the code I got message: 'E:No component exists with the name "OBJVERS".' So I only included the first 2 keys. But the routine does not work. The duplicate error is still happening. What is missing in this start routine?
2) Generally, for a start routine, do I really need to include the data declaration, ITAB or WA, SELECT statement etc.?
Do I have to use the statement below or just simply one line?
LOOP AT DATA_PACKAGE.
IF DATA_PACKAGE.....
ENDIF.
ENDLOOP.
Thanks for your help in advance, JessicaHello Jessica,
if it won't be possible for you to get unique data from the very beginning, there is still another way to manage this problem in a start routine.
Sort ... and delete adjacent ... must remain. Further on build up an internal table of type data_package, but defined with STATICS instead of DATA. This i-tab stays alive for all data-packages of one load. Fill it with the data of the transferred data-packages, and delete from every new data-package all records which already are in the statics i-tab. Alternatively you could do the same with a Z-(or Y-)database-table instead of the statics i-tab.
It will probably cost some performance, but better slow than wrong data.
Regards,
Ernst -
How to write a start routine in the trasnformations ?
Hi Experts,
I am working on BI 7, As I want to write a start routine in transformations of 0FIGL_O02 DSO, to allow the GL accounts with cost center data. Already there is a delete statement please find.
*DELETE SOURCE_PACKAGE where BAL_FLAG = 'X'. I had made comment to allow the G/L accounts. since I have some GL Accounts which does'nt have the cost center data, so in this case I have to write a ABAP code to allow this G/L accounts with cost center data.
So Let me know if anyone can help me how to write the ABAP code in the start routine.
Thanks
sekharHi,
Yopu can write the below lines of code adn try
SORT source_package BY Receive nr Type ASCENDING.
DELETE ADJACENT DUPLICATES FROM source_package COMPARING Receive nr Type.
But you should make sure which record of the either rows need to deleted
i.e in
F9001;LU;J001;662;
F9001;LU;J002;662
You need to decide to eliminate 1st or 2nd one.(depends on your requirement) -
How to write the start routine in the transformations ?
Hi Experts,
I am working on BI 7, As I want to write a start routine in transformations of 0FIGL_O02 DSO, to allow the GL accounts with cost center data. Already there is a delete statement please find.
*DELETE SOURCE_PACKAGE where BAL_FLAG = 'X'. I had made comment to allow the G/L accounts. since I have some GL Accounts which does'nt have the cost center data, so in this case I have to write a ABAP code to allow this G/L accounts with cost center data.
So Let me know if anyone can help me how to write the ABAP code in the start routine.
Thanks
sekharHi Experts,
I am working on BI 7, As I want to write a start routine in transformations of 0FIGL_O02 DSO, to allow the GL accounts with cost center data. Already there is a delete statement please find.
*DELETE SOURCE_PACKAGE where BAL_FLAG = 'X'. I had made comment to allow the G/L accounts. since I have some GL Accounts which does'nt have the cost center data, so in this case I have to write a ABAP code to allow this G/L accounts with cost center data.
So Let me know if anyone can help me how to write the ABAP code in the start routine.
Thanks
sekhar -
Dear One's -
I have a scenario to be implements in my ODS update rules,
The code has to check if all available LEAD PROGRAM DEFINITION of particular LEAD NUMBER (as available in ODS) are also present in the corresponding data_package or not.
If it does not find particular LEAD PROGRAM DEFINITION in the data_package (but it is there is ODS) then it has to creat one record in data_package for that LEAD NUMBER and LEAD PROGRAM DEFINITION making all Key figures as "zero". It then overwrite existing value in ODs with zero value.
This start routine has to written because the deleted record in source system is not transfered to BW system.
Can any one kindly take a moment in writing the code.
Thank you so much in advance,
RajDear Edwin,
We are using Generic Data Source and the situation is we must write the start routine because there was already a routine written under other Invoice Moment ODS that is happening successfully. But this is new requirement for Resource ODS.
I have written a similar routine to Resource ODS like Invoice Moment ODS but this not giving expected result.
So, can you kindly write a routine in your own logic?
We have given with Lead Number, Lead Program definition as characteristics and key fingure as Lead Estimated Resources that's all only 3 infoobjects were used.
Thanks for your concern and extend the same in writing the code. -
what is start routine?
Dear Viswnadha,
You have the option of creating a start routine in the transfer rules maintenance screen. This start routine is run for each data package after the data has been written to the PSA and before the transfer rules have been executed.
Please refer to link:
[http://help.sap.com/saphelp_nw04/helpdata/en/b3/0ef3e8396111d5b2e80050da4c74dc/content.htm]
Hope the above can be useful for you.
Best Regards,
Tim
SAP Business One Forums Team -
Filter data in transfer rules using start routine
Hi all!
I am an absolute newbie here, but I have a question regarding start routines and I noticed many questions get solved around here. My situation is the following: I have to create a start routine where the data to be transferred is filtered on an attribute "DESTINAT" in info object "0BILL_TYPE". DESTINAT can be 'M' or 'D' and depending on that letter, data must flow to a separate ODS.
Well,I came up with the following:
somewhere in my start routing I guess I'll have to put:
loop at data_pak.
DELETE DATAPAK Where DESTINAT = 'D'
endloop.
When I place this in my start routine of my transfer rules leading to the ODS where data must be of DESTINAT type 'M', will this do the trick?
I want to put the following code in the transfer rules leading to my other ODS, where data must be of type DESTINAT = 'D':
loop at data_pak.
DELETE DATAPAK Where DESTINAT = 'M'
endloop.
I'm sorry that this is a very basic question, but like I said: I'm a newbie in SAP...hi Joris,
have a lok at the foll help docs.:
http://help.sap.com/saphelp_nw04/helpdata/en/b3/0ef3e8396111d5b2e80050da4c74dc/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/21/894eeee0b911d4b2d90050da4c74dc/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/80/1a62bfe07211d2acb80000e829fbfe/content.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/e3/732c42be6fde2ce10000000a1550b0/content.htm
cheers
shameem -
Start routine and update rules
Hi,
What is accessed first:-
Start Routines or Update Rules?
What is the use of global variables in start routine?
Please reply.
Thanks.Hi......
You have different types of Routines in BW .
1) Start Routine in Transfer Rules
2) Transfer Routine in Transfer Rules.
3)Start Routine in Update Rules
4)Update Routine in Update Rules.
The routines that you write in transfer rules are applicable to all the Data targets that get the data from that particular Infosource, when you are going to write some code in Transfer rules, you have to understand that you are going to manupilate the data that is going to get into BW .
If you are going to write in Update Rules , then that logic is going to apply only for that particular Data target .
Eg : Let suppose I have a Flat file that gets data from 3 countries, US, Canada and Mexico.
Now I have prepared the data source for the same . But I dont want to have the data of Mexico in to BW itself.
So I will write a Start routine at TR to eliminate the data of Mexico.
My Next step is I want the data of US into one ODS and Canada data in to another ODS.
For this I handle the dataflow at Start routine in Update rules, to eliminate Canada data for US ODS and Vice Versa.
Global variables in Start routine
You can have global variables, internal tables populated by the
startup routine. This data will be available to the field
routines. Create yourself a start routine, declare some
variables in the global section, and then create a field
routine. You will be able to use the globally declared objects
in the field routine
Please check below help link for routines in sap netweaver 2004s
http://help.sap.com/saphelp_sem60/helpdata/en/e3/732c42be6fde2ce10000000a1550b0/frameset.htm
How to guide "How to transformations routines".Please check the below link:
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/dc1d9990-0201-0010-16aa-db3c4eb8b642
start routine in transfer rules
Look up to load master data
excluding
Start Routine in Transfer Rules
Sample code in Update Rule to restrict data selection?
Append Datapak - transfer start routine
Excluding Blank field in Infopackage Filter
Trans Routine ABAP help ..
transfer routine
Date key figure: Convert DATS format to DEC format
Date Conversion in Flat File
Transfer Routine ABAP
conversion exit
Date Conversion
Problem with conversion char to numc in transference rules
conversion routine..?
update routine
How to call a function in Update Rules to reverse a key figure sign
Need Sample Code for Update Rules
Date calculation
Difference between data in PSA and Data in Infocube
No RETURNCODE <> 0 allowed in update routines in transfer mode
the diffrerece between DEC and (yyyymmdd) 8 char in Time defination
Access master data in update rules
Date key figure: Convert DATS format to DEC format
start routine in update rules
Is it possible to read a third ODS in update rules between two ODS?
update rule coding while loading data from ODS to CUBE
Start Routine in Update Rules to populate additional fields from ODS
Coding in Update Rules accessing a Z-Table
Start routine
Hope this helps you..........
Regards,
Debjani.........
Edited by: Debjani Mukherjee on Oct 1, 2008 4:58 PM -
Start Routine in Transformations
Hi,
For my reporting purpose i need to Transfer data from Cube to DSO
I need a start routine for the following requirment when transfering data from Cube to DSO
The Key fields in DSO are Location & Emp_ID and Date fields are ZAP_DTE (DATS)
CUBE-->DSO
While doing the transfer...i need to compare Emp and his ZAP_DTE AND need to transfer only if AP_DTE for that EMP is greater than the exisisting one else ignore the record
As i new to BW please update with the routine
ThanksHi Shambhu
We usually write out code in the section:
$$ begin of routine - insert your code only below this line -
What is the difference between writing the code in
$$ begin of 2nd part global - insert your code only below this line *
and
$$ begin of routine - insert your code only below this line - ?
Kind regards
Erik -
I want to replace all '# ' values showing up in a report with space. For this I plan to write a Start Routine in the Update Rules which should scan all the data coming in into the cube and replace all null or '' with space.
What is the best way to write this routine. It should check all data in all the fields of the data load coming in.
ThanksHi,
The space is shown as # in the BW Reports, to confirm check the value in the cube for this field, so
you need to change that to some other character like X or Y or explain your end users that SAP
designates a space as # and it will be displayed that way in the reports.
Regards,
Raj -
Declaration in start routine in transformations
Hi guru's
What is the difference between first and second global declaration in the start routine of a transformation?
First: $$ begin of global - insert your declaration only below this line -
Second: $$ begin of 2nd part global - insert your code only below this line *
Kind regards
ErikHi Shambhu
We usually write out code in the section:
$$ begin of routine - insert your code only below this line -
What is the difference between writing the code in
$$ begin of 2nd part global - insert your code only below this line *
and
$$ begin of routine - insert your code only below this line - ?
Kind regards
Erik -
ABAP assistance - start routine logic in update rule
I have used an existing update rule and have based my logic around the same. The purpose of the rule is to look up customer master data and get a subset of customer numbers from the transaction records so that the values for customer number from the transactional data will not be updated if it does not match with existing master data customer numbers.
The loads are full and we drop the data before we load.
I have listed the logic below (the number at the front is to be considered as the line number) and a list of open questions that I have thereafter:
Start routine logic:
1 DATA: l_index LIKE sy-tabix.
2 DATA: BEGIN OF ls_customer,
3 customer TYPE /BI0/OICUSTOMER,
4 objver TYPE RSOBJVERS,
5 END OF ls_customer,
6 lt_customer LIKE TABLE OF ls_customer.
7 REFRESH: lt_customer.
8 LOOP AT DATA_PACKAGE.
all customers from data package
9 ls_customer-custno = DATA_PACKAGE-custid.
10 ls_customer-objver = 'A'
11 APPEND ls_customer TO lt_customer.
12 ENDLOOP.
12 SORT lt_customer.
13 DELETE ADJACENT DUPLICATES FROM lt_customer.
14 IF NOT lt_customer[] IS INITIAL.
15 SELECT /BI0/OICUSTOMER RSOBJVERS
16 FROM /BI0/PCUSTOMER
17 INTO CORRESPONDING FIELDS OF TABLE lt_customer
18 FOR ALL ENTRIES IN lt_customer
19 WHERE ls_customer-custno = DATA_PACKAGE-custid
20 AND ls_customer-objver = 'A'
21 SORT lt_customer BY customer ASCENDING
22 ENDIF.
Questions
Line
1 - what is the purpose of this line? What is it that is being declared
2 - in some code I have seen this line with OCCURS 0 at the end what does this mean with and without the term?
4 - I am using the Data Element name is this correct or should I use the field name?
3 - 5 here I declare an internal structure/table is that correct?
6 - here I declare a work area based on the internal table is that correct?
7 - What would happen if I avoided using the REFRESH statement?
8 - 12 - Is this syntactically correct, I am trying to get a set of data which is the customer numbers which match the master data customers and the master data record is án active version and than appendíng to the work area?
13 - My understanding is this will reduce the number of records in the work area is this correct and needed?
14 - 22 I am trying to identify my required set of data but feel I am repeating myself, could someone advise?
Finally what logic would I actually need to write in the key figure object, could I use something like:
Result = lt_customer.
Thanks
Edited by: Niten Shah on Jun 30, 2008 8:06 PM1. This line is not required
2. OCCURS 0 is the OLD way of defining an internal table with that structure. As it is, it just defines a flat structure.
3. Data element is usually best
3-5 Yes
6. No. Here you are declaring a table of the type of the flat structure. Just as the ABAP says!
7. Nothing. But by putting this in, you ensure that you know the state of the table (empty) before you start looping through the data package
8-12. You can tell if it is syntactically correct by pressing Ctrl-F2 when in the editor. Looks ok.
13. Ensures your list of customers contains no duplicated. The code up to this point is building a list of all the unique customers in the data package.
14-22. Goes to the database and brings back ONLY those customers which are found in the master data. Looks ok.
This is a start routine (that's why you've got a data package). You don't use result. You should update the datapackage. But this you haven't done. Double click on the table name /BIC/PCUSTOMER to get the correct field names.
So you have to loop through the data package again, and check if the customer in the datapackage is lt_customer. If it is, fine, otherwise you blank it and report an error, or set an error message or whatever.
I wouldn't do it like this. I'd do something like this:
STATICS: st_customer TYPE HASHED TABLE OF TYPE /bi0/oicustomer
WITH UNIQUE KEY TABLE_LINE.
* st_customer retains its value between calls, so only populate if empty
* In one run of the infopackage, this will mean you do only one read of
* the master data, so very efficient.
IF st_customer IS INITIAL.
SELECT customer FROM /BI0/PCUSTOMER
INTO TABLE st_customer
WHERE objvers EQ 'A'. " Only active values
ENDIF.
* Go through data package
LOOP AT DATA_PACKAGE.
* Check whether the customer exists.
READ TABLE st_customer TRANSPORTING NO FIELDS
WITH TABLE KEY table_line = DATA_PACKAGE-custid.
CHECK sy-subrc IS NOT INITIAL.
* If you get here, the customer isn't valid. So I'm just setting it blank
CLEAR DATA_PACKAGE-custid.
MODIFY DATA_PACKAGE. " Updates the datapackage record
ENDLOOP.
Even this is not fully optimised, but it's not bad.
I strongly suggest that you get yourself sent on the basic ABAP programming course if you're going to do a lot of this. Otherwise, read the ABAP documentation in the help.sap.com, and, from the editor, get the cursor on each ABAP keyword and press F1 to read the ABAP help.
matt
Maybe you are looking for
-
How do I share my iTunes library with other users on my iMac computer?
I have a relatively new iMac. All users have iTunes but the iTunes library is empty on users other than me. How do I allow my library to be shared but retain privacy on other applications and files?
-
i need to use imovie for a project and i tried to open it but it says i need version 7.6.0 or later, so i went to software updates and there are no updates for my computer. Any suggestions on what to do?! thanks, lauren
-
How to change location in iMessage?
How To change locations in iMessage?
-
How to see all of TitledBorder?
I've got a JPanel with a TitledBorder, but the contents of the panel are narrower than the title in the border and the title gets truncated. I note that the "minimum width" of the JPanel is set to the "minimum width" of the TitledBorder, which the do
-
Secure startup home web page not loading in FF 17.0.1
Have https://www.google.com/ set as home page. What I get: Go to a website What I do: click Bookmarks>Google url link Result: https://www.google.com Go to a website does result in Google home page loading, but it appears to be loaded locally, not via