Skip to Content
Technical Articles
Author's profile photo Stefan Schnell

How To Use TensorFlow Seamlessly Inside ABAP

Over one year ago I published a blog how to use Python seamlessly inside ABAP. Now Shivam Shukla asked whether it is possible to realize ML on this way. So I tried the last days the possibilities to use TensorFlow seamlessly inside ABAP. TensorFlow is an end-to-end open source platform for machine learning. And what should I say, it worked without any problems.

I started the installation of Python, but here I used version 3.7.2, and PyWin32, here I used version 224, as I described in my blog. Now I installed TensorFlow 1.13. In a normal case you can do it easily with PIP. I used the manually way – more complicated but I saw in detail what happens.

In the next step I added in the security configuration of the SAP Logon a user rule to allow the access to the Python.Demo control.

Now I changed my Python COM server program, I added two functions TensorFlow1 and TensorFlow2 – not very imaginative but enough for testing. These functions contains test routines to check the installation of TensorFlow. Both delivers a result back.

# -*- coding: iso-8859-15 -*-
#-Begin-----------------------------------------------------------------
import sys, win32com.server.register
import platform, struct
import tensorflow as tf

class PythonDemo:
  #To create a new GUID use the commands:
  #>>> import pythoncom
  #>>> print(pythoncom.CreateGuid())
  _reg_clsid_ = "{D1B0A23F-0B6E-46D6-8880-744DBFFB86CD}"
  _reg_progid_ = "Python.Demo"
  _reg_desc_ = "Python Demo COM Server"
  _public_methods_ = ["HelloWorld", "HelloYou", "TensorFlow1", "TensorFlow2"]

  #-Function HelloWorld-------------------------------------------------
  def HelloWorld(self):
    return "Hello World from Python " + platform.python_version() + \
      " on " + platform.system() + " (" + platform.architecture()[0] + \
      ")"

  #-Function HelloYou---------------------------------------------------
  def HelloYou(self, name="Anybody"):
    return "Hello " + str(name) + " from Python"

  #-Function TensorFlow1------------------------------------------------
  def TensorFlow1(self):
    hello = tf.constant('Hello World from TensorFlow')
    sess = tf.Session()
    rc = sess.run(hello)
    sess.close()
    return str(rc)

  #-Function TensorFlow2------------------------------------------------
  def TensorFlow2(self):
    a = tf.constant(10)
    b = tf.constant(32)
    sess = tf.Session()
    rc = sess.run(a + b)
    sess.close()
    return str(rc)

#-Sub Main--------------------------------------------------------------
def main():
  if sys.argv[1].lower() == "--register":
    print("Registering COM server...")
  if sys.argv[1].lower() == "--unregister":
    print("Unregistering COM server...")
  win32com.server.register.UseCommandLine(PythonDemo)

#-Main------------------------------------------------------------------
if __name__=="__main__":
  main()

#-End-------------------------------------------------------------------

Then I registered the COM server and tried the following ABAP report…

"-Begin-----------------------------------------------------------------
REPORT Z_PYTHON.

DATA:
  lo_python TYPE OLE2_OBJECT,
  lv_return TYPE STRING,
  lo_list TYPE OLE2_OBJECT
  .

CREATE OBJECT lo_python 'Python.Demo'.
CHECK sy-subrc = 0 AND lo_python-Handle > 0 AND lo_python-Type = 'OLE2'.

CALL METHOD OF lo_python 'HelloWorld' = lv_return.
WRITE: / lv_return.

CALL METHOD OF lo_python 'HelloYou' = lv_return
  EXPORTING
    #1 = 'Stefan'.
WRITE: / lv_return.

CALL METHOD OF lo_python 'TensorFlow1' = lv_return.
WRITE: / `Method TensorFlow1: ` && lv_return.

CALL METHOD OF lo_python 'TensorFlow2' = lv_return.
WRITE: / `Method TensorFlow2: ` && lv_return.

"-End-------------------------------------------------------------------

…with this result.

As I said above, it works so far without any problems. On this way it seems to possible to use ML seamlessly inside ABAP, in this case TensorFlow.

Assigned Tags

      4 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Shivam Shukla
      Shivam Shukla

      Thank you so much sir 🙂 for sharing , really liked the way of executing python from ABAP 🙂

       

      will try this for sure awesome article 🙂

       

      Thanks,

      Shivam

      Author's profile photo Michelle Crapo
      Michelle Crapo

      Very cool!

      Thank you - adding it to my growing "How-to" list.  In other words setting a bookmark.

      Michelle

      Author's profile photo Kerem Koseoglu
      Kerem Koseoglu

      This seems to be a Windows-only solution. To make it platform independent, you can build a Python Flask website with REST/JSON functions (accessing TensorFlow), and call them from ABAP (or any language) via simple HTTP calls.

      Author's profile photo Stefan Schnell
      Stefan Schnell
      Blog Post Author

      Hello Kerem,

      you are right, it is a solution which work only on Windows. The reason is very easy, it uses the COM interface of the SAP GUI for Windows. Only Windows offers this interface. It is available on each SAP GUI for Windows installation, without any further components, and it is absolut easy to use.

      It is one way to realize this kind of solution. Your way is also possible, it is just another way.

      Best regards
      Stefan