Professional Documents
Culture Documents
LSMW PO PDF
LSMW PO PDF
This blog shall explain how to load long text with LSMW direct input method.
It does not really matter if the long text belongs to material master or vendor master,
customer master or even to transactional data like contracts or bill of materials.
Long text to any object is stored in the SAP's long text tables STXH (header) and STXL.
(lines)
Most objects do not have any indicator that tells about existing long text, It is just a piece
of code that is executed when you go to the text screens and retrieves the text from STXH
and STXL table if present. Hence inserting text with the correct key into these tables will
automatically make this text available when you e.g. go MM02 Material master change
transaction into the purchase order text view.
Our business case here is to add purchase order long text to material masters that got
migrated earlier.
The source file is prepared in Excel and has just 3 columns: old material number, purchase
order long text and line number
I do not explain any single LSMW step in this blog in deep detail as I described it in in my
other blogs:
http://scn.sap.com/community/erp/logistics-mm/blog/2012/12/27/lsmw-material-master-by-
bapi-method--part-1
http://scn.sap.com/community/erp/logistics-mm/blog/2012/12/27/lsmw-material-master-by-
bapi-method--part-2
So i am just focusing here on the difference to these other blogs and the specifics with the
direct input method and how do deal with long text.
I am continuing in my existing project SCN, with subproject MATERIAL and create a new
object called MM_PO_TEXT
Then move the cursor into the Object field and use F4 to find the object for Long texts
The Program name and the program type will then be defaulted by SAP itself.
The icon with the glasses allows you to display the source code of this program (I have used
twice in lifetime, but only to answer a question in the forum, I never needed it for myself,
especially not to execute this LSMW method)
My source file is just a flat file without deeper structure, so only one entry in this step
needed. I name my structure LONGTEXT
Now I am adding the fields to this structure. As I have only a few fields I am doing it using
the table icon.
Defining the fields in the same sequence as they appear in my source file
Define them as character fields, with a field length like it was in the legacy system,
The length of the old material number does not matter in this case as the material number
itself was never that long in the legacy system.
The attentive reader will see that I just entered 2 fields in the source field definitions while
my source file has 3 fields.
Reason: I am lazy. To be honest I do not make use of the content of the line number field in
this upload program.
I only require this line number in the Excel file as an objective evidence for the sequence of
lines in case there are multiple lines.
The target structure is automatically proposed based on the chosen import method in LSMW
step 1.
To keep my program flexible for any language that need to be loaded (per source file one
language)
Just double click the light blue field with the name __GLOBAL_DATA__ to get into the code
editor
PSPRAS is my field name and with the LIKE MAKT-SPRAS I tell the program that it shall be
like the language field from MAKT table.
W_SKIP TYPE i. this is an integer number field that I want to use to count the records I
cannot convert
and
W_SKIP_FLAG type C VALUE ' ' which describes a character field with no initial content. I
will use this to trigger the event to skip the transaction.
In the header structure I assign a constant "MATERIAL" to the object field, and a constant
"BEST" to the ID field
(You can obtain these values if you go into the text view of existing data and click there the
text editor icon. After you are taken to the text editor chose from menu Goto > header and
you will see the key fields and its content)
The NAME field shall get the new material number. But my source file has only the old
material number.
Hence I need to add coding to determine the material number based on the old number.
As you know, the old material number is stored in the basic data view of material master. Go
into the material master Press F1 in that field and then the icon for technical field help and
you can see the field name and the table.
With this information we can create the coding to get the material number.
First I add a data declaration to define a workarea. which will receive the found data.I could
have done this already in the __GLOBAL_DATA__ section, but it can be done everywhere in
the source.
Then a select statement to find a record in table MARA that matches with my old material
number.
If a record is found, then the material number is moved to the target field /SAPDMC/LTXTH-
NAME
If not found, then I write a message into the conversion log to know which old material
number could not be converted. And I move a Y (for YES) into my help field w_skip_flag:
This is as well for safety reasons. The direct input will not check if your material exists. It will
just post what you deliver, regardless if correct or nonsense. So you can create a lot of ghost
texts if you do not care enough. Hence you need to control it yourself.
/SAPDMC/LTXTH-NAME = longtext-old_number.
else.
w_skip_flag = 'Y'.
endif.
Next is the language field which needs some attention. You remember, I had defined a
selection parameter for the language to be flexible and to use the same LSMW object for
whatever language that will be loaded.
I start again with a data declaration for a workarea for the language, because I need to
check that I do not enter nonsense into the language parameter field.
If the entered language cannot be found, then I skip the record from being loaded. Which
is then the case for all records as the language parameter is only entered once. And in that
case I write as well a small message into the conversion log.
This little change controls that the header record is only written when the material number
changes (material number is the only variable in the header structure)
This means I write just one header record while I write several rows.
In the structure for the row I only assign my long text line. SAP is processing the source file
from the first record in sequence to the last record, thus I do not need the line number from
my source file.
Save the Excel source file as Unicode Text. Then specify this text file in step 7.
As there is only one source structure and one source file, SAP does the proposal and you
only need to click save
SAP generates the read program, you can execute it for the entire file or just for a selection
of records.
SAP will give you a summary of read records and read transactions.
Compare it with your source file to be certain that everything was read.
Important step to check that you data was correct read and that it was transferred to the
fields defined in step 3.
In the conversion step you can execute the conversion for all records that where read from
your source file, or just for a selection for a test case.
Here you can see the parameter PSPRAS for the language, that I defined in step 5 Mapping
rules.
In this screenshot of the converted data you can see that the new material number is
assigned.
The yellow lines represent the header, and the blue lines the text lines.
So you see that we have 2 materials with just one long text line followed by a material with 6
lines
In this step you execute, post the data to your SAP system.
The long text upload is really done in a few seconds for many hundred records, don't be
surprised, nothing wrong.
Loading long text means that SAP does REPLACE existing text with the same key.
Even the old text has many hundred lines and the new text just one, all lines of old text are
deleted and then the new text written.
15 Views Tags: migration, data, input, method, direct, lsmw, material_master, long_text