Content server migration of documents

If you have configured attachments of document info records to be stored in the content server, you still might have a lot of old document stored into the SAP database.

This blog will explain how to migrate these documents from the database to the content server.

Questions that will be answered are:

  • How to migrate documents from database to content server?
  • What are relevant background OSS notes?

Running the migration

The main OSS note is 389366 – Relocation of documents. This basically tells you to run program RSIRPIRL. The exact use is explained in OSS note 2459712 – How to use report RSIRPIRL.

To run start transaction SE38 and start program RSIRPIRL and fill out the required data:

Select a time frame that has little documents in a test environment first. Check how long it takes and that it ends correctly. After the relocation is done you get a list of technical ID’s migrated. When confident in a test environment, run in production environment, and monitor the storage of the content server (so it does not fill up to 100%).

Copying content repository

If you want to copy content from a content repository to another (not re-locate), install the program Z_DOC_COPY from OSS note 2774469 – Program to copy SAP content repositories.

Relevant OSS notes

OSS notes:

Chat bots via SAP conversational AI

This blog will explain how simple you can set up a chat bot via SAP conversational AI.

Questions that will be answered in this blog are:

  • How can I set up a test chat bot with SAP conversational AI?
  • How can I test the chat bot?

Setting up the chat bot

SAP conversational AI is the technology behind the chat bots of SAP. It only runs in the cloud. It does not run on premise.

You can register for a free test account at

After registration you can create your first bot:

Here we choose Perform Actions and press the CREATE A BOT button:

Continue with the wizard:

Now create the bot.

First thing to add is an intent:

And enter the detailed words (expressions) for the intent:

When the user keys in one of these words, it will trigger the bot.

But this is only the trigger. There is no action yet. Goto the build tab and create a skill first:

Now open the skill. In the skill you can goto the details to add a trigger:

Here we use our test intent we created before as trigger.

Now goto the Actions tab and create the wanted action:

In our simple case, we respond back with a text saying “Me too!”.

Testing the chat bot

Now we will test our chat bot. Test result:

First thing we say is “tell a joke”. Then the bot will tell a joke.

Then we ask: I need a holiday. Since we have set the word “holiday” as an intent, the bot responds with the action and says “Me too!”. The same for I need beer. Any response question that is not in the chat bot script it goes to fallback.

Data archiving: reducing amount of parallel batch jobs

When executing data archiving you have to be acting careful. The data archiving write and delete processes can be consuming a lot of CPU power from the database. Also, if you are not careful you might, by accident, claim all background processes. This blog will explain how to limit the amount of batch jobs used for data archiving. The data archiving run process itself is described in this blog.

Questions that will be answered in this blog are:

  • How can I limit the amount of deletion jobs?
  • How can I restrict the archiving jobs to run on a specific application server only?

Limit amount of deletion jobs

When the write run of data archiving is finished, this can have delivered many files. If you are not careful with the deletion, you select all files and each file will start a deletion run. This will consume a lot of CPU power on database level, since the deletion run will fire many DELETE statements to the database in rapid sequence. Also you might consume all batch jobs, leaving no room for any business batch job.

In stead of running the deletion from SARA, you can also run the deletion via program RSARCHD:

With this example, MM_EKKO files will be deleted. Maximum of 50 files from 1 archiving run will be processed, with a maximum of 2 deletion batch jobs running at the same time.

The general OSS note for this program is 133707 – Data archiving outside transaction SARA.

Relevant OSS notes bug fix notes:

General application server restrictions via batch job server group

In SM61 you can setup a special batch job server group. Here can assign a single application server for you data archiving batch job processing. We assume here you created a group called DATA_ARCH.

In SARA you can now goto the general data archiving settings:

Now you can link the batch job server group:

With the button JobClasses you can specify the job priorities per data archiving function:

A = high priority, C = low priority. The above screen shot is an example.

The second part of OSS note 2269004 – How to reduce parallel archiving jobs on Integration Engine describes the procedure as well. The first part of the note is only relevant for SAP PI.

SAP interfacing: consuming web services

In the previous blog we have exposed a web service. Now we will show how to consume a web service in ABAP. As example we will consume the web service we exposed in the previous blog.

Questions that will be answered in the blog are:

  • How to generate a web service consumption proxy?
  • How to setup SOAMANAGER for web service consumption?
  • How to test the web service consumption setup in SE80?
  • How to use the generated web service consumption proxy in ABAP code?
  • What are the authorisation and security aspects for web service consumption?

Generating web service consumption proxy

Start in SE80 by exporting the WSDL file from your previously generated webservice. Goto the WSDL tab and press export to save the WSDL file locally:

In SE80 in your package select Enterprise Services and right click on it to create a new service:

In the object type screen select Service Consumer:

Now select External WSDL/schema:

Select local file:

Select the local file:

Select the package, transport and use Z as prefix:

Then select Finish to complete the roadmap.

Wait for the system to compile the software:

Save and Activate. Now the design time proxy is ready.


In the previous steps we have setup the design time proxy. Now we add the runtime artefacts as well.

Now goto transaction SOAMANAGER:

Select Web Service Configuration, and search for the newly created design time object:

Click on the blue internal name to reach the configuration screen:

On the screen press Create and then manual configuration:

Give the logical port a name and description and mark the logical port is Default tickbox to true. Then continue with the roadmap.

Now fill out user ID and password. Continue and fill out user ID and password:

You can lookup the access URL from the service defined in the previous blog and check on the transport settings tab:

Do not use the WSDL URL address, but the binding URL!

Now fill out the URL details in the next screen.

Now finish the roadmap. And on this screen hit the ping web service test button to check if all is ok:

The design time artefacts can be transported. The SOAMANAGER settings need to be repeated in each system. This is wanted as well, since on a test system you might want to call a test web service URL and on production the same web service from the production URL.

Testing the web service consumption setup

Now go back to SE80 and test the web service consumption:

Select the port you created above in SOAMANAGER:

Edit the data:

And press test to get the results:

Using the web service consumption proxy in ABAP code

Now we are ready to use the web service consumption proxy in our ABAP code. ABAP code example:

REPORT zconsumews.

* Data Declarations
DATA: zcl_proxy TYPE REF TO zco_zbapidemowebservice, " Proxy Class
      zdata_in  TYPE zzbapidemo, " Proxy Input
      zdata_out TYPE zzbapidemoresponse, " Proxy Output
      zfault    TYPE REF TO cx_root. " Generic Fault

* Instantiate the proxy class providing the Logical port name
CREATE OBJECT zcl_proxy EXPORTING logical_port_name = 'ZDEMOWS'.

* Set Fixed Values
zdata_in-zimport = '1'.

    zcl_proxy->zbapidemo( EXPORTING input = zdata_in
                          IMPORTING output = zdata_out ).
    WRITE: / zdata_out-zexport.
  CATCH cx_root INTO zfault.
* here is the place for error handling


Run the ABAP and see the result:

How to get the right parameters? All the required structures can be found on the SE80 ABAP web service consumption proxy internal view:


The end users using the ABAP that is consuming the web service must be given the rights for the correct S_SERVICE object. Otherwise they will get an error that they are not authorized to call the proxy service object.

Background notes and blogs

More information and details can be found in these 2 SAP wiki’s: wiki1 and wiki2.

Relevant OSS notes:

Load balancing settings

Larger productive systems have multiple application servers to spread the workload. But if the system is not configured properly one application server can be overloaded while others are almost idle. This blog will explain the load balancing settings.

Questions that will be answered are:

  • How can I check my current load balancing situation?
  • How can I load balance SAP GUI users?
  • How can I load balance SAP to SAP RFC traffic?
  • How can I load balance external system to SAP RFC traffic?
  • How can I load balance qRFC traffic?
  • How can I load balance batch jobs?
  • How can I load balance web traffic?
  • How can I configure MRP parallel processing settings?

How to check current situation of load balancing

You can start transaction AL08_OLD (in older systems AL08) to get an overview of the distribution of your logged on users and how they are spread over the application servers:

Load balancing for GUI logon

With transaction SMLG you can setup logon groups that can be used for SAP GUI logon and RFC logon. In the details of each logon group you can make dedicated settings:

The Fav.Typ setting indicates the load balancing mechanism (round robing, best performance, weighted round robin). Set Ext RFC-enabled to also do load balancing in this group for external RFC calls.

You can set limits per application server on response time and amount of users. This limit is not a hard limit, but a soft limit to influence the quality calculation. The setting is per application server and it is across the logon groups (you cannot make settings per logon group). The background of these limits is explained in OSS note 118093 – Concepts of defining ‘limits’ in logon load balancing and on the SAP wiki page.

In SMLG you can choose menu option Goto / Load distribution to get an overview of the current load distribution and quality:

A higher quality number means it has the best quality. New users that logon will be routed to this server if you have set the SMLG settings to Best Quality.

Relevant OSS notes:

RFC traffic load balancing for SAP to SAP connections

For SAP to SAP connections using RFC you have to set the load balancing to Yes in SM59 and fill out the proper message server and logon group details:

RFC traffic load balancing for external system to SAP connections

Many external systems connect to SAP via the SAP JCO connector. The JCO connector can do load balancing, if configured properly. The problem here is that the developers form the other application using JCO have no idea on the settings to be made. The other problem is that on a development system the settings are typically pointing to one server only and the basis team did not configure load balancing. Now suddenly in production (or in a quality environment) they have to switch to load balanced settings using different parameters.

The parameters settings to be made are explained in:

Tips for basis team:

  • Also setup the logon group in development system and assist the external team with the needed settings. The best way is that the external team uses load balancing settings from the start in development as well
  • Setup extra application server in quality landscape to test load balancing

RFC server group

With transaction RZ12 you can setup RFC server groups that also can be used for load balancing purposes.

RFC load balancing for qRFC

If you use qRFC (this is used for example in the CIF interface to SCM and EWM), then you need to configure the RFC group (settings made in RZ12) in transactions SMQS and SMQR. See blog on qRFC.

Web traffic load balancing

For web traffic load balancing, you have to set up the SAP web dispatcher. In the SAP web dispatcher you can configure to which back-end application servers to use.

Batch job load balancing

Batch job load balancing can be done by setting up batch job server groups in transaction SM61. See this blog.

MRP run parallel processing

The MRP run (material requirements planning) is a very intensive process from the system perspective and very important from business perspective. It is important that the MRP run finishes in time, but is also should not overflow the system by occupying all work processes and CPU. In this customizing action you can defined the MRP run parallel processing settings:

Now you can assign the specific application servers that the MRP run is allowed to use in parallel and the maximum amount of work process it can use:

Troubleshooting OSS notes and blogs

The following OSS notes can be useful for troubleshooting:

Useful background blogs:

Workflow tips & tricks

SAP workflow is used for many different business scenarios. This blog will give tips and tricks for the basis part of SAP workflow.

Questions that will be answered in this blog are:

  • How can I send a reminder email to the workflow owners?
  • How to check how many items in the inbox a user has?
  • How to delete the items in the inbox of a user?
  • How can I terminate workflow(s) as administrator?
  • How do I execute general workflow activation?
  • Where can I find more FAQ and manuals on workflow?
  • How to solve workflow transport issues?
  • How can I add a general task to a transport?

Workflow FAQ note

SAP has created an excellent FAQ note: 2214571 – Collection Note: Workflow troubleshooting guides, FAQs and important notes. This is a good starting point for find solutions to workflow issues.

Sending reminder email to workflow owners

Program RSWUWFML2 can be used to send reminders to workflow owners that they still have open workflow items:

It is important to know that only reminders will be send in mail if the workflow owner user ID’s mail address in maintained in SU01.

Important explanation OSS note:

Important bug fix OSS notes:

Changing the message subject of the reminder mail

To change the message subject of a mail, create a new message in SE91. Example is class Z_CUSTOM message 010 with text: “Gentle reminder of workflow”. Now put in field message class for subject field the name of your class (Z_CUSTOM) and the message number in message number for Subject:

Changing the body of the message of the reminder mail

Goto transaction SE61 and select text type Text in Dialog. First the default text SWU_NOTIF_INBOX:

Now use the copy button to copy the text to a Z text. For example Z_SWU_NOTIF_INBOX. Change the text as per you requirement and activate the text.

Now you can use this new text in the workflow reminder mail program:

SAP workflow inbox

Using transaction SOY5 or via program RSSOINBO you can get an overview of the amount of workflow items per user:

Via program RSSOINBD you can delete the inbox of a user:

Terminating workflows as administrator

Start transaction SWIA:

In the second screen select all the items you want to terminate and use menu option Edit / Work Item / Logically Delete. The workitem will now to status CANCELLED.

See also oss note 2422812 – How to delete workflow item from inbox.

Reducing size of workflow tables

Workflow tables start with SWW. They can grow very large in a productive environment. For analysis see blog. For deletion and archiving see blog.

Basic workflow activation in a new system

For activating workflow in a new system or after an S4HANA upgrade, please read this dedicated blog.

Transport issues with workflow

Workflow development objects can give some issues in transports, since not all objects are immediately put into a transport upon development.

If you have set a workflow task to general and want to transport it, use program RHMOVE30 to put it into a transport. For more background read this SAP blog.

Data archiving: store files in SAP content server

With data archiving you reduce the database size of SAP and increase the performance by reducing the amount of records in the SAP tables. The data archiving process write files with the archived data. These files must still be stored securely, since on file level any admin can delete the files and you might loose valuable business data.

This blog explains the setup of storage of data archiving files by using SAP content server as storage medium.

Questions that will be answered are:

  • How do I setup the link from SAP netweaver ABAP stack to the SAP content server?
  • Which settings do I need to make in the archiving objects to store the archiving file to SAP content server?
  • How do I store the files in the SARA transaction?

General tips and tricks for SAP content server can be found in this blog.

How to setup archiving technically can be found in this blog.

How to run archiving can be found in this blog.

Linking the SAP Netweaver ABAP stack to SAP content server

First we need to maintain a special protocol in customizing using this path:

Create a new protocol:

This protocol can now be assigned to the SAP content server you want to use for storing the data archiving files. Goto transaction OAC0 to link the protocol to your content server:

If the field protocol is not visible immediately there, click the button Full administration first.

Data archiving object specific linking

After the steps above to make the general connection to content server available, the content server needs to be explicitly mentioned in each data archiving object. For any data archiving object (start transaction SARA first and select the object), click on the customizing button:

In the popup screen now select Technical Settings in Archiving Object-Specific Customizing:

At the bottom fill out the content server repository and decide if you want to start automatically or immediately:

Remark 1: the F4 search help does not work here! Key in the value directly and check using the check button. Then save the data.
Remark 2: always tick the option Delete Program Reads from Storage System. This forces that the archive file is securely stored first, before the deletion run is allowed to start. 

Storing archive files in SARA

After the configuration is done the new button Storage system appears on the screen in the SARA transaction for this specific object:

Storage system

If the button does not appear: check the technical settings above, and remember: this is to be repeated for each object.

Storing files that have been written by the Write phase of the data archiving process can now be stored by pressing the Archive Files button:

Select the file(s) to store:

Now a batch job starts (per file!) to store the archive file into the SAP content server.

After correct storage of the file, the file can be selected in the delete phase.

SAP content server 7.5

SAP has released content server 7.5. Content server can be used to store attachments, documents and archiving files outside of the SAP database.

Questions that will be answered in this blog are:

  • Where can I find more information on SAP content server 7.5?
  • How to upgrade to SAP content server 7.5?
  • What is the support on my SAP content server 6.5 installations?

SAP content server 7.5

The main OSS note for SAP content server 7.5 is 2786364 – SAP Content Server and Cache Server 7.5 (and higher). This is a major different technology setup: there is no Apache or Microsoft webserver needed any more. The content repository setup itself does not change.

For installation you can follow the instructions from the main OSS note, or follow the steps from the SAP blog on content server 7.5 installation.

Upgrading from 6.5 to 7.5

As mentioned before the technology has changed on how data is put into content server and how it is retrieved, but the data structure itself is the same. Note 2786364 – SAP Content Server and Cache Server 7.5 (and higher) is also describing the migration process. Your database (most of the times MaxDB) remains as is. But you have to install new 7.5 content server. Then you migrate the configuration. You stop the old 6.5 server and start up the new 7.5 server. You test that all works via the content server check programs from this blog (you might need to perform changes in transaction OAC0). SAP recommends after successful migration to clean up the old 6.5 as soon as possible to avoid issues (like an overzealous admin starting it up again…).

Support of SAP content server 6.5

In the main OSS note on SAP content server 6.5 (1983930 – Availability of SAP Content Server 6.50) there is no direct indication of end of support date. SAP content server 6.50 is part of the Netweaver 7.40 stack. The support of this stack ends by 31st of December 2020.

Changes to test programs

The content server test programs (for example RSCMST) can respond differently with the new content server. SAP is updating these. For more information see the blog on content server tips & tricks.

New SAP JCO 3.1 version

SAP has released a new SAP JCO version 3.1. JCO is the workhorse for JAVA programs and other external programs to call RFC enabled function modules and BAPI’s to SAP ABAP systems.

Questions that will be answered in this blog are:

  • Where can I find information on the new JCO 3.1 version?
  • What is the end of support for the current JCO 3.0 version?

New JCO 3.1 version

The main OSS note for JCO version 3.1 is 2786882 – SAP JCo 3.1 release and support strategy. Documentation for JCO 3.1 is available publicly on the SAP site. Or download the PDF of the JCO 3.1 standalone connector directly via this link. General implementation information on both versions is still on the SAP wiki page.

End of support for current JCO 3.0 version

SAP has updated the main note for JCO version 3.0: 1077727 – SAP JCo 3.0 release and support strategy. In this note the current end of support date for JCO version is set to October 31st 2020.

JCO installation issues

OSS note 1953762 – Hints for frequent installation errors with SAP JCo 3.0 release describes the most frequent errors with installation of SAP JCo 3.0. Most of the hints will be identical for SAP JCo 3.1.

Storing SAP office documents in content server

When you are storing a lot of SAP office documents, you will find that table SOFFCONT1 is growing to a large value. Out-of-the-box SAP stores SAP office documents in that table. This blog will explain how you can route the storage of these documents from database to a content server.

Questions that will be answered are:

  • Which settings do I need to make to route SAP office documents to the content server?
  • Which settings do I need to make to route GOS attachments to the content server?
  • How can I test if the documents are stored correctly in the content server?

Check current settings

Start transaction OAC0 and open the entry for content repository SOFFDB:

Here you can see documents are written to SAP table SOFFCONT1.

Reconfiguration of SAP office to content server

First check with transaction OANR that the number range is defined properly:

Goto transaction OAC0 and alter the settings for SOFFDB to your content server settings:

Also set up a new content server:

Now goto transaction AOCT to change the category settings for 3 entries: SOFFDB, SOFFHTTP and SOFFPHIO:

More background can be found in OSS note 2571570 – Where are documents physically stored with Business Communication Services?. And in OSS note 1634908 – Reduce the number of entries of table SOFFCONT1.

Reconfiguration of GOS (generic object services) to content server

Goto transaction SKPR08 and assign the content server category to class SOFFPHIO:

More background can be found in OSS note 530792 – Storing documents in the generic object services.

Other settings

There are more settings to be done or validated. It might be that these settings are already done in your system. If not, make the settings.

First define the Data carrier in customizing:

Make sure the entry for Data Carrier for front end has the type PC defined with a temporary storage path:

Please make sure that the end user has full rights to this directory. Some companies shield a lot. Without write and delete rights a temporary file cannot be stored here and the function will not work.

Now check that the default entry for data carrier is present. If not present use the Create Default Entry button to create it:

Now check the workstation application settings in the customizing path below, or directly via transaction DC30:

Search for the application type PDF and make sure the entries for 1 (display), 2 (change) and 3 (print) are maintained:

%AUTO% means it will take over the value from windows default to open PDF file.

Repeat this check for the popular formats DOC and DCX (Word), PPT and PPX (powerpoint), XLS and XLX (excel), ZIP (compressed files).

Testing the setup for SAP office

To test the setup for SAP office goto transaction SBWP to create a new message:

Create a document with attachment:

During upload you will see in the left bottom side the Test HTTP destination and destination test ok:

This means the document will be moved to content server. If this does not come, it is not ok.

If all is uploaded and you have filled out a receiver: hit the send button.

Now go back to SBWP and select the outbox. Double click on your message you just created and go to the attachment tab:

The document opens now.

You can ask your basis team to stop the content server. If that is stopped the document will not open (you get a HTTP error). This proves that the attachment is stored in the content server.

Testing the setup for GOS

To test the setup for GOS goto one of the transactions supporting the GOS setup. In our example we will use purchase requisition change (transaction ME52N). Select a purchase requisition and open the GOS box top left:

Select Create… and then option Create Attachment and upload a file.

Now select attachment list:

Open the document. Ask you basis team to stop the content server. Now try to open again and you will get an http error proving the document is stored in the content server.

Migrating existing documents

To migrate existing documents from the database to the content server, you can use program RSIRPIRL. The use of this program is explained in OSS note 2459712 – How to use report RSIRPIRL.

Regaining storage space

Depending on your database the moving of attachments from database to content server will immediately free up storage, or only after database table reorganization.