Cmp and required transaction
Hi,
I have a session bean starting a transaction ("requires new" in ejb descriptor),
that bean is calling another session bean which has "required", this one is then
setting some attributes in a CMP (setXxx), that also has required and then it
throws an exception, the first session bean catches it and rolls back. But when
I check in the db the value set by setXxx has been updated, shouldn't the whole
transaction be rolled back?
Thanks,
A.
Hi,
I have a session bean starting a transaction ("requires new" in ejb descriptor),
that bean is calling another session bean which has "required", this one is then
setting some attributes in a CMP (setXxx), that also has required and then it
throws an exception, the first session bean catches it and rolls back. But when
I check in the db the value set by setXxx has been updated, shouldn't the whole
transaction be rolled back?
Thanks,
A.
Similar Messages
-
JDBC, JMS and EJB transactions - possible problem?
Hello,
I am using Oracle 9, Weblogic 8.1 SP 4, MyEclipse and
XDoclet.
In my current project I have the following piece of code
in one of my message driven beans (code cited as pseudocode
without unnecessary details):
* @ejb.bean name="MyMessageProcessor"
* display-name="Display name for a MyMessageProcessor"
* jndi-name="ejb/MyMessageProcessor"
* description="Bean MyMessageProcessor"
* destination-type="javax.jms.Queue"
* transaction-type="Container"
* acknowledge-mode="Auto-acknowledge"
* subscription-durability="Durable"
* generate="false"
* @ejb.transaction type="Required"
public class MyMessageProcessor implements MessageDrivenBean, MessageListener {
public void onMessage(Message msg) {
try {
//obtaining connections to two different databases via JNDi
java.sql.Connection connOne =
((DataSource)ctx.lookup("DataSourceOne")).getConnection();
java.sql.Connection connTwo =
((DataSource)ctx.lookup("DataSourceTwo")).getConnection();
// performing some UPDATEs and INSERTs on connOne and connTwo
// calling some other methods of this bean
//creating the reply JMS message and sending it to another JMS queue
Message msgTwo = this.createReplyMessage(msg)
this.queueSender.send(msgTwo);
//commiting everything
this.queueSession.commit();
} catch (Exception ex) {
try {
if (this.queueSession!=null) this.queueSession.rollback();
} catch (JMSException JMSEx) {};
this.context.setRollbackOnly();
Some days ago (before the final remarks from my client) there used to be only one DataSource configurated on the basis of the
connection pool with non-XA jdbc driver. Everything worked fine
including the transactions (if anything wrong happend not only wasn't the replymessage sent, but also no changes were written
to database and the incomming message was thrown back to the my bean's
queue).
When I deployed the second DataSource I was informed by an error message, that only one non-transactional resource may
participate in a global transaction. When I changed both datasources
to depend on underlying datasources with transatcional (XA) jdbc drivers, everything stopped working. Even if
EJB transaction was theoretically successfully rolledbacked, the changed were written to the database
and the JMS message wasn't resent to the JMS queue.
So here are my questions:
1. How to configure connection pools to work in such situations? What JDBC drivers should I choose?
Are there any global server configurations, which may influence this situation?
2. Which jdbc drivers should I choose so that the container was able to rollback the database transactions
(of course, if necessary)?
3. Are there any JMS Queue settings, which would disable the container to send message back to the
queue in case of setRollbackOnly()? How should be the Queue configurated?
As I am new to the topic and the deadline for the project seems to be too close I would be grateful
for any help.
This message was sent to EJB list and JDBC list.
Sincerely yours,
Marcin ZakidalskiHi,
I found these information extremely useful and helpful.
The seperate transaction for sending messages was, of course, unintentional. Thanks a lot.
Anyway, I still have some problems. I have made some changes to the
code cited in my previous mail. These changes included changing QueueSessions
to non-transactional. I also set the "Honorate global transactions" to true.
I am using XA JDBC driver. After setting "Enable local transactions" to false
(I did it, because I assume that JDBC transactions should be part on the global
EJB transaction) I got the following error:
java.sql.SQLException: SQL operations are not allowed with no global transaction by default for XA drivers. If the XA
driver supports performing SQL operations with no global transaction, explicitly allow it by setting
"SupportsLocalTransaction" JDBC connection pool property to true. In this case, also remember to complete the local
transaction before using the connection again for global transaction, else a XAER_OUTSIDE XAException may result. To
complete a local transaction, you can either set auto commit to true or call Connection.commit() or Connection.rollback().
I have also inspected the calls of methods of bean inside of onMessage() method just to check, whether
the transactions are correctly initialized (using the weblogic.transaction.Transaction class).
My questions are as follows:
1. Any suggestions how to solve it? I have gone through the google answers on that problem and only
thing I managed to realize that JDBC must start its own transaction. Is there any way to prohibit it
from doing that? Can using setAutocommit(true/false) change the situation for better?
2. How to encourage the JDBC driver to be a part of EJB transaction?
3. As I have noticed each of ejb method has its own transactions (transactions have different
Xid). Each method of the bean has "required" transaction attribute. Shouldn't it work in such
way that if already started transaction exists it is used by the called method?
4. The DataSources are obtained in my application via JNDI and in the destination environment I will have slight
impact on the configuration of WebLogic. What is least problematic and most common WebLogic configuration which would
enable JDBC driver to participate in the EJB transaction? Is it the WebLogic configuration problem or can it be
solved programmically?
Currently my module works quite fine when "enable local transactions" for DataSources is set to true, but this way
I am loosing the ability to perform all actions in one transaction.
Any suggestions / hints are more than welcomed. This message was posted to jdbc list and ejb list.
Marcin -
I am getting the following error when attempting to INSERT the results of an "EXEC(@MDXQuery) at SSAS LinkedServer":
The requested operation could not be performed because OLE DB provider "MSOLAP" for linked server does not support the required transaction interface.
Here is code that illustrates what I am doing:
DECLARE @MDX varchar(max);
SET @MDX='
SELECT
[Measures].[Extended Service Count]
} ON COLUMNS,
NON EMPTY [Organization].[By Manufacturer].[Manufacturer]
ON ROWS
FROM (
SELECT
{[Organization].[Org Tree].&[2025],[Organization].[Org Tree].&[2040]} ON 0
FROM [MyCube]
/* Test 1 */
EXECUTE(@MDX) at SSASLinkedServer;
/* Test 2 */
DECLARE @ResultsB TABLE (
Manufacturer varchar(255)
, ExtendedServiceCount float
INSERT INTO @ResultsB (Manufacturer, ExtendedServiceCount) EXECUTE(@MDX) at SSASLinkedServer;
Test 1 succeeds, returning expected results, and Test 2 fails returning the error mentioned above.
Other articles I've found so far don't seem to apply to my case. I am not creating any explicit transactions in my code. When I use OPENQUERY, I am able to do the insert just fine, but not when I use EXEC @MDX at LinkedServer.
Unfortunately in some variations of the query, I run into the 8800 character limit on OPENQUERY, so I need to use this other approach.
Any ideas?
-Tab AllemanHi Tab,
In this case, SQL Server Analysis Services doesn’t support Distributed Transactions by design. Here is a similar thread about this issue for your reference, please see:
http://social.technet.microsoft.com/Forums/en-US/8b07be45-01b6-49d4-b773-9f441c0e44c9/olaplinked-server-error-msolap-for-linked-server-olaplinked-server-does-not-support-the?forum=sqlanalysisservices
One workaround is that use SQLCMD to execute the EXEC AT command and saved the results to a file, then import using SSIS.
If you have any feedback on our support, please click
here.
Regards,
Elvis Long
TechNet Community Support -
How to give #ejbCreate 'Required' transaction semantic
I'm can't get the #ejbCreate method on my BMP Entity to provide the 'Required' transactional semantic. The need is for a client to have a transaction that updates several EJBs and also creates one. But I'm finding that if the transaction rollsback the #ejbCreate is still persisted.
I have defined 'create' mewthod to be 'Required' in the container-transaction element of the deployment descriptor but this has not helped. Ie
<container-transaction>
<method>
<ejb-name>Order</ejb-name>
<method-name>create</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
The updates are clearly not affected because they are only persisted when #store is called which only happens if the transaction commits. But all the examples I have ever seen actually inserts DB records during #ejbCreate, and this seems to be happening in its own transaction - though I don't know why and haven't been able to actually confirm that in any case.
I'd really like to know how to declaratively define the appropriate transaction semantic, but failing that I was wondering if anyone knew whether it is safe to move the persistence for #ejbCreate into #store and just have #ejbCreate determine the PK?Its definitely the create that I want to define as having the "Required" semantic.
It doesn't seem to matter where I call it from (a SSB method with Required transaction or Struts Action that explicitly demarcates transaction), the #ejbCreate does not seem to join to the containing transaction - which it what is required (no pun).
Here is the code from #ejbCreate.
getDao()#create gets a JDBC connection and inserts a record into the DB.
public OrderPK ejbCreate (OrderModel aModel)
throws EjbCreateException {
log.debug("EjbCreate " + aModel);
model = aModel;
try {
return getDAO().create(aModel);
} catch(Exception ex) {
throw new EjbCreateException(null,ex,context); -
Different Exchange Rate between Daily Transactions and Tax Transactions
Hi All,
I would like to ask abount define Exchange Rate for tax calculation. I set our standard exchange rates (For Daily Transactions) by using exchange rate type 'M'. But I want to calculate the tax element using exchange rate type 'T'. It is because there is a different exchange rate which is used for Daily Transaction and Tax Transactions. Does anyone know a way of doing this in config to separate this exchange rate for tax calculation?
Thanks for any help,
JohnI think its a bit misleading...The requirement is to post an Invoice with a base taxable amount of Exchange Rate A and a tax amount of Exchange Rate B. The Base Currency is JPY and the System Currency is SGD. So the Report S_ALR_87012357 should see the amount in SGD there. The Issue is caused by the different exchange rate on the tax amount submitted by the Vendor Invoice.
Example: Vendor Invoice Amount: 926,413.00 JPY, then we created PO to Invoice with Base Currency JPYalso amounted 926,413.00 JPY. However, in the Vendor Invoice Amount, the Tax Chargeable is 923.00 SGD (based on their exchange rate 65.66 JPY per SGD). But our Exchange Rate (System Rate) is 63.49 JPY per SGD. How can we reflect the Tax Amount as 65.66 JPY but still the correct SGD amount is based on the Vendor Original Invoice Exchange Rate 65.66 and not the System Exchange Rate, 63.49 in the same Invoice Creation (MIRO)? -
Provide ALE and IDOC Faqs and all Transactions
Dear Experts,
I am new to ALE & IDOC.
Please provide ALE & IDOCs FAQs and all Transactions?
Thanks in advance.<b>FAQS</b>
A L E
Q: Our IDOC remains in status 51 ( not posted) while testing ALE setup by passing DEBMAS02 Idocs. The message 'Field KNA1-BRSCH is not an input field'. This is the Industry key. What are we missing?
A: Go to IMG - menu path IMG->LogisticsGeneral-> Logistics Basic Data: Business partners->Customers-> Control->Define Account groups and field selection for customer.
Select sold-to or ship-to. Select General Data. Select control and double click. Industry key is found here. Change the option to 'Optional Entry'.
Check OSS 5599. You may have to update view V_T078D also.
E D I / IDOC
Q:1 We created an EDI Vendor and created all required output conditions. However no IDOC is generated when PO is printed. Why?
A: Go to Header->output for the PO. The output type shall be '6'. The status shall be '1'. If the status is '0' check the timing. If the status is '2' , go to 'GOTO->Processing Log' and the explanation for non-generation of IDOC can be seen.
Q: How can we create / upload IDOC's from legacy system to SAP?
A: Third party tool Mercator may be used to convert Legacy files to Idoc format. Mercator provides an IDOC tree import facility, SAP provides the export facility. You can transfer the Idoc layouts from SAP to Mercator automatically and then map.
Q: We want to receive an outbound EDI 855 IDOC only if E2EDP20 -scheduling confirmation segment is present. Else get an "error" status preventing triggering the EDI subsystem.
A: User exit logic has to be added in function IDOC_INPUT_ORDRSP.
Set up a test flag and set it off when the IDOC header is read.
Turn the flag ON when the EDP20 segment is read.
Interrogate this flag when the next segment after EDP20 in the same IDOC comes in. If it is on ,you have an EDP20 coming in.
Issue an error status 51 with suitable message for whichever condition you don't want the IDOC to be processed, This will stop the IDOC from posting.
Q: Where ever PO is sent to the vendor via EDI, we want an acknowledgement of the PO by vendor. Which fields are updated and what should be my procedure?
A: Execute Program: IDOC_INPUT_ORDRSP
Process code: ORDR
Message type: ORDRSP
IDOC: ORDERS01
The confirmation process allows the supplier to return an acknowledgment. Only Dates and quantities can be changed The information is stored in the PO and can be viewed via Item->Confirmation->Overview. The PO can be flagged as 'confirmation required' so that Pos without acknowledgement receipt can be monitored. Control keys and tolerances (days and quantities) have to be customized.
Outbound:
Step 1. Application document is created when transaction is saved.
2. Message control is invoked.
3. Messages are processed by system.
4. Messages are Edited (if desired).
5. Output (ALE / EDI) is checked
6. Validate against Message control record from Partner Profile
7. Application Document is saved.
8. Entry NAST table is created for every selected output program
along with Medium & Timing.
9. Check for Process Immediately .
If (yes)
Determine Processing Program from TNAPR Table.
ELSE
Execute RSNASTED Program.
10. Read Partner Profile to determine Process Code.
11. Process Code points to the Function Module & Invoked.
12. IDoc is generated.
13. Check for ALE Request.
if (Yes)
Perform Filters, Conversions, Version Changes etc.
Else.
IDoc is stored in DATABASE.
INBOUND:
Step 1. EDI Subsystem creates an IDoc file from EDI Messages
2. Subsystem calls Functional Module EDI_DATA_INCOMING from startRFC program.
3. Data in Control Record is validate against the Partner Profile.
4. IDoc is generated in Database and syntax check is carried out.
5. IDoc file is deleted once file read.
6. Event PROCESSSTATE REACHED is triggered in Idoc Object Workflow.
7. Check for Process Immediately.
If NO
Execute RBDAPP01 Program
Else
Read Process Code from Partner Profile
Process Code Points to Function Module
Application Document Posted.
further help:
check url
http://www.sappoint.com/abap/ale.pdf
http://www.sappoint.com/abap/ale2.pdf
http://www.sapgenie.com/ale/configuration.htm
http://www.sappoint.com/abap/ale.pdf
http://www.sappoint.com/abap/ale2.pdf
http://www.sapdevelopment.co.uk/training
And also u can get lots of inof from the below link.
http://www.sapgenie.com/ale/why_ale.htm
Just follow the procedure
Sending System(Outbound ALE Process)
Tcode SALE ? for
a) Define Logical System
b) Assign Client to Logical System
Tcode SM59-RFC Destination
Tcode BD64 ? Create Model View
Tcode BD82 ? Generate partner Profiles & Create Ports
Tcode BD64 ? Distribute the Model view
Message Type MATMAS
Tcode BD10 ? Send Material Data
Tcode WE05 ? Idoc List for watching any Errors
Receiving System(Inbound ALE )
Tcode SALE ? for
a) Define Logical System
b) Assign Client to Logical System
Tcode SM59-RFC Destination
Tcode BD64 ? Check for Model view whether it has distributed or not
Tcode BD82 -- Generate partner Profiles & Create Ports
Tcode BD11 Getting Material Data
Tcode WE05 ? Idoc List for inbound status codes
ALE IDOC Steps
Sending System(Outbound ALE Process)
Tcode SALE ?3 for
a) Define Logical System
b) Assign Client to Logical System
Tcode SM59-RFC Destination
Tcode BD64 !V Create Model View
Tcode BD82 !V Generate partner Profiles & Create Ports
Tcode BD64 !V Distribute the Model view
This is Receiving system Settings
Receiving System(Inbound ALE )
Tcode SALE ?3 for
a) Define Logical System
b) Assign Client to Logical System
Tcode SM59-RFC Destination
Tcode BD64 !V Check for Model view whether it has distributed or not
Tcode BD82 -- Generate partner Profiles & Create Ports
Tcode BD11 Getting Material Data
Tcode WE05 !V Idoc List for inbound status codes
Message Type MATMAS
Tcode BD10 !V Send Material Data
Tcode WE05 !V Idoc List for watching any Errors
STEP 1)a Goto Tcode SALE
Click on Sending & Receiving Systems-->Select Logical Systems
Here Define Logical Systems---> Click on Execute Button
go for new entries
-System Name : ERP000
-Description : Sending System
-System Name : ERP800
-Description : Receiving System
press Enter & Save
it will ask Request
if you want new request create new Request orpress continue for transfering the objects
B) goto Tcode SALE
Select Assign Client to Logical Systems-->Execute
000--> Double click on this
Give the following Information
-Client : ERP 000
-City :
-Logical System
-Currency
-Client role
Save this Data
Step 2) For RFC Creation
Goto Tcode SM59-->Select R/3 Connects
Click on Create Button
RFC Destination Name should be same as partner's logical system name and case sensitive
to create the ports automatically while generating the partner profiles
give the information for required fields
RFC Destination : ERP800
Connection type: 3
Description
Target Host : ERP000
System No:000
lan : EN
Client : 800
User : Login User Name
Password:
save this & Test it & RemortLogin
STEP 3) Goto Tcode BD64 -- click on Change mode button
click on create moduleview
short text : xxxxxxxxxxxxxx
Technical Neme : MODEL_ALV
save this & Press ok
select your just created modelview Name :'MODEL_ALV'.
goto add message type
Model Name : MODEL_ALV
sender : ERP000
Receiver : ERP800
Message type :MATMAS
save & Press Enter
STEP 4) Goto Tcode BD82
Give Model View : MODEL_ALV
Partner system : ERP800
execute this by press F8 Button
it will gives you sending system port No :A000000015(Like)
STEP 5) Goto Tcode BD64
select the modelview
goto >edit>modelview-->distribute
press ok & Press enter
STEP 6) goto Tcode : BD10 for Material sending
Material : mat_001
Message Type : MATMAS
Logical System : ERP800
and Execute
STEP 7)goto Tcode : BD11 for Material Receiving
Material : 100-300
Message Type : MATMAS
and Execute --> 1 request idoc created for message type Matmas
press enter
Here Master Idoc set for Messge type MATMAS-->press Enter
1 Communication Idoc generated for Message Type
this is your IDOC
Change Pointers
how to change the description of a material using ALE Change Pointers.
I will give the following few steps
1) Tcode BD61---> check the change pointers activated check box
save and goback.
2) Tcode BD50---> check the MATMAS check box save and comeback.
3) Tcode BD51---> goto IDOC_INPUT_MATMAS01 select the checkbox save and comeback.
4) Tcode BD52---> give message type : matmas press ok button.
select all what ever you want and delete remaining fields.
save & come back.
5) 5) go to Tcode MM02 select one material and try to change the description and save it
it will effects the target systems material desciption will also changes
6) goto Tcode SE38 give program Name is : RBDMIDOC and Execute
give Message type : MATMAS and Executte
ALE/IDOC Status Codes/Messages
01 Error --> Idoc Added
30 Error --> Idoc ready for dispatch(ALE Service)
then goto SE38 --> Execute the Program RBDMIDOC
29 Error --> ALE Service Layer
then goto SE38 --> Execute the Program RSEOUT00
03 Error --> Data Passed to Port ok
then goto SE38 --> Execute the Program RBDMOIND
12 Error --> Dispatch ok
Inbound Status Codes
50 Error --> It will go for ALE Service Layer
56 Error --> Idoc with Errors added
51 Error --> Application Document not posted
65 Error --> Error in ALE Service Layer
for 51 or 56 Errors do the following steps
goto WE19 > give the IDOC Number and Execute>
Press on Inbound function Module
for 65 Error --> goto SE38 --> Execute the Program RBDAPP01 then your getting 51 Error
ALE/ IDOC
http://help.sap.com/saphelp_erp2004/helpdata/en/dc/6b835943d711d1893e0000e8323c4f/content.htm
http://www.sapgenie.com/sapgenie/docs/ale_scenario_development_procedure.doc
http://edocs.bea.com/elink/adapter/r3/userhtm/ale.htm#1008419
http://www.netweaverguru.com/EDI/HTML/IDocBook.htm
http://www.sapgenie.com/sapedi/index.htm
http://www.sappoint.com/abap/ale.pdf
http://www.sappoint.com/abap/ale2.pdf
http://www.sapgenie.com/sapedi/idoc_abap.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/0b/2a60bb507d11d18ee90000e8366fc2/frameset.htm
http://help.sap.com/saphelp_erp2005/helpdata/en/78/217da751ce11d189570000e829fbbd/frameset.htm
http://www.allsaplinks.com/idoc_sample.html
http://www.sappoint.com/abap.html
http://help.sap.com/saphelp_erp2004/helpdata/en/dc/6b835943d711d1893e0000e8323c4f/content.htm
http://www.sapgenie.com/sapgenie/docs/ale_scenario_development_procedure.doc
http://edocs.bea.com/elink/adapter/r3/userhtm/ale.htm#1008419
http://www.netweaverguru.com/EDI/HTML/IDocBook.htm
http://www.sapgenie.com/sapedi/index.htm
http://www.allsaplinks.com/idoc_sample.html
<b>Reward Points if it helps,</b>
Satish -
Problem using passivateStateForUndo when having taskflow requires-transacti
HI All,
i'm trying to use oracle.jbo.server.ApplicationModuleImpl.passivateStateForUndo / activateStateForUndo methods to make and restore some application savepoints.
The problem is that, when i try to use these methods from adf bounded taskflow, (placed on a page as a region ) i receive:
java.lang.NullPointerException
at oracle.jbo.server.ApplicationModuleImpl.passivateStateForUndo method
I made some investigation of the problem and founded that this NullPointerException is caused by taskflow transaction settings "requires-transaction"
If i put the taskflow transaction setting on default , no exception is thrown and passivateStateForUndo / activateStateForUndo methods worked fine.
Is that a bug, and does somebody have an idea how can i solve this ?
I work with TP4.
Regards,
KrasimirHi,
why don't you use the declarative save-point feature in taskflows as described in chapter 18 of the documentation ?
"If you want changes the user made within the called ADF bounded task flow to be discarded when it is exited, you can specify the restore-save-point option on the task flow return activity. The ADF Controller will roll back to the previous ADF Model save point that was created when the ADF bounded task flow was entered. The restore-save-point option applies only to cases when an ADF bounded task flow is entered by joining an existing transaction (either the requires-existing-transaction or requires-transaction option is also specified) and a Save Point is created upon entry."
Frank -
Mix Local and Global Transaction using XA Driver for Oracle
Hi all,
We are trying to use a XA Driver which can support both local as well as global
transaction. We tried using the Weblogic jDriver (XA Driver) type 2 that comes
along with Weblogic installation but unfortunaltely it cannot mix local as well
as global transaction.
Please let me know in case we have any XA JDBC driver for Oracle Database which
supports both local and global transaction together.
Thnx,
Kumar
Environment:
Weblogic 8.1 server
Database used : Oracle8iMost database drivers can support local and global transactions, with some
restrictions.
The JDBC spec has been changed to require compliant drivers to let the
application
know if they try to start a global transaction while a local transaction has
not been
completed (or vice verse). So most of the database drivers have been
changed to enforce
this restriction (breaking a lot of code that is out there).
"Kumar Raman" <[email protected]> wrote in message
news:4033457c$[email protected]..
>
Hi all,
We are trying to use a XA Driver which can support both local as well asglobal
transaction. We tried using the Weblogic jDriver (XA Driver) type 2 thatcomes
along with Weblogic installation but unfortunaltely it cannot mix local aswell
as global transaction.
Please let me know in case we have any XA JDBC driver for Oracle Databasewhich
supports both local and global transaction together.
Thnx,
Kumar
Environment:
Weblogic 8.1 server
Database used : Oracle8i -
What is business add-ins and business transaction events
Dear All,
Would you mind tell me what it sht business add-ins and business transaction events ?
i still not understand about this after i read the training material
Regards
LukeHi LukeWong ,
BAdi:
SAP Business Add-Ins (BAdIs) are one of the most important technologies used to adapt SAP software to specific requirements. BAdIs were introduced with Release 4.6 and replace function module exits. This technology is not limited to SAP applications. BAdI calls can be integrated in customer applications. These can then be enhanced by other customer applications. In the various SAP applications, BAdI calls are implemented at places where enhancements are appropriate.Business add-ins are enhancements to the standard version of the system. They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industries often require special functions, SAP allows you to predefine these points in your software.
As with customer exits, two different views are available:
· In the definition view, an application programmer defines exit points in a source that allow specific industry sectors, partners, and customers to attach additional coding to standard SAP source code, without having to modify the original object.
· In the implementation view, the users of Business Add-Ins can customize the logic they need or use a standard solution, if one is available.
In contrast to customer exits, Business Add-Ins no longer assume a two-level infrastructure (SAP and customer solutions), but instead allow for a multi-level system landscape (SAP, country-specific versions, industry solutions, partner, customer, and so on). You can create definitions and implementations of Business Add-Ins at any level of the system landscape.SAP guarantees the upward compatibility of all Business Add-In interfaces. Release upgrades do not affect enhancement calls from within the standard software nor do they affect the validity of call interfaces. You do not have to register Business Add-Ins in SSCR.
The Business Add-In enhancement technique differentiates between enhancements that can only be implemented once and enhancements that can be used actively by any number of customers at the same time. In addition, Business Add-Ins can be defined according to filter values. This allows you to differentiate between Add-In implementations using the filter Country or other criteria.
The enhancement technique is set up in such a way that it is possible to define interfaces for ABAP soure code, screens, GUI interfaces, and tables. These allow customers to include their own enhancements in the standard. A single Business Add-In contains all of the interfaces necessary to implement a specific task.
BADI is just an object-oriented version of user-exit. Instead of entering program code into some function module (as in customer-exit), you define some class which has to implement predefined methods and those methods are fired at predefined points just like an old user-exit. Some BADI can have multiple independent implementations which is much better for software deployment as several developers can implement the same BADI independently. BADI/UserExists are used to enhance R/3 For customer Needs.
Actually there is no transaction to find when and where the BADI
is called.
1. You can see the BADI description to find why it is called.
2. Once you implemented and activated the BADI, put some break points
in the BADI and see "where else used" option to check in what all
programs this BADI is called. In the ITS debug, when you are doing
the operation what exactly the BADI description tells, it will take
to the break points and you have to do manually debug the whole thing.
I know its bit difficult to do manual debug the whole thing, it
takes lot of time, but you have to be very patience when you are
dealing with BADI's.
Transaction SE18 is the BADI equivalent of transaction SMOD
Transaction SE19 is the BADI equivalent of transaction CMOD .
To find the BADI to be implemented and then implement this via SE19.
These steps should enable you to find any BADI related to any transaction in a matter of minutes.
Procedure 1:
1) Go to the transaction SE37 to find your function module.
2) Locate the function SXV_GET_CLIF_BY_NAME.
3) Put a breakpoint there.
4) Now open a new session.
5) Go to your transaction. 6) At that time, it will stop this function.
7) Double click on the function field EXIT_NAME.
8) That will give you name of the BADI that is provided in your transaction.
Business Add-Ins
Procedure 2:
1) Goto se24 (Display class cl_exithandler)
2) Double click on the method GET_INSTANCE.
3) Put a break point at Line no.25 (CASE sy-subrc).
4) Now Execute SAP standard transaction
5) Press the required button for which you need to write an exit logic, the execution will stop at the break point.
6) Check the values of variable 'exit_name', it will give you the BADI name called at that time.
7) This way you will find all the BADIs called on click of any button in any transaction
Check this blogs 2 find a BADI:
How To Define a New BAdI Within the Enhancement Framework (Some Basics About the BAdI,BAdI Commands in ABAP,
When to Use a BAdI?)
/people/thomas.weiss/blog/2006/04/03/how-to-define-a-new-badi-within-the-enhancement-framework--part-3-of-the-series
How to implement a BAdI And How to Use a Filter
/people/thomas.weiss/blog/2006/04/18/how-to-implement-a-badi-and-how-to-use-a-filter--part-4-of-the-series-on-the-new-enhancement-framework
Introducing Business Add-Ins
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/f3202186-0601-0010-6591-b832b1a0d0de
How to implement BAdi in Enhancement Framework
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/d0456c54-0901-0010-f0b3-cd765fb99702
Business Add-Ins
http://help.sap.com/saphelp_47x200/helpdata/en/ee/a1d548892b11d295d60000e82de14a/frameset.htm
BAdI: Customer-Defined Functions in the Formula Builder
http://help.sap.com/saphelp_nw04/helpdata/en/04/f3683c05ea4464e10000000a114084/content.htm
Difference Between BADI and User Exits
http://www.sap-img.com/abap/difference-between-badi-and-user-exits.htm
To Use BADI - Business Add In you need to Understand ABAP OO Interface Concept
http://www.sap-img.com/abap/business-add-in-you-need-to-understand-abap-oo-interface-concept.htm
Business Transaction Events
Business Transaction Events (Open FI) The Open FI enhancement technique was developed in the Financial Accounting component. Open FI is based upon the following principles: Application developers must define their interface in a function module, an assignment table is read in the accompanying (generated) code, and the customer modules assigned are called dynamically. This technique differentiates between enhancements that are only allowed to have one implementation and enhancements that can call multiple implementations in any sequence desired. Both industry-specific and country-specific enhancements may be defined.
SAP business transaction events are one type of customer enhancements provided by SAP! We can access the business transaction events using FIBF.Next we have to find the process interface for duplicate invoice check!
check this blog for details on SAP business transaction events
Business Transaction Events
http://fuller.mit.edu/user_exits/business_transaction_event.htm
FI Enhancement Technique How-To-Guide on the Usage of Business Transaction Events (BTE)
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/207835fb-0a01-0010-34b4-fef1240ba9b7
Creation of Events via Business Transaction Events
http://help.sap.com/saphelp_nw04/helpdata/en/3b/7f3e8be57c11d1951f0000e82dec10/content.htm
In SAP R/3 you must activate the business transaction events (BTEs) for Availability Check Using SAP R/3. To set this indicator in SAP R/3:........
http://help.sap.com/saphelp_crm40/helpdata/en/b6/de3efc6bbcdc4b948d466857a10323/content.htm
cheers!
gyanaraj
****Pls reward points if u find this helpful -
Difference between Technical and Business transaction archiving?
Hi Guys,
Can any one explain the difference between Technical and business transaction archiving with practical example?
When we will go for Technical archiving and when we will go for business transaction archiving?
Thanks,
Vinod.Hello Vinod,
To me, Archiving Objects can be separated into 3 categories; Technical, Master Data and Transactional. Technical Archiving would include archive objects such as IDOC's, BC_SBAL (application logs), BDCLOGPROD (batch input logs), etc. Master Data Archive Objects would include MM_MATNR (material master), FI_ACCPAYB (vendor master data), FI_ACCRECV (customer master data), etc. And, Transactional Archive Objects would include FI_DOCUMNT (financial documents), SD_VBAK (sales orders), MM_EKKO (purchase orders), etc.
Techincal Archive Objects usually are easier to implement and require less resources. Master Data and Transactional Archive Objects usually take longer to implement as they will require business testing and sign-off.
This is a high-level explanation and I hope it helps answer your questions.
Best Regards,
Karin Tillotson -
Access Custom Attributes in JavaScript and in Transactions
Hello,
I try to work with custom attributes. I've problems accessing the values in JavaScript and in transactions, but it works fine within .irpt pages.
What's the trick?
For a custom attribute called PLANT, can I write something like this in JavaScript?
var p = ;
Is there a way to access custom attributes in the Link Editor of an Action Block?
Kind Regards,
MatthiasHi Matthias,
it is not possible to integrate that kind of MII variables in JavaScript like you discribed before.
You are right that this kind of expression is possible in the .irpt file. The reason why it is working in the .irpt
but not in the .js is, that the MII script parser is only replacing in HTML content. Everywhere you have
scripting the parser will not replace the {...} markings (since the curly brackets also show start/end of functions aso.).
Variables to JavaScript
The easiest Way to get those variables is to create hidden fields in the .irpt file that you can access via JavaScript.
For example:
<input type="hidden" id="hidden_plant" value="{PLANT}" />
This will be parsed to (e.g.)
<input type="hidden" id="hidden_plant" value="Karlsruhe/DE" />
Now you can access this value in JavaScript via:
document.getElementById( "hidden_plant" ).value;
Variables to Transactions
To parse custom variables to a transaction you first have to specify corresponding transaction variables in the
transaction itself. After saving the transaction you can map those variables to Parameters in the Xacute-Query-Editor.
Including this transaction to your webpage you can simply assign the required value to the corresponding parameter.
For example if you mapped the Plant variable of the transaction to Param.1 you can specify the information in the .irpt
like:
<applet id="trx_test" ....>
<... />
<param name="Param.1" value="{PLANT}" />
</applet>
Another possibility is to set the value dynamically via JavaScript if you use:
document.getElementById( "trx_test" ).getQueryObject().setParam( 1, "Karlsruhe/DE" );
Native access to user variables via the BLE is not possible (as far as I know).
I hope this is what you wanted to hear?
Best Regards
Sebastian
Edited by: Sebastian Holzschuh on Jun 10, 2008 12:16 PM -
How bapi different from session and call transaction?
how bapi different from session and call transaction?
thanks in advance.For one, Batch Data Communication (BDC) is older. Business Application Programming Interface (BAPI) came later, about 10 years ago (you can see this already from the name, which contains marketese like "business" ).
More important though, they are different technologies. With BDC you build the "batch input transaction" yourself, with an ABAP program which creates the "batch input session" ("Batch-Input-Mappe" in german). You then take that session, like an object, and "run" it on a system (most of the time, this is done on a local system by the administrators, after it has been tested for correctness).
With BAPI, a system (local or remote) exposes its interface to you through some kind of Remote Function Call (RFC). Practically, it tells you: "What do you want to do? Insert that data into Materials Management? Here is the function and the the parameters you have to use for each record". You only work with the Interface - the exposed function. How this function works does not have to interest you. You don't have sessions to "run", you fire your function calls filled with data, one after another and you're done.
BAPI can be run remotely. With BDC, you probably have to call the administrators of the remote system and send them the session you created for them to run. With BDC you go through the whole transaction in one BDC session, with BAPI you may need more than one "BAPI calls" to do this.
With BAPI you don't fill obcure field names with values, you just fill the parameters. You can use a BAPI from inside your ABAP program to let a "business object" do some clearly defined work for you, then you can continue with your code doing other things. You don't do this with BDC. With BDC you write a dedicated program that creates the "session", which is then executed separately.
Batch Data Communication (BDC) is the oldest batch interfacing technique that SAP provided since the early versions of R/3. BDC is not a
typical integration tool, in the sense that, it can be only be used for uploading data into R/3 and so it is not bi-directional.
BDC works on the principle of simulating user input for transactional screen, via an ABAP program. Typically the input comes in the form of a flat file. The ABAP program reads this file and formats the input data screen by screen into an internal table (BDCDATA). The transaction is then started using this internal table as the input and executed in the background.
In Call Transaction, the transactions are triggered at the time of processing itself and so the ABAP program must do the error handling.
It can also be used for real-time interfaces and custom error handling & logging features. Whereas in Batch Input Sessions, the ABAP
program creates a session with all the transactional data, and this session can be viewed, scheduled and processed (using Transaction SM35) at a later time. The latter technique has a built-in error processing mechanism too.
Batch Input (BI) programs still use the classical BDC approach but doesnt require an ABAP program to be written to format the
BDCDATA. The user has to format the data using predefined structures and store it in a flat file. The BI program then reads this and
invokes the transaction mentioned in the header record of the file.
Direct Input (DI) programs work exactly similar to BI programs. But the only difference is, instead of processing screens they validate
fields and directly load the data into tables using standard function modules. For this reason, DI programs are much faster (RMDATIND - Material Master DI program works at least 5 times faster) than the BDC counterpart and so ideally suited for loading large volume data. DI programs are
not available for all application areas.
Business Add-In (BADI) are a new SAP enhancement technique based on ABAP Objects.
They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industries often require special functions, SAP allows you to predefine these points in your software.
As with customer exits two different views are available:
In the definition view, an application programmer predefines exit points in a source that allow specific industry sectors, partners, and customers to attach additional software to standard SAP source code without having to modify the original object.
In the implementation view, the users of Business Add-Ins can customize the logic they need or use a standard logic if one is available.
In contrast to customer exits, Business Add-Ins no longer assume a two-level infrastructure (SAP and customer solutions), but instead allow for a multi-level system landscape (SAP, partner, and customer solutions, as well as country versions, industry solutions, and the like). Definitions and implementations of Business Add-Ins can be created at each level within such a system infrastructure. -
Hi All,
I am trying to execute a stored procedure and store its result in an excel.
My query to execute stored proc and store sresults in excel
INSERT INTO
openrowset('Microsoft.ACE.OLEDB.15.0',
'Excel 8.0;Database=C:\TC\DataAnalysisFiles\DataAnalysisResult.xls;OLE DB Services=-4','select * from [Sheet1$]')
EXEC UspUnitTest_Test_CheckDuplicateModelNumberSerialNumber
I am getting error
The requested operation could not be performed because OLE DB provider "Microsoft.ACE.OLEDB.15.0" for linked server "(null)" does not support the required transaction interface.
I have enabled below things by running scripts
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1
GO
Please help and let me know if this can be resolved
Supriya Thigalebecause OLE DB provider "Microsoft.ACE.OLEDB.15.0" for linked server "(null)" does not support the
required transaction interface.
Hello,
When you insert data from SQL Server into a linked server, then a distributed transaction should be started and here it seems this fails.
See
Distributed Transactions (Database Engine) for more Details +
Distributed Queries
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Separate sales and return transaction for POSDM interface to ECC
Hi experts
We have a requirement to separate sales and return transaction movement types (251 and 252) for even the same articles.
Currently, we are using two-step process but the aggregation will combine both sales and return transactions together.
(For example, if i sell 2 article A and return 1 article A, the system will aggregate to selling only 1 article A with movement type 251.
But we want to have movement type 251 posting for 2 article A, and movement type 252 posting for 1 article A.)
Would you have any recommendation in terms of configuration?
Thanks a lot for that.
BR
DomHi Rashi Gaur,
Yes, As already explained by Vikrant, You Can create a separate task group for sales and assign that to sales item type (2001) and Create separate task group for returns and assign that to return item type (2801). This can be performed in two-step agregation process. The sales records will be in and returns will be .
Thanks and Regards,
Ramesh D -
Hi,
I have a application with CMPs, and in my iAS there are 5 Data Sources.
How to configure an application to access a Data Source ?
Jordi Pinyol Essi Projects
Ingeniero de Desarrollo
[email protected] t +34 977 221 182
http://www.essiprojects.com f +34 977 230 170Hello,I need to change at runtime the properties of
the connection, because my database has several users,
I am working with CMP EJB . How could I do it?
Thanks in advanceYou may write your own data source wich you will pass required data (user name) to through some thread oriented storage...
class Store {
static Map cache = new HashMap();
static void setUserName(String userName) {
cache.put(new Integer(Thread.currentThread.hashCode()), userName);
static String gerUserName() {
return (String)cache.get(new Integer(Thread.currentThread.hashCode()));
EJB:
setEntityContext(EC ec) {
Store.setUserName(ec.getCallerPrincipal().getName());
YourDS:
getConnection() {
return ds.getConnection(Store.getUserName(), ...);
...
Maybe you are looking for
-
PL/SQL Hierarchical Profiler: plshprof output - meaning of Ind% column
Hi, During analysis of an PL/SQL Performance issue I started using the DBMS_HPROF Profiler, but could not find a good source of information about interpreting the out html-files. I went through the Database advanced Application Developers Guide chapt
-
Hi Friends, I got an error while executing the writeback Template.I am using simple SH schema. Please Help me to fix the error. The Template I have given is below.. <?xml version="1.0" encoding="utf-8" ?> <WebMessageTables xmlns:sawm="com.siebel.anal
-
I need to merge my apple accounts to get proper function of iCloud and iWork apps
I like so many people now have two apple ids. Becase I was a mobile me subsriber and I had a itunes account. The migration from me.com to icloud.com created another apple id. So if I want my apps and music i have purchased over years i have to use
-
Mozilla FireFox opens but freezes right away
Hi guys,I don't know if you guys can help me with this problem but,my Mozilla FireFox was working yesterday 6/11 and I turned my computer on today and tried to browse the internet and my FireFox opened to my homepage and when I went to type in someth
-
Can i directly buy an unlocked iphone from apple retail store?
can i directly buy an unlocked iphone from apple retail store?