Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Creating a background job that runs once per execution and cancel previous ones if needed

Former Member
0 Kudos

Hi everyone:

I have a performance issue with SAP ECC in my company. My leader states that there's a way to enforce that a background job can run once and, if there's any running instances running at the time the new program starts, they'll cancelled.

I talked with my BASIS guy and told me that there's no such option in SAP ECC. Also investigated inside the application

Can you help me giving some light regarding this feature? I read several documentation regarding the background jobs creation and didn't found something helpful.

My current version is SAP ECC 6.0 SP 29. If you need more information please let me know.

I appreciate you help in advance. Warm regards

Lorenzo Martín Olmos

1 ACCEPTED SOLUTION

matt
Active Contributor

Your Basis guy is right. There is no built in way of doing this, you have to do it programmatically. If your leader says there's a way, to why not asking him what the way is?

This is, in fact, a FAQ. You should search on how to ensure only one instance of a program runs at a time. The usual way is to check if another instance is running, and then abort - rather than start a new instance. You seem to want to do it the other way - at the start of the program, cancel any other running instances. That can also be done using similar techniques, but is a bit more unusual. It depends what the program actually does.

The clue in reaching an answer is to think about how you would like, logically, such a program to work. The figure out mechanisms that will allow this. Hint: in SM37, you can cancel jobs, so it must be possible programmatically...

5 REPLIES 5

matt
Active Contributor

Your Basis guy is right. There is no built in way of doing this, you have to do it programmatically. If your leader says there's a way, to why not asking him what the way is?

This is, in fact, a FAQ. You should search on how to ensure only one instance of a program runs at a time. The usual way is to check if another instance is running, and then abort - rather than start a new instance. You seem to want to do it the other way - at the start of the program, cancel any other running instances. That can also be done using similar techniques, but is a bit more unusual. It depends what the program actually does.

The clue in reaching an answer is to think about how you would like, logically, such a program to work. The figure out mechanisms that will allow this. Hint: in SM37, you can cancel jobs, so it must be possible programmatically...

Former Member
0 Kudos

Hi Matthew and thanks for you comments

I asked my leader about this before, but didn't know how to accomplish that. The functionality was made by another programmer, but he doesn't work here anymore.

You're right, my approach is to ensure one instance of a program before the start of the program.

Let me dive a little about the SM37 mechanism to cancel jobs. I'll update as soon as I have any updates.

Thanks again for your comments.

Lorenzo Martin Olmos

So since that person left no one has access to the programs anymore? How are they maintained then? This story has so many holes...

+1 to Matthew and Philip. Before "diving" just stop for a second and understand what you are trying to achieve and what is the logic. It is a very, very, very bad idea to design a process with forcing a job to be cancelled. As Matthew correctly noted, if some job can only have one instance then it is enforced by not starting new instances, not by cancelling an existing one.

Also - is no one looking at the root cause of the performance issue? This seems like a band-aid to me. Maybe instead look into what is actually causing the issue.

0 Kudos

Well said 🙂

Phillip_Morgan
Contributor

Hi,

More than looking at the "SM37 mechanism", check out the function modules that create, launch and delete jobs.

...And how do you make sure that only one user is modifying a record? A lock. Put a lock when the job (or program) is running. Test it everytime. If there is already a lock, don't run. I think there is even a lock object for this. Else just create one...