Thread View: borland.public.delphi.database.win32
12 messages
12 total messages
Started by Isaac Welliam
Thu, 24 Jul 2008 10:41
connection to SAP
Author: Isaac Welliam
Date: Thu, 24 Jul 2008 10:41
Date: Thu, 24 Jul 2008 10:41
9 lines
1209 bytes
1209 bytes
I need to build a win32 application that connect to SAP ARP System and get data from that system directly with the need to modify SAP to make a special export module I saw a programming language called WinDev can do that by login to the SAP system and import the desired functions which give me a direct way to call those function, is there a way to do the same with Delphi ? Thanks
Re: connection to SAP
Author: Bill Todd [TeamB]
Date: Thu, 24 Jul 2008 14:44
Date: Thu, 24 Jul 2008 14:44
5 lines
1027 bytes
1027 bytes
If the SAP API is accessed by importing functions in DLLs then the answer is yes. -- Bill Todd (TeamB)
Re: connection to SAP
Author: Ronald Klitsche
Date: Thu, 24 Jul 2008 16:08
Date: Thu, 24 Jul 2008 16:08
15 lines
1537 bytes
1537 bytes
> I saw a programming language called WinDev can do that by login to the SAP > system and import the desired functions which give me a direct way to call > those function, is there a way to do the same with Delphi ? Do you mean to create dynamic RFC function in SAP during "runtime"? If yes, you have to create a RFC function in SAP to do that in ABAP. You can call that RFC function from Delphi with the "new ABAP coding" as a parameter and the function will generate an new RFC function callable from Delphi. ... evil. For security reasons I assume that no company will have that functionality in their systems;-) Ciao Ronald
Re: connection to SAP
Author: Jean-Noël Voirol
Date: Thu, 24 Jul 2008 18:27
Date: Thu, 24 Jul 2008 18:27
4 lines
994 bytes
994 bytes
https://www.gs-soft.com/confluence/display/SAPx/Connect+for+SAP+Home Jean-No�l
Re: connection to SAP
Author: Keith Latham
Date: Fri, 25 Jul 2008 05:03
Date: Fri, 25 Jul 2008 05:03
71 lines
4751 bytes
4751 bytes
Isaac Welliam wrote: > I need to build a win32 application that connect to SAP ARP System and > get data from that system directly with the need to modify SAP to make a > special export module > > I saw a programming language called WinDev can do that by login to the > SAP system and import the desired functions which give me a direct way > to call those function, is there a way to do the same with Delphi ? > > Thanks It isn't too difficult, but does take a bit of study. I have built (over 5 years ago) several different Delphi-SAP links. One was a performance monitor as a learning exercise, no updating of SAP was required. Another was a Password changer for external helpdesks where they didn't want to expose the SAPGUI. For that I had to write code on both sides, the Delphi front-end and the ABAP code to change the passwords and log the changes, etc. Both these systems used the SAP RFC calls via the SAP supplied DLL's. This technique enabled communication with SAP via screen-scraping existing screens or invoking BAPI's. If the functionality you want is not exposed on a user screen (that can change from release to release, or by configuration) or a provided BAPI, you will need to write your own BAPI (or have it written for you of course). In a Windows environment, these things all reduce to a RPC using DCOM I guess. You basically just have to know how to marshall the parameters into the correct parameter block and send it down the wire using the appropriate DLL calls. As I recall, I had a bit of trouble with passing array parameters to SAP, but I didn't have any trouble reading array replies. For security purposes, I organised a user ID that could not be logged on via a GUI; that is, it was what SAP used to call a CPI-C only user. The terminology has changed and CPI-C has nothing to do with it anymore, but I can't remember what it is called in NetWeaver. This stuff is pretty much obsolete anyway. Since my efforts, SAP has put in place a lot of web services, so by now you should be able to do just about anything you need to do with, for example, SOAP messages or whatever new XML based messaging tool they have in place now to invoke BAPI's. To deliver your message and SAP's response, there are several messaging interface tools which would really be the correct way to go here. SAP Process Integration (SAP PI) (formerly called SAP Exchange Infrastructure or just XI) is built-in to SAP and is probably what you would want to use. Or your client may have IBM's messaging or one of several other 3rd products. That's really the best place to start looking. Or you can use the product Jean-No�l has pointed you to (I have not used it - don't know anything about it). Whatever you do, don't think you can just read the SAP database and update it and avoid the SAP overhead, unless you or your client has developed the entire SAP based application from the ground up and have complete control over it. On reflection don't even do it then or you will be in extreme difficulty when they change something under the covers. YOU *MUST* INVOKE THE SAP BUSINESS LOGIC OR YOU *WILL* CORRUPT YOUR CLIENT'S DATABASE. SAP does have a 'free' learners version you can download from their site for learning SAP ABAP, or SAP Java. These learning platforms do not have the SAP ERP application or any other application beyond their training systems, so you would need to set up your own stuff to test with. I haven't tried to see if I can connect to them remotely (by that I mean over the 'CPI-C' connection as opposed to SAPGUI or Browser) or not. I suppose you can, but I think printing is disabled, so maybe remote connection is too. They have a 90 license that you can renew indefinitely.
Re: connection to SAP
Author: Isaac Welliam
Date: Sun, 03 Aug 2008 01:44
Date: Sun, 03 Aug 2008 01:44
12 lines
1467 bytes
1467 bytes
Bill Todd [TeamB] wrote: > If the SAP API is accessed by importing functions in DLLs then the > answer is yes. > sorry for my late reply, do you hear about windev ? (http://www.windev.com) In this url http://www.windev.com/pcsoft/videos.html#liste a technical video called "Native access to SAP" on how windev can connect to sap API (like you said) but I have no idea how to do the same in Delphi, is like calling a function inside a DLL ? Thanks
Re: connection to SAP
Author: Isaac Welliam
Date: Sun, 03 Aug 2008 01:45
Date: Sun, 03 Aug 2008 01:45
1 lines
1036 bytes
1036 bytes
I have no control on SAP system at all
Re: connection to SAP
Author: Isaac Welliam
Date: Sun, 03 Aug 2008 01:47
Date: Sun, 03 Aug 2008 01:47
5 lines
1304 bytes
1304 bytes
also if there is no documentation or help from SAP can I still be able to do that ? for example browsing all SAP functions and choose what I need This like hacking into SAP system because developer of this system will not help me in any way, but an owner need me to get data from SAP black box.
Re: connection to SAP
Author: Isaac Welliam
Date: Sun, 03 Aug 2008 01:53
Date: Sun, 03 Aug 2008 01:53
6 lines
1070 bytes
1070 bytes
Jean-No�l Voirol wrote: > https://www.gs-soft.com/confluence/display/SAPx/Connect+for+SAP+Home > > > Jean-No�l thanks alot I will check this out
Re: connection to SAP
Author: Isaac Welliam
Date: Sun, 03 Aug 2008 01:56
Date: Sun, 03 Aug 2008 01:56
77 lines
5124 bytes
5124 bytes
Keith Latham wrote: > Isaac Welliam wrote: >> I need to build a win32 application that connect to SAP ARP System and >> get data from that system directly with the need to modify SAP to make >> a special export module >> >> I saw a programming language called WinDev can do that by login to the >> SAP system and import the desired functions which give me a direct way >> to call those function, is there a way to do the same with Delphi ? >> >> Thanks > > It isn't too difficult, but does take a bit of study. I have built (over > 5 years ago) several different Delphi-SAP links. One was a performance > monitor as a learning exercise, no updating of SAP was required. Another > was a Password changer for external helpdesks where they didn't want to > expose the SAPGUI. For that I had to write code on both sides, the > Delphi front-end and the ABAP code to change the passwords and log the > changes, etc. > > Both these systems used the SAP RFC calls via the SAP supplied DLL's. > This technique enabled communication with SAP via screen-scraping > existing screens or invoking BAPI's. If the functionality you want is > not exposed on a user screen (that can change from release to release, > or by configuration) or a provided BAPI, you will need to write your own > BAPI (or have it written for you of course). > > In a Windows environment, these things all reduce to a RPC using DCOM I > guess. You basically just have to know how to marshall the parameters > into the correct parameter block and send it down the wire using the > appropriate DLL calls. As I recall, I had a bit of trouble with passing > array parameters to SAP, but I didn't have any trouble reading array > replies. > > For security purposes, I organised a user ID that could not be logged on > via a GUI; that is, it was what SAP used to call a CPI-C only user. The > terminology has changed and CPI-C has nothing to do with it anymore, but > I can't remember what it is called in NetWeaver. This stuff is pretty > much obsolete anyway. > > Since my efforts, SAP has put in place a lot of web services, so by now > you should be able to do just about anything you need to do with, for > example, SOAP messages or whatever new XML based messaging tool they > have in place now to invoke BAPI's. > > To deliver your message and SAP's response, there are several messaging > interface tools which would really be the correct way to go here. SAP > Process Integration (SAP PI) (formerly called SAP Exchange > Infrastructure or just XI) is built-in to SAP and is probably what you > would want to use. Or your client may have IBM's messaging or one of > several other 3rd products. That's really the best place to start > looking. Or you can use the product Jean-No�l has pointed you to (I have > not used it - don't know anything about it). > > Whatever you do, don't think you can just read the SAP database and > update it and avoid the SAP overhead, unless you or your client has > developed the entire SAP based application from the ground up and have > complete control over it. On reflection don't even do it then or you > will be in extreme difficulty when they change something under the covers. > > YOU *MUST* INVOKE THE SAP BUSINESS LOGIC OR YOU *WILL* CORRUPT YOUR > CLIENT'S DATABASE. > > SAP does have a 'free' learners version you can download from their site > for learning SAP ABAP, or SAP Java. These learning platforms do not > have the SAP ERP application or any other application beyond their > training systems, so you would need to set up your own stuff to test > with. I haven't tried to see if I can connect to them remotely (by that > I mean over the 'CPI-C' connection as opposed to SAPGUI or Browser) or > not. I suppose you can, but I think printing is disabled, so maybe > remote connection is too. They have a 90 license that you can renew > indefinitely. > > Wow I need to read you message again with clear mind before I reply becasue there is alot of expression I dont understand !! but Thanks so much for taking all this time to write for me
Re: connection to SAP
Author: Keith Latham
Date: Sun, 03 Aug 2008 15:11
Date: Sun, 03 Aug 2008 15:11
139 lines
8611 bytes
8611 bytes
Isaac Welliam wrote: >> > Wow I need to read you message again with clear mind before I reply > becasue there is alot of expression I dont understand !! > but Thanks so much for taking all this time to write for me The bottom line is that you NEED a SAP interface expert to help you. SAP is NOT a database system, you can't just connect to it and manipulate its data. It is an application system and you have to play by its rules. There are over 8000 tables in the SAP ERP application and the business logic that ties those tables together is enormous. If you muck it up you will not be popular. As long as you play by the rules you are pretty safe. The major rule that you have to play in your case is that there are three ways to interface with SAP from a non-SAP program (Not counting 'traditional batch files') : Method 1) Use the SAPSDK (System Development Kit) dll to issue what SAP calls RFC's (Remote Function Call). This method is 'old-fashioned' and probably should not be used anymore. It allows you to interact with SAP in two ways: a) Invoke an SAP transaction and set or access (screen-fill or screen-scrape) the fields on the screen. This is a dangerous method, because screen layouts can change from release to release, and even by local installation configuration. Example: you need an invoice (this is just an example off my head and is not necessarily indicative of the exact transaction): Step 1. Log on to SAP (dll call). Step 2. Build a parameter list that fills the required query details onto the SAP Display Invoice Transaction (I can't remember the transaction ID - it has changed at least three times since I have been working with SAP - and I don't work with it anymore). The bad news is that these parameters are complicated and difficult. The good news is that SAP has a utility program to cut Visual Basic code for a specified screen. You just need to translate it to Delphi. Good luck. Step 3. Invoke the SAP Display Invoice Transaction with the query screen you built in Step 3 (dll call). Step 4. Receive the reply and if not an error get the details you need from the Invoice Header Screen (this is screen-scraping). Step 5. Build a parameter list that tells SAP to change to the Invoice Detail Screen. Step 6. Send the request to SAP (dll call). Step 7. Receive the reply and if not an error get the invoice details you need from the Invoice Header Screen. Step 8. If you need other information, for example, Customer Details or Stock Item details, do this all again for the corresponding Display transactions. Step 9. This method is extremely sensitive to any change in the transactions. b) Invoke an SAP RFC enabled function with parameters. SAP functions are written in ABAP, and enabling them for RFC is a matter of setting a switch in their definition. SAP supplies hundreds of functions and installations can and do write their own. If the function you need is supplied by SAP but is not RFC enabled you have to write a wrap it in a local function to turn on the RFC. If the function you need does not exist you need to write your own. Example: Step 1: set up a parameter list for the "get invoice header" function (can't remember its exact name). This parameter list is much easier to set up than the one above. I have not found a way to automate this for Delphi. This is the short-cuts that products like "WinDev" or the old "Borland Delphi for SAP" product do for you I think. Step 2: invoke the function (dll call). Step 3: receive the reply into your specified buffer. Now you need to get the data you are interested in out of the returned parameter buffer. Again its code and you need to be able to compute offsets and such. Step 4: repeat the process for the "get invoice detail" function. Step 5: repeat the process for any other data you need. Method 2) Invoke an SAP BAPI (Business Application Programming Interface). This is the modern approved method. Form your point of view, a BAPI is simply an RFC enabled function as in 1b above, but it tends to package stuff into Business Objects. There are again two processes possible: a) Invoke the BAPI as you did the 'normal' RFC call: Step 1. Set up a parameter list for the "BAPI_GET_INVOICE" (or whatever it is called) as above. You can specify what data should be returned. Step 2. Invoke the function (dllcall) Step 3. receive the reply and extract your data. This time all the data relating to the invoice should be included in the reply (if you asked for it), including Header, Detail, Customer, Stock, etc. Step 4. You are done. b) Invoke the BAPI via XML. This makes most sense to me as being the most straight forward (notice the progression of hard to easy in the processes I have listed - this has occured over 15 years). I haven't used this method so I am most vague on this. Step 1. Set up an XML request to invoke the BAPI (in a SOAP envelope I guess?). Step 2. Send the XML request to SAP. (using SAP Process Integration?) Step 3. Receive the XML reply (parse the response using whatever you like to extract your data. Method 3) Use SAP IDOCs (Intermediate Documents). I forgot about this one the other day. An IDOC is a formatted data record (the format must be defined inside SAP as a 'message type') which can be delivered to SAP for processing either via a 'real time' message or as part of a 'traditional batch file'. IDOCs invoke BAPI's, function modules, or ABAP programs to process transactional data. They are especially useful for Business-to-Business communication, and actually provide the framework for SAP's EDI support. There is a very robust status tracking and recovery mechanism. If you are using this method, is is possible that you are just creating another source for an existing IDOC process - perhaps you are submitting work orders from one department to another, or purchase orders from your client to an external supplier. This would be almost trivial to implement as the 'message type' would already be defined and you just have to build examples of the message and deliver them to the right IP address using the right protocol. Whatever you do, it will require close cooperation with your installation's SAP people: Netweaver administration, Security, and ABAP Development. You may very well have a separate Interface team as well. I strongly suggest you make contact with these people and develop a good relationship no matter what method you use. You boss should help you with this if you don't already have the appropriate contacts. In fact, you should have gone to talk to them first, even before you asked here. It is unlikely that you are the first one that needs to interface with your SAP installation, and they probably have a bit of experience with it and local standards and methodologies that you will need to be aware of. They can probably steer you to XML or IDOC or whatever fits your requirement the best. Especially if you need to use the SDK, there will almost certainly be a learning curve on their side as well as yours. But nothing can be done with out the SAP team's cooperation. The worst thing you can do is to try developing this thing in isolation and then spring it on them. Get your SAP installation team involved early and get them onside. Good Luck
Re: connection to SAP
Author: Isaac Welliam
Date: Mon, 04 Aug 2008 16:44
Date: Mon, 04 Aug 2008 16:44
16 lines
1723 bytes
1723 bytes
Thanks alot Keith Latham your help is much appreciated, I will try to contact the SAP development team but I dont know if developing this application will require from me to travel to the client country and stay for months until the project is finished this would be add alot of cost. also what do you think about the component "connect for SAP" ? is it good and can minimize cost, time and effort ? If possible please send me your contact info to isaac_cm<at>yahoo.com if you dont mind my company would need your services when we start in this project we still now in study phase. Thanks again My Regards Isaac
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads