Johan van Zijl

Mostly SAP related…
  • rss
  • Home
  • About

My Table Mover(Part 2)

May 13, 2008

Ok, so I finally found some time to write Part 2(took me a couple of months). Part 1 of this blog only dealt with what the Table Mover program does and the broad mechanics used. In this blog I want to discuss the table download mechanism in order to explain some of the dynamic ABAP techniques used.

The first step is to get the list of database tables that need to be downloaded. I did this using a direct select of the Data Dictionary table dd02l. It may have been better to find the appropriate function module.

data: lt_tables type table of dd02l,
ls_tables type dd02l.

select * into table lt_tables  from dd02l
  where tabname in so_tab
    and as4local = 'A'
    and tabclass = 'TRANSP'.

The following variables are of importance for what is to follow:

data: lr_table type ref to data.
field-symbols: <lt_table> type standard table.
field-symbols: <ls_table> type any.

We will then loop at each table name in lt_tables and create a dynamic variable that will contain the data to be selected from the database. The statements below create this variable and can be accessed from field-symbol <lt_table>.

lv_tab = ls_tables-tabname.
create data lr_table type standard table of (lv_tab)
          with non-unique default key.
assign lr_table->* to <lt_table>.

The Create Data statement above creates a new variable with the same type as the Data Dictionary definition of the Database Table we want to select from. Then we do a dynamic SQL select into our table <lt_table>.

select * into table <lt_table>
        from (lv_tab).

The next step is to build an internal table that will enable us to download the table into a text format. In order to do this you must ensure that each field is converted first into character format. Also, we want to add our separator here.

loop at <lt_table> assigning <ls_table>.
        ls_dnl-tabname = lv_tab.
        clear: ls_dnl-content, sy-subrc, sep.
        while sy-subrc = 0.  "Map each component of the structure to a single field
          assign component sy-index of structure <ls_table> to <lv_field>.
          if sy-subrc = 0.
            lv_1024 = <lv_field>.  "This is for character conversion.
            concatenate ls_dnl-content sep lv_1024 into ls_dnl-content.
            sep = c_sep.  "Add the separator
          endif.
        endwhile.
        append ls_dnl to lt_dnl.
endloop.

My clever format conversion routine( lv_1024 = <lv_field> ) is not failsafe, and I have not tested it thoroughly, but at least it converts GUIDs, Dates and Numbers to text that will not destroy my download file.

But, the internal table lt_dnl now contains all the entries we want to download. All that remains is to download the table to the front end.

cl_gui_frontend_services=>gui_download(
      exporting
        filename                  = lv_name
        filetype                  = 'ASC'
        write_field_separator     = ' '
      changing
        data_tab                  = lt_dnl

Here is the link to the source code of the full report:

Source Code – Table Mover

Comments
No Comments »
Categories
ABAP Code, Conversion
Tags
ABAP Code, SAP
Comments rss Comments rss
Trackback Trackback

Determine the current WebClient Profile

April 8, 2008

Sometimes you need to determine the WebClient Profile of the logged in user.  The code below you allows you to accomplish this.

In CRM 4.0:
data: lv_profile type crmc_ic_profile .
lv_profile = cl_crm_ic_services=>get_customizing_profiles( ).

In CRM 5.0 and beyond:
data: lr_prof type ref to if_ic_profile,
lv_prof type string.
lr_prof = cl_ic_profile_service=>get_instance( ).
lv_prof = lr_prof->get_profile( ).

Comments
No Comments »
Categories
ABAP Code, IC WebClient, SAP CRM
Tags
ABAP Code, IC WebClient
Comments rss Comments rss
Trackback Trackback

Messages in the WebClient

January 26, 2008

I liked the idea of Nigel James to post handy tips for his own future reference. I decided to shamelessly copy him and post some of my own tips here. I will try to post them as I come across them.

So, you can use the code below in a controller class to display messages to the user.

data: lr_msg_service type ref to cl_bsp_wd_message_service,
      lv_msg type symsgv.
lr_msg_service = view_manager->get_message_service( ).
lv_msg = '<YOUR_MESSAGE_VARIABLE>'.
 CALL METHOD lr_msg_service->add_message
   EXPORTING
    iv_msg_type         = if_genil_message_container=>mt_error
    iv_msg_id             = '<YOUR_MESSAGE_CLASS>'
    iv_msg_v1            = lv_msg
    iv_msg_number      = '<YOUR_MESSAGE_NO>'
    iv_important_info    = abap_true.
Comments
No Comments »
Categories
ABAP Code, IC WebClient, SAP
Tags
ABAP Code, IC WebClient, SAP CRM
Comments rss Comments rss
Trackback Trackback

My Table Mover(Part 1)

November 27, 2007

I am currently doing more development work than I want to or supposed to do. So, I will start this blog on a rather technical note by taking you through a small development I did the other day. Hopefully someone finds this useful.

I needed to move a table from one SAP system to another system in a different landscape. It was the ideal opportunity to do a bit of interesting coding for a change (you can normally do this using a transport, once you get past the bureaucracy).

Now, I am not going to discuss the merits of the program I did develop or if it should even be used in an SAP system. All I am going to say is that changing SAP tables directly is extremely risky and should never be done in Productive Systems. It just turns out that this program was ideal for showing some not so common ABAP techniques.

My requirements definition for the Table Mover were as follows:

  1. Download multiple tables at once
  2. Upload multiple tables at once
  3. Be able to open/edit the downloaded file in Excel

Ok, so in order to meet requirement 1 and 2 I needed to include the table name in download structure. Requirement 3 meant I needed to use tab-delimited text or CSV. So I ended up with the following definition for a line type:

Line Type Definition

So this program will upload and download files in Ascii format. The first 16 characters will contain the table name and the rest of the row will be table contents in tab delimited format.

The old GUI_UPLOAD, GUI_DOWNLOAD, etc. Function Modules have been flagged as Obsolete in NetWeaver 7.0(AKA 2004s or whatever SAP decides to rename it to in future). Therefore I used the following methods to do my file processing:

  • cl_gui_frontend_services=&gt;file_open_dialog
  • cl_gui_frontend_services=&gt;gui_upload
  • cl_gui_frontend_services=&gt;gui_download

I had to upload and download the files without taking the tab-separator into account because I don’t know the structure of the table until I have uploaded the record.

In the next post I will discuss the details of the uploading and downloading mechanism.

In the meantime, here is the source code of the program. I wrote the program very quickly, so apologies for lack of error checking, testing, structure, etc. Source Code – Table Mover

Comments
3 Comments »
Categories
ABAP Code, Conversion, SAP
Tags
ABAP Code, SAP
Comments rss Comments rss
Trackback Trackback

Next Entries »

Navigation

  • ABAP Code
    • Business Partner
    • Conversion
    • CRM Service
    • IC WebClient
    • Middleware
  • Basis
  • Browsers
  • BSP
  • CRM
    • Interaction Centre
  • General
  • HTML
  • SAP
  • SAP CRM
    • Sales Documents

Search

Recent Posts

  • 15 Years of SMS and SAP CRM still does not support it
  • Vendors in the Sales Document
  • The Stapler Interface
  • SAP IT Service Management 7.0
  • Useful notes for Variant Configuration

RSS CONSNET

  • Forrester: Smaller SAP implementation partners sometimes the best option
  • Explore New Possibilities with our Experts at Saphila
  • Business Managers Enterprise Mobility Breakfast
  • New Positions Available!
  • First Global CRM 7.0 Solution live in South Africa
  • Shared Service Contact Centre
  • Consnet wins SAP Partner Excellence Award

Popular Posts

  • Sending mail from SAP
  • SAP CRM 7.0 Due
  • Browser Support and SAP CRM
  • SAP Salary Survey SA
  • Browser Support and SAP CRM - Part 2

Links

  • LinkedIn Profile
  • My Company – consnet.co.za

SAP

  • Getting Technical
  • martinceronio.net
  • SAP CRM Nightmare

Tech Related

  • WordPress Plugins

Categories

  • ABAP Code (12)
    • Business Partner (2)
    • Conversion (2)
    • CRM Service (1)
    • IC WebClient (5)
    • Middleware (1)
  • Basis (3)
  • Browsers (2)
  • BSP (2)
  • CRM (2)
    • Interaction Centre (1)
  • General (6)
  • HTML (3)
  • SAP (9)
  • SAP CRM (11)
    • Sales Documents (1)

Tags

Abap ABAP Code Authorizations BP Broadcast Browsers BSP Business Transaction Search Consulting CRM Customer digiata E-mail Firefox HTML Tidy IC WebClient IE6 IE7 IE8 Inbox ITS JAVA Mapping Opera Postfix Profile Parameters Salary Sales Area Sales Organization SAP SAP CRM SAP CRM 7.0 scot SMTP South Africa spam SSO2 Standards support package Tickets Web Client Web Dynpro website design Web Standards Wordpress

Archives

  • October 2009 (1)
  • August 2009 (1)
  • June 2009 (1)
  • May 2009 (2)
  • March 2009 (2)
  • November 2008 (1)
  • October 2008 (2)
  • September 2008 (7)
  • June 2008 (4)
  • May 2008 (4)
  • April 2008 (1)
  • January 2008 (2)
  • November 2007 (1)
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox