Apply EXIT_SAPFKCIM_001 user-exit before ALE conversion of IDoc? - abap

I have a basic IDoc type ORDERS05 which goes through ALE conversion rules
My need is to get the data before the ALE conversion and modifying the IDoc.
I found the exit EXIT_SAPFKCIM_001 / include ZXKKCU01 where the data is still not converted,
the problem is that I was testing in the same system by simulating the send of the IDoc,
but now that I'm testing the real scenario (send the IDoc from system A to system B)
I receive the IDoc in system B with the ALE rules already applied but without the modifications applied in the exit.
I tried to put an infinite loop in the exit to debug, but it does not go through into it.
Could you help me identify the problem please?

Related

Configure .eds file to map channels of a CANopen Client PLC

In Order use a PLC as a Client (formerly “Slave”), one has to configure the PDO channels, since the default values of the manufacturer are often not suitable. In my case, I need the PDOs so send INT valued instead of the default UNSIGNED8 (see. Picture).
Therefore my question: What kind of workflow would you recommend, to map the CANopen Client PDO channels?
I found the following workflow suitable, however I appreciate any improvements and recommendations from your side!
Start by locating the .eds file from the manufacturer. The image show this in the B&R Automation Studio Programming Environment
Open the file in a eds. Editor. I found the free Vector CANEds Editor very useful. Delete all RxPODs and RxPDO mappings that you don’t need.
Assign the needed Data Type (e.g. INTEGER16) and Channel Name (“1 Byte In (1)”).
Add the necessary PDOs and PDO mapping from the database. (This might actually be a bug, but if you just edit the PDOs without deleting and recreating them, I always receive error messages)
Map the Date to the Channels
Don't forget to write the number of channels in the first entry (in this image: 1601sub0)
Check the eds file for Errors (press F5) and copy&paste the eds file to the original location point 1.)
Add the PLC Client device in Automation Studio and you should see the correct mappings.
(PS: I couldn't make the images smaller ... any recommendations about formating this question are welcome!)

SAPJco invoking BAPI_MATERIAL_DISPLAY

I was trying to invoke BAPI_MATERIAL_DISPLAY functional module from SAP JCO, This is how i pass my input parameter.
function.getImportParameterList().setValue("MATERIAL", "10");
From my program output i got
The material 10 does not exist or is not activated.
If I execute BAPI_MATERIAL_DISPLAY using SAP logon, iam getting the entry. Using debugger I found that,
My input is going as 00000000000010. And so returning response.
Dunno, how to handle this in a proper way in SAPJCO.
I had directly passed the value 00000000000010 from SAPJCo and this time i got an error,
com.sap.conn.jco.JCoException: (104) JCO_ERROR_SYSTEM_FAILURE: Screen output without connection to user.
Hope SAP is opening a popup. Let me know how to solve both the issues in SAPJCO
Field Material has a conversion exit routine. See also its domain MATNR in the DDIC.
These conversion exits are always called automatically by SE37 but not when the Remote Function Module is called directly - like here from outside from a a JCo program.
So if the BAPI expects to get certain parameters in their SAP internal representation format (I don't know if this is the case here), then you have to do this data transformation on your own beforehand, either by doing this purely within an own routine at Java side, or by calling the appropriate conversion routines at ABAP side via RFC.
For more details on this I recommend to study SAP note 206068.
Regarding your second question with the error message "Screen output without connection to user", I guess that this BAPI expects to have a connection to an SAP GUI for displaying the selected data. With a remote function call you don't have a SAP GUI connection by default, but you can attach a SAP GUI to your RFC connection with JCo, namely by specifying the additional logon parameter jco.client.use_sapgui=1. For this to work, an SAP GUI frontend (either for Windows or for Java) also needs to be installed on your host where JCo is running, of course.

SAP missing file

I am integrating a BizTalk application with SAP. I get an error when SAP sends me some data because the required schema is not declared in BizTalk.
The required schema is http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/3/ZCREMAS01//700
I can find this schema in SAP (when consuming an adapter service from BizTalk), but it does not contain the segment E2LFM1M005.
The error I get is
The adapter "WCF-Custom" raised an error message. Details
"Microsoft.ServiceModel.Channels.Common.XmlReaderGenerationException:
The segment or group definition E2LFM1M005 was not found in the IDoc
metadata. The UniqueId of the IDoc type is: IDOCTYP/3/ZCREMAS01//700.
For Receive operations, the SAP adapter does not support unreleased
segments.
Can you tell me where can I find this iDoc definition?
The SAP release when it comes to idocs can be a bit tricky. In your case, your SAP system will probably be in a higher version then 700.
There are 2 things that you can change.
In your SAP receive location, go to the "Binding" tab in the settings and check the "ReceiveIdocRelease" parameter. There should be a syntax hint on the bottom.
In SAP go to WE20 and check the specific LS, KU, ... you are using. If you edit the idoc type you want to change there, you can see on the bottom a field where you can specify a segment release. Put 700 here and try again.
I can't really make screenshots now. If it's not clear, let me know. I'll post a more complete answer next week.
Kind Regards
Tim

What is RACRoute in Mainframe?

What is RACRoute in Mainframe? While checking th event viewer I get an error "RACRoute AUTH failed" while trying to transfer a file to a Mainframe system. Can this be explained?
RACROUTE is a rather large topic. The simplest answer is that you are probably not authorized by RACF to perform the action you are attempting. If there is an error message identifier (RACF messages begin with ICF followed by a 3 digit number and then a letter) you might have some luck looking that up in the references I've provided. There is likely an ICH message in the mainframe SYSLOG or OPERLOG that corresponds to what you are seeing in your event log.
RACROUTE is the basic macro for authorisation checks via the SAF interface. (IBM's RACF and (I presume) Computer Associates' ACF2 and Top Secret security products respond to authorisation requests made this way.)

Error handling: show error message or not?

Generally, in software design, which of the options below is preferred when there is a problem or error with a resource such as a database or file?
Show an error message
Do not show an error message and act as though the resource was empty (eg. do not populate a GUI component)]
For example, should the user see an empty DataGrid following which they complain, or should there be an error message? Which is better?
I don't see this as an either/or. Also, we need to consider all "users" of the system.
First consider the UI. Let's consider a contrived general case: you are populating a UI by calling a service which in turn uses a couple of of databases (for example a "current data" and an "historic data") database.
There are at least these possibilities:
It all works, data is retrieved
It all works but as it happens there's no data for this particular query
Can't reach the service
Service is invoked, but one database is down
Service is invoked, but both databases are down
Then also consider your application's semantics. Can your applciation procede in a "degraded" mode if all the data cannot be retrieved? For example, we can't query the history but that doesn't stop us creating a new item.,
Now also consider the roles here. There's the person using the UI, there's also support and maintenance people who need to know about and fix problems.
My general rules:
First Failure Data capture: Whichever component first detects an error should log it in some detail. So, service up, database down the service should log the problem. Service down, the UI should log the problem. This log should be a technical record targeting the support roles.
UIs should be tolerant: if at all possible run in a degraded mode. So if the service is down but (for example) local working is possible put up an empty screen and continue. BUT ...
Always indicate a problem: The "no data for this query" and "databases unavailable" cases may both result in an empty screen. The user needs to know the status of the display, is it showing complete information, partial information (eg. because one DB is down) or is no information available (eg. service or both dbs down). So have a "Status" field somewhere on the screen. Giving messages such as
Historica Data not currently available
or
There are problems retrieveing
information, if these persist please
contact support ...
There are some pitfalls to each of the options
Showing error message
This is specially helpful when your application is in testing stage or public testing. Also when clients meets an error, he or she can copy down the details and forward to you.
However sometimes this error message gets very ugly (call stacks and so on - remember ASP.NET?) and it becomes so large that it becomes difficult for clients to copy down the details.
Do not show error message and act as though nothing happened =)
This is useful when you don't want error messages to cog up your software UI design. But be reminded that it becomes difficult and further error prone when clients can't differentiate between an actual error, or really nothing on the GUI. The error stays there and nothing gets fixed.
My stand
Get the best of both worlds. In fact most modern applications how have a very good error handling process. I'll take the example of Mozilla Firefox 3.
A deadly error occurred and Firefox crashes
Error is captured and stored into a file as a form of error report
Error Reporting Application pops up apologizing to the user
Ask the user if the user want to send the error report to the software dev team
Then ask the user if want to restart the application
Or if the error is a warning or of lesser severity:
Show a simple error code and tell the user that there's the error with that action. Something like: "Error 123 at RequestSalary() Line 2"
The practice I usualy use is:
If the error didn't happen due to user error, then you should try to handle the error quietly.
If the error occurred because of some external problem (such as no internet connection) then you should alert the user.
IMO you should show a message (albeit a user friendly one and not something like "java.io.IOException: Connection timed out".) You could have a message box telling the user that an error occured while getting the data and provide helpful tips like: Trying after some time, check network cable, etc.
Also allow user to report that error to you (error reporting build into the app) that will send you the actual error and stack trace.