Aborting Processes In Bpm
Hello,
We have been using Oracle BM Studio(Version: 10.3.1.0, Build: #94375 to be precise). I have a problem I'd like to share, I have been searching the forums, but could not find a solution to this. I have a grab activity, which grabs a parent instance. When the instance is grabbed, I am trying to kill te child processes of it one by one, via some notification wait at the child process, with the optional method of the grab activity. (The child pocess does the same job, if needed). But whatever I did, I could not get the message to be receieved at the child process. There is no exception thrown, I keep sending the message by 'Notification.send', but nothing happens. I used different versions of Notification.send with different number of parameters, I used the external, parent, internal, child approaches in the message wait activity. But I still could not succeed in making the child process be aborted. I dont want the parent of all processes to be aborted, it must end normally, but the children be killed when the grabbed parent instance is routed. Below is a portion of my code that I have been playing with for a while. Any idea what I might be doing wrong?
if(children != null && children.keys != null) {
foreach (child in children.keys) {
if( !children[child].indexOf(SOME_CONSTANT) == 0 ) {
try{
String instanceId = children[child].split(delim : "@")[0];
Notification.send(instanceId, "NotificationWaitSelfAbortParent", "In", null);
'5s'.sleep();
Notification.send(children[child], "NotificationWaitSelfAbortParent", "In", null);
}catch(Throwable t){
t.printStackTrace();
throw t;
Regards
Edited by: user10745623 on 27.Ara.2011 05:40
Edited by: user10745623 on 27.Ara.2011 05:41
Hi,
The other way didn't work because you are using an optional method. Optional methods are read-only (that is to say, that the transaction will be rolled back). When you send the notification using the Notification.send component, the notification and child instance processing is getting done in the same transaction.
I guess that now you are using PAPI to grab the child instances. PAPI components open a new transaction per operation. Therefore, PAPI invocations will succeed even if you are invoking them in a read-only method.
Hope this helps,
Ariel
Similar Messages
-
How to kill an instance process in BPM studio 6.0
Hi i'm Fabio.
I'm working on BPM Studio 6.0 and i need to complete a task.
I have an instance id process, and i need to create a new process in order to kill this istance id.
I read how to create a PAPI client (http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/papi/index.html?t=modules/papi/c_Writing_Your_First_Java_PAPI_Program.html) but it doesn't work for my purpose.
First of all, i understood that i have to follow these step:
* Import the required libraries.
* Create a process service.
* Create a process service session.
* Perform operations with PAPI.
* Close the process service.
Now, i'm working on my xpdl file and i'm using the Standard Module "Fuego" and my plan is to create a process servcie, a process service session and then operate with PAPI.
But using the PAPI module include in the BPM studio 6.0 i'm no able to load the library for the session import fuego.papi.ProcessServiceSession;
so i'm worng something. Could you tell me how can menage this problem? Really do i need a session? Is possible to abort an istance process in BPM studio or i need to load my ear project in Enterprise environment and then kill my instance process? Thanks, regards Fabio.Thanks Dan, i read your suggestion but my boss was to implement a different solution:
package hp.abort.process;
import fuego.boot.*;
import fuego.papi.CommunicationException;
import fuego.papi.InstanceInfo;
import fuego.papi.InstanceId;
import fuego.papi.ProcessService;
import fuego.papi.ProcessServiceSession;
import fuego.papi.OperationException;
import java.util.Properties;
import javax.transaction.*;
import java.lang.Exception;
public class AbortProcess {
public static void main(String[] args) {
/////////////////// API Initialization ///////////////////
Properties configuration = new Properties();
configuration.setProperty(ProcessService.DIRECTORY_ID, "default");
configuration.setProperty(ProcessService.PROJECT_PATH, "C:/Documents and Settings/Administrator/AlbpmWorkspace/EarOMatic");
configuration.setProperty(ProcessService.WORKING_FOLDER, "C:/tmp");
try {
ProcessService processService = ProcessService.create(configuration);
/////////////////// Establish a session ///////////////////
ProcessServiceSession session = processService.createSession("adminEarOMatic", "adminEarOMatic", "localhost");
/////////////////// Operate with PAPI ///////////////////
for (String processId : session.processesGetIds()) {
System.out.println("\n Process: " + processId);
for (InstanceInfo instance : session.processGetInstances(processId) ) {
System.out.println(" -> " + instance.getId());
System.out.println("ActivityName -> " + instance.getActivityName());
System.out.println("ActivityId -> "+ instance.getActivityId());
//Problema: nn vuole ActivityId ma Process Id
session.activityAbort("/CreateEurekaSRService#Default-1.0/eomWait","/CreateEurekaSRService#Default-1.0/1/0@EarOMatic");
/////////////////// Close the session ///////////////////
session.close();
/////////////////// Release API Resources ///////////////////
processService.close();
} catch (CommunicationException e) {
System.out.println("Could not connect to Directory Service");
e.printStackTrace();
} catch (OperationException e) {
System.out.println("Could not perform the requested operation");
e.printStackTrace();
Now, i got the following exception:
Local folder C:/tmp\system\Schema-4154784351820594721\catalogs found.
Loading catalogs from local folder: C:/tmp\system\Schema-4154784351820594721\catalogs
0 jars found locally.
[CatalogMgrCache] =======================
Registering CatalogMgr [EarOMatic] ...CatalogManagerCache 10390580:
Managers:
Counters:
[CatalogMgrCache] =======================
CatalogMgr [EarOMatic] REGISTERED!CatalogManagerCache 10390580:
Managers:
{EarOMatic=fuego.util.LocalCatalogManager@106df95}
Counters:
Process: /AbortInstanceProcessService#Default-1.0
Unreachable Engine Tolerance (seconds):
by default: 0
to be used: 0
This papi client will not cache exceptions which imply that an engine could not be reached.
Changing InstanceCache Entry[processId=/AbortInstanceProcessService#Default-1.0, state=0] to 3
Changing InstanceCache Entry[processId=/AbortInstanceProcessService#Default-1.0, state=3] to 2
Process: /CreateEurekaSRService#Default-1.0
Changing InstanceCache Entry[processId=/CreateEurekaSRService#Default-1.0, state=0] to 3
Changing InstanceCache Entry[processId=/CreateEurekaSRService#Default-1.0, state=3] to 2
-> /CreateEurekaSRService#Default-1.0/1/0
ActivityName -> eomWait
Adding local catalog for project: 1
ActivityId -> /CreateEurekaSRService#Default-1.0/eomWait
Exception in thread "main" fuego.server.exception.InvalidIdRuntimeException: Invalid identification.
Detail:Invalid identification (Identification value: /CreateEurekaSRService#Default-1.0/eomWait)
at fuego.server.ActiveProcessImpl.getActivity(ActiveProcessImpl.java:632)
at fuego.server.execution.microactivity.AbstractProcessExecutionHandler.getExecutableActivity(AbstractProcessExecutionHandler.java:58)
at fuego.server.AbstractProcessBean.abortActivity(AbstractProcessBean.java:3262)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at fuego.lang.JavaClass.invokeMethod(JavaClass.java:1410)
at fuego.lang.JavaObject.invoke(JavaObject.java:227)
at fuego.component.Message.process(Message.java:587)
at fuego.component.ExecutionThread.processMessage(ExecutionThread.java:778)
at fuego.component.ExecutionThread.processBatch(ExecutionThread.java:753)
at fuego.component.ExecutionThread.doProcessBatch(ExecutionThread.java:142)
at fuego.component.ExecutionThread.doProcessBatch(ExecutionThread.java:134)
at fuego.fengine.FEngineProcessBean.processBatch(FEngineProcessBean.java:248)
at fuego.component.ExecutionThread.work(ExecutionThread.java:837)
at fuego.component.ExecutionThread.run(ExecutionThread.java:408)
at fuego.component.CustomExecution.next(CustomExecution.java:172)
at fuego.component.ExecutorClient.invoke(ExecutorClient.java:118)
at fuego.papi.impl.rmi.ProcessControlProxy.abortActivity(ProcessControlProxy.java:407)
at fuego.papi.impl.rmi.ProcessControlProxyWrapper.abortActivity(ProcessControlProxyWrapper.java:683)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at fuego.papi.impl.AbstractProcessControlHandler.invokeInternal(AbstractProcessControlHandler.java:72)
at fuego.papi.impl.rmi.RMIProcessControlHandler.invoke(RMIProcessControlHandler.java:165)
at $Proxy23.abortActivity(Unknown Source)
at fuego.papi.impl.ProcessInstanceOperation.abortActivity(ProcessInstanceOperation.java:726)
at fuego.papi.impl.ProcessServiceSessionImpl.activityAbort(ProcessServiceSessionImpl.java:184)
at hp.abort.process.AbortProcess.main(AbortProcess.java:45)
Caused by: fuego.metadata.exception.InvalidIdException: Activity '/CreateEurekaSRService#Default-1.0/eomWait' was not found in process '/CreateEurekaSRService#Default-1.0'.
at fuego.metadata.Process.getActivity(Process.java:261)
at fuego.server.ActiveProcessImpl.getActivity(ActiveProcessImpl.java:629)
at fuego.server.execution.microactivity.AbstractProcessExecutionHandler.getExecutableActivity(AbstractProcessExecutionHandler.java:58)
at fuego.server.AbstractProcessBean.abortActivity(AbstractProcessBean.java:3262)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at fuego.lang.JavaClass.invokeMethod(JavaClass.java:1410)
at fuego.lang.JavaObject.invoke(JavaObject.java:227)
at fuego.component.Message.process(Message.java:587)
at fuego.component.ExecutionThread.processMessage(ExecutionThread.java:778)
at fuego.component.ExecutionThread.processBatch(ExecutionThread.java:753)
at fuego.component.ExecutionThread.doProcessBatch(ExecutionThread.java:142)
at fuego.component.ExecutionThread.doProcessBatch(ExecutionThread.java:134)
at fuego.fengine.FEngineProcessBean.processBatch(FEngineProcessBean.java:248)
at fuego.component.ExecutionThread.work(ExecutionThread.java:837)
at fuego.component.ExecutionThread.run(ExecutionThread.java:408)
I understood that tha activity id's format is not valid, but i obtained it just using the following function: instance.getActivityId()
Are you abel to give me some suggestion? Is it good this method to kill instance?
Thanks a lot, regard Fabio. -
BPM-70830 while deploying process in BPM Composer
Hi,
I got these errors When I try to deploy a bpm project which created and developed in BPM Composer(11.1.1.6.0). Can anyone help me? Thanks a lot!
There're already 34 processes successfully deployed with BPM Composer before this error occur, however, I can not deployed any new process with BPM Composer now.
=== DeploymentResult ====================================================
Type: VALIDATION
MSG: BPM-70830: Deployment validation failed. Cause: An unexpected error has occurred during deployment validation
1.- Fault severity: ERROR should fail: true
java.lang.NullPointerException
=== DeploymentResult End ================================================
[2012-05-03T00:06:54.355+08:00] [soa_server1] [NOTIFICATION] [] [oracle.bpm.composer.beans.toolbar.SarExportDialogBean] [tid: [ACTIVE].ExecuteThread: '1' for
queue: 'weblogic.kernel.Default (self-tuning)'] [userId: weblogic] [ecid: 11d1def534ea1be0:34621b1:1370e472584:-8000-0000000000000320,0] [APP: BPMComposer]
SEVERITY: ERROR
[2012-05-03T00:06:54.355+08:00] [soa_server1] [ERROR] [] [oracle.bpm.composer.beans.toolbar.SarExportDialogBean] [tid: [ACTIVE].ExecuteThread: '1' for queue:
'weblogic.kernel.Default (self-tuning)'] [userId: weblogic] [ecid: 11d1def534ea1be0:34621b1:1370e472584:-8000-0000000000000320,0] [APP: BPMComposer] [[
java.lang.NullPointerException
at oracle.soa.scac.ValidateComposite.checkInterfaceInWsdlManager(ValidateComposite.java:388)
at oracle.soa.scac.ValidateComposite.validateComponentTypeReferences(ValidateComposite.java:980)
at oracle.soa.scac.ValidateComposite.validateComponentTypeServicesReferences(ValidateComposite.java:1012)
at oracle.soa.scac.ValidateComposite.doValidation0(ValidateComposite.java:502)
at oracle.soa.scac.ValidateComposite.doValidation(ValidateComposite.java:481)
at oracle.bpm.deployment.impl.ScacDeploymentService.validateProject(ScacDeploymentService.java:223)
at oracle.bpm.deployment.impl.ScacDeploymentService.generateSarFile(ScacDeploymentService.java:85)
at oracle.bpm.pml.service.impl.ComposerMetadataServiceImpl.generateSarFile(ComposerMetadataServiceImpl.java:369)
at oracle.bpm.composer.service.ProjectDeploymentService.generateSarFile(ProjectDeploymentService.java:288)
at oracle.bpm.composer.beans.toolbar.SarExportDialogBean.generateSarFile(SarExportDialogBean.java:563)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at org.apache.myfaces.trinidadinternal.taglib.listener.FileDownloadActionListener.processAction(FileDownloadActionListener.java:121)
at oracle.adfinternal.view.faces.event.rich.FileDownloadActionListener.processAction(FileDownloadActionListener.java:77)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcast(UIXComponentBase.java:675)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:179)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:102)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:92)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:361)
at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:96)
at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:96)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.broadcastEvents(LifecycleImpl.java:1018)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:386)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:194)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.help.web.rich.OHWFilter.doFilter(Unknown Source)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.bpm.web.security.filter.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:56)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:106)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:446)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.bpm.composer.filter.MdsInitializationFilter.doFilter(MdsInitializationFilter.java:54)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.wls.filter.SSOSessionSynchronizationFilter.doFilter(SSOSessionSynchronizationFilter.java:291)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:179)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.bpm.composer.filter.OpenedProjectCheckFilter.doFilter(OpenedProjectCheckFilter.java:53)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.bpm.composer.filter.UrlHandlerFilter.doFilter(UrlHandlerFilter.java:40)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.caching.filter.AdfFacesCachingFilter.doFilter(AdfFacesCachingFilter.java:137)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Wishes
Eleven Xu
Edited by: Eleven.Xu on 2012-5-2 上午9:52You're right, I restarted the server again and again...
I have just opened the sr in metalink, it has been confirmed as a bug. Unfortunately there's no way to workaround. What I can do now is waiting for the solution. -
Hello,
First, are there any examples, tutorials, or documentation on how to create and run a BPEL process within BPM Studio (5.7) ?
I've gotten quite a ways by trial and error, but am having trouble running / testing out the process.
I've tried doing a Process->Generate Process Interface and Process->Run but nothing happens in BPM Studio when these are performed. What else do i need to do to test out my BPEL process with external webservice ?
Here's the steps i've taken so far.
1. Developed a simple external webservice with netbeans (JAX-WS).
2. Generated WSDL and XSD with wsgen executable.
3. Developed WSDL & XSD for BPEL Process request & reply.
4. Created a new project within BPM Studio.
5. Created a new module under "Catalog" for wsdl introspection.
6. Cataloged webservice component with local wsdl/xsd files.
7. Configured the Server configuration generated under the "External Resources" to point to the webservice host.
8. Configured the web service under "External Resources" to point to the webservice endpoint on the host (Server configuration)
9. Created a new BPEL Process.
10. Created new Instance variables for the process input and output as "component" type that point to the introspected request & response types.
11. Assigned the port type & method of the BPEL Receive to the introspected service defined in #3.
12. Assinged the input variable to the request variable created in #10.
13. Assigned port type & method & output variable to the BPEL reply.
14. Created a BPEL Invoke node between Request & Reply.
15. Assigned port type & method on the Invoke node to instrospected web service defined in #2.
16. Created instance variables for input & output of invoke node based on introspected request & reply
17. Assigned input & output.
Once all of this was complete, doing a Process->Check Design yeilded no errors or warnings.
Thanks for any help,
ChrisHello,
First, are there any examples, tutorials, or documentation on how to create and run a BPEL process within BPM Studio (5.7) ?
I've gotten quite a ways by trial and error, but am having trouble running / testing out the process.
I've tried doing a Process->Generate Process Interface and Process->Run but nothing happens in BPM Studio when these are performed. What else do i need to do to test out my BPEL process with external webservice ?
Here's the steps i've taken so far.
1. Developed a simple external webservice with netbeans (JAX-WS).
2. Generated WSDL and XSD with wsgen executable.
3. Developed WSDL & XSD for BPEL Process request & reply.
4. Created a new project within BPM Studio.
5. Created a new module under "Catalog" for wsdl introspection.
6. Cataloged webservice component with local wsdl/xsd files.
7. Configured the Server configuration generated under the "External Resources" to point to the webservice host.
8. Configured the web service under "External Resources" to point to the webservice endpoint on the host (Server configuration)
9. Created a new BPEL Process.
10. Created new Instance variables for the process input and output as "component" type that point to the introspected request & response types.
11. Assigned the port type & method of the BPEL Receive to the introspected service defined in #3.
12. Assinged the input variable to the request variable created in #10.
13. Assigned port type & method & output variable to the BPEL reply.
14. Created a BPEL Invoke node between Request & Reply.
15. Assigned port type & method on the Invoke node to instrospected web service defined in #2.
16. Created instance variables for input & output of invoke node based on introspected request & reply
17. Assigned input & output.
Once all of this was complete, doing a Process->Check Design yeilded no errors or warnings.
Thanks for any help,
Chris -
Bussiness Process, Integration Process, cc-BPM, BPM
Hello Everybody!!! Please help me!
1) In XI, Business Process = Integration Process = cc-BPM = BPM ??? Are these four the same thing?
2) Please tell me if I'm wrong: we have two types of message exchange in XI, stateless (through simple message exchange) and (ii) statefull (with BPM). There is no other type, ok?
thank you
JulioHi Julio,
This is an excerpt from one of the posts:-
BPM- Business Process Management- in XI BPM and ccBPM interchangeably used. for more on BPM- as an SAP standpoint or Business Process level - -/people/thomas.volmering/blog/2005/09/21/welcome-to-the-new-bpm-corner
ccBPM- Cross Component BPM -
https://sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/xi/archive-xi_ppts_internal_etc/sap%20netweaver%20rig%20webinar%20-%20cross-component%20business%20process%20management%20with%20xi%203.0.pdf
http://help.sap.com/saphelp_nw2004s/helpdata/en/3c/831620a4f1044dba38b370f77835cc/frameset.htm
Hope this helps.
Regards.
Praveen -
How to start a new process in BPM
There are many ways to start a new process in BPM.However I was wondering whether there is any specific way to kick off an instance in the process with the help of PAPI from external systems.I would be thankful if someone could advise.
Check the PAPI Javadoc & Samples in the [enterprise_install_dir]/client/papi/ directory.
Basically, you must:
a) create a Process Service object
service = ProcessService.create(properties);
b) create a PAPI session with a participant
session = service.createSession(user, pass, "localhost");
c) create an instance:
instance = session.createProcessInstance("/Orders", "BeginIn", arguments);
d) destroy the session
session.close();
Hope this helps!
Fernando -
How to create automatic timer process in BPM?
Can anyone tell me how to create an automatic timer process in BPM?
Can I just create an manual process, and drag the timer event into the swam lane, can connect the timer to the service and then to the end event?
Thank youHi,
You can make use of Global Automatic activity to kick off your process at a particular time. Place a Global Automatic activity in your process and right click on the Global Automatic activity and select Properties --> General --> Global Automatic Type: Automatic Schedule, Automatic Schedule: <Configure with your requirement>.
Else you can make use of due transition/timer activity to get your task done.
Bibhu -
ALV grid abort processing, if wrong value
Hello,
i've a editable alv grid.
Is it possible to abort at event data_changed/data_changed_finished, if an value is wrong (f.e. to high < 500), and write the old value back.
Best regards,
TomSdHello Thomas
The sample report <b>ZUS_SDN_ALVGRID_EDITABLE_10</b> provides a possible (perhaps not the most elegant) solution for your problem.
*& Report ZUS_SDN_ALVGRID_EDITABLE_10
*& Description: Reset false values entered in editable ALV list
*& to original values
*& Example: Column SORT_KEY allows values from '000'-'150'
* -> reset if value > '010'
*& Thread: ALV grid abort processing, if wrong value
*& Link: https:||<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="669430"></a>
REPORT zus_sdn_alvgrid_editable_10.
TYPE-POOLS: abap.
INCLUDE <icon>. " NOTE: replace by TYPE-POOLS: icon. on >= 6.20
DATA:
gd_repid TYPE syrepid,
gd_okcode TYPE sy-ucomm,
gs_layout TYPE lvc_s_layo,
gt_fcat TYPE lvc_t_fcat,
go_docking TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid.
TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE knb1.
TYPES: END OF ty_s_outtab.
TYPES: ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab
WITH DEFAULT KEY.
DATA:
gt_outtab TYPE ty_t_outtab,
gt_outtab_pbo TYPE ty_t_outtab.
* CLASS lcl_eventhandler DEFINITION
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
mo_data_changed TYPE REF TO cl_alv_changed_data_protocol.
CLASS-METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING
er_data_changed
e_onf4
e_onf4_before
e_onf4_after
e_ucomm
sender,
handle_data_changed_finished
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING
e_modified
et_good_cells,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm,
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object
e_interactive.
ENDCLASS. "lcl_eventhandler DEFINITION
* CLASS lcl_eventhandler IMPLEMENTATION
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_data_changed.
* define local data
DATA:
ld_idx TYPE i,
ls_cell TYPE lvc_s_modi,
ls_msg TYPE symsg.
FIELD-SYMBOLS:
<lt_outtab> TYPE ty_t_outtab,
<ls_outtab> TYPE ty_s_outtab.
ASSIGN er_data_changed->mp_mod_rows->* TO <lt_outtab>.
LOOP AT er_data_changed->mt_mod_cells INTO ls_cell
WHERE ( fieldname = 'ZUAWA' ).
ld_idx = syst-tabix.
IF ( ls_cell-value <= '010' ).
READ TABLE <lt_outtab> ASSIGNING <ls_outtab> INDEX ld_idx.
MODIFY gt_outtab FROM <ls_outtab> INDEX ls_cell-row_id. " !!!
ELSE.
CLEAR: ls_msg.
ls_msg-msgv1 = 'Value'.
ls_msg-msgv2 = ls_cell-value.
ls_msg-msgv3 = 'too high (> 010)'.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgty = 'E'
i_msgno = '398'
i_msgv1 = ls_msg-msgv1
i_msgv2 = ls_msg-msgv2
i_msgv3 = ls_msg-msgv3
* I_MSGV4 =
i_fieldname = ls_cell-fieldname
i_row_id = ls_cell-row_id
i_tabix = ls_cell-tabix.
DELETE er_data_changed->mt_mod_cells INDEX ld_idx.
DELETE er_data_changed->mt_good_cells INDEX ld_idx.
ENDIF.
ENDLOOP.
IF ( syst-subrc = 0 ).
er_data_changed->display_protocol( ).
ENDIF.
** cl_gui_cfw=>set_new_ok_code( 'REFRESH' ). " not possible on 4.6c
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DUMMY'
* IMPORTING
* RC =
ENDMETHOD. "handle_data_changed
METHOD handle_data_changed_finished.
* define local data
DATA:
ls_outtab TYPE ty_s_outtab,
ls_cell TYPE lvc_s_modi.
ENDMETHOD. "handle_data_changed_finished
METHOD handle_user_command.
ENDMETHOD. "handle_user_command
METHOD handle_toolbar.
* define local data
DATA:
ls_button TYPE stb_button.
ls_button-function = 'DEFAULT'.
ls_button-icon = icon_mass_change.
ls_button-quickinfo = 'Set default value for column'.
APPEND ls_button TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_outtab UP TO 20 ROWS
WHERE bukrs = '1000'.
gt_outtab_pbo = gt_outtab. " store PBO data
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Create ALV grid
CREATE OBJECT go_grid
EXPORTING
i_parent = go_docking
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Build fieldcatalog
PERFORM build_fieldcatalog.
PERFORM set_layout.
SET HANDLER:
lcl_eventhandler=>handle_toolbar FOR go_grid,
lcl_eventhandler=>handle_data_changed FOR go_grid,
lcl_eventhandler=>handle_data_changed_finished FOR go_grid.
* Display data
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
CHANGING
it_outtab = gt_outtab
it_fieldcatalog = gt_fcat
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
go_grid->set_toolbar_interactive( ).
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* ok-code field = GD_OKCODE
CALL SCREEN '0100'.
* Flow logic (no elements on screen):
* PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
* PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*& Module STATUS_0100 OUTPUT
* text
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
* SET TITLEBAR 'xxx'.
CALL METHOD go_grid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
TRANSLATE gd_okcode TO UPPER CASE.
* Fetch changes on ALV grid
go_grid->check_changed_data( ).
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
WHEN 'DUMMY'. " do nothing but pass PAI -> list refresh at PBO
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form BUILD_FIELDCATALOG_KNB1
* text
* --> p1 text
* <-- p2 text
FORM build_fieldcatalog .
* define local data
DATA:
ls_fcat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = 'KNB1'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = gt_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
" Set required fields editable
LOOP AT gt_fcat INTO ls_fcat
WHERE ( fieldname = 'ZUAWA' OR
fieldname = 'BUSAB' ).
ls_fcat-edit = abap_true.
MODIFY gt_fcat FROM ls_fcat.
ENDLOOP.
DELETE gt_fcat WHERE ( fieldname = 'ZINRT' ).
ENDFORM. " BUILD_FIELDCATALOG
*& Form SET_LAYOUT
* text
* --> p1 text
* <-- p2 text
FORM set_layout .
CLEAR: gs_layout.
gs_layout-cwidth_opt = abap_true.
gs_layout-zebra = abap_true.
** gs_layout-stylefname = 'CELLTAB'.
ENDFORM. " SET_LAYOUT
Regards,
Uwe -
Human interaction process using BPM
Hi Experts,
Is it possible to create Human interaction process using BPM?
Regards
SaraAn insurance analyst has access only access to the backend, not to XI. So send the message to the backend, start a workflow here and send a message back.
You can use ABAP proxy to implement this.
In PI 7.1 there will be human interaction in BPM, but this requires a user in the PI system and is useful only for administrators, as there are no application data in PI which enables the user to decide, whether he should approve or reject the request.
In PI 3.0/7.0 there is no user interaction in BPM.
Regards
Stefan -
Migration of GP process to BPM
Hi,
Can we migrate our GP process to BPM ? Do we have any migration tool available? If yes then how and if no then do we have to re-modell our whole process in BPM?
Regards,
PratikHi Pratik,
unfortunately, there is no migration tool to autmatically convert GP processes to SAP NetWeaver BPM.
You will have to re-model them with SAP NetWeaver BPM manually.
Best regards,
Oliver -
BPM 11g - Abort process instance
I have a BPMN process that does 3 things:
1. Calls the third party interface
2. Starts the Timer proces aynchronously. This timer process is to make sure that the task gets picked up up an admin user (Human Task);if we don't get the response within the agreed time limit.
3. Awaits the response.
So, when we get the response back from the backend system, it should do 2 things:
1. Stop the timer process.This could either be in a waiting state (i.e if the timer hasn't expired) or might have moved to the Human task step.
2. Notify the awaiting instance so that it is then moved onto the next step in the process.
I have used correlationId to match the request and response.It is working (with Send/Receive task) and notifying the waiting instance, but I am not sure how to abort the running Timer process.
Should I use an interrupting event subprocess in my Timer process, that if called should throw an exception. This will then move the Timer process instance to the Exception handling flow and that will lead to the termination of the process instance, or is there a better way to achieve this. TaskService is the other option I thought of, but to achieve this simple thing, I thought that would be an overkill. Is there a re-commended pattern to meet this requirement.
Thanks
Raj
Edited by: user588394 on 21-Feb-2013 09:04Hi Raj
1. Terminate means you want to End that Process no matter where it is at any instance of time. Say if I have BPM Process with 10 SwimLanes it can be at any of the Lanes with any User. I am taking simple Example with Human Tasks, but you can apply for other component like Timer servces etc.
2. I hope you are aware of 2 things specially for Human Tasks: Action named "Withdraw" and a role named "Process Owner". For any human task, under Actions menu you should See a Withdraw option. You can code your application to capture this output using XOR gateway and if outcome is "WITHDRAW" directly end the process and go to End Node. If you have many places like this, there is easy way instead of running wires eveywhere. Create a simple throw even that goes to End Node. And after each human task check outcome if Withdraw, that that error, which will end the process. I hope you got the point.
b) The reason I mentioned Process Owner is, generally I do NOT give Withdraw control to each User who can work on any Task. If accidentally that User do this action, thats it. The process ENDS and you can never retriive it back. So under .TASK file, I preven Withdraw action to Asssignee and Instead give this action only to OWNER (Process Owner). Process owner is like admin who can pretty much see any tasks and I would give him all the permissions like these Withdraw, Reassing, Suspend etc etc. This gives more controlled power to your application. Anyhow, in bpm workspace, login as process owner and search for any Task aged for long time and jus Withdraw it.
You can do all the above using APIs also as far as you have Withdraw action going to the End Node.
If your requirement is something else, ignore above notes. But still you can think along the above lines, if all you want is to Kill a Running Process anytime.
Thanks
Ravi Jegga -
How to get the assignees for a specific role in process in BPM 11g
Hi, Gurus,
I am using BPM 11g. I am trying to retrieve all the assignees for a a specific role in process. It will be a parameter for a business rule to do further routing rule. But it seems there is no way to get the information. I found that there are Identity Service Functions in Human Task Assignment. But Identity Service Functions are not listed in Business Rule Activity, neither listed in other activities except Human Task Assignment. I cannot get the assignees in my process.
Is there any way to get all the assignees for a role? I also tried to retrieve the assignees out engine with Worklist API, but it cannot get either. Actually we can get all the assignees information in automatic activity in OBPM 10g. Maybe I am still not familiar with 11g. Any advice is appreciated.
FYI:
My scenario:
Suppose we have a role named ApprovalTeam. In this role, there will be several different department manager (BPM User) added in the role through Workspace. At run time, a request (With department info) with go through the approval by ApprovalTeam. A Business Rule Activity with decide which department manager will approve this request. Different department request will be dispatched dedicate managers, not all the managers in the role. I have an external JavaBean to get the department information from LDAP. To do the routing, I also need know all the department managers (BPM User) in the ApprovalTeam role. Then I can compare which department manager is matched with the request and assign the task to him.
Thanks a lot,
James
Edited by: James Piao on May 31, 2010 6:25 PMor this?
SQL> select text from ALL_VIEWS
2 where VIEW_NAME
3 ='EMP_VIEW';
TEXT
SELECT empno,ename FROM EMP
WHERE empno=10 -
How to trigger Sequence of processes in BPM
Hi! I am trying to implement process sequencing with BPM.Its like i have to trigger a set of processes(say 1,2 &3 ) if certain flag in input msg is set.If the flag is not set then processes (1,2&4 ).
the procecess should occur in a sequence like ..if 1 is completed then it should send ackgmnt and start the 2nd process.
If any body has worked on similar scenario , please reply :).
Srinivas
Edited by: Srinivas Subramanyam Karnam on Jul 4, 2008 2:16 PMI tried using switch control to check the condition (particular element(say JV) in the input msg is 0or 1 ) .But donno how to get ack and based on ack how to start other process.
Let me take an example to make things clear.
say 1st process is creation of batch No.
2nd -
do -
of sales order.
3rd -
do----
of STO.
4th -
do----
of SOD(SO dispatch).
If JV element in input msg is 1 ...flow should be like(1->2->4)
create BatchNo-> get ack->
if ack positive(:if ack Negative->end.)->create SO
->get ack->if ack positive(:if ack Negative->end.)->create SOD.End.
If JV =0 say...then similarly 1->2->3 end.
Not sure if i have to use while loop .. new to bpm :).Request to Reply with what controls to be used .
with due thanks srinivas.:) -
Business process management (BPM)
How do business process mangement implmentation related to SAP BASIS guys.
Hi,
If you are talking about Solution manager BPM(Business Process Monitoring), its upto you how much you can relate, generally we used to do configuration on based upon inputs from fuctional consultants, so in case you dont have any solution mnaager consultant , you can collect the busness scenario related information and map the business process in solman setup , finally need to configre monitring based on scopes.Maximum input should come from business users to map.
Hope it will clear ,
Regards, -
Permanent error in BPE inbound processing for BPM Mesg Split
Hi Friends,
i have done the below scenario. i had done everything what theys mentioned in the blog but i am getting the error in smq2 as "Permanent error in BPE inbound processing" sysfail please helpme on this issue.
Illustration of Multi-Mapping and Message Split using BPM in SAP Exchange InfrastructureHi Uday,
Please check this blog for your error, This is really interesting. Permanent solution for your question.
Delivery Modes in BPM.
Thanks!
Maybe you are looking for
-
Doc. type/item cat.not picking from Purchase Requisition
Hi, While making purchase order from link with Purchase Requisition, system provides the error message :- Doc. type/item cat. ZSUP/ (requisition) <-> ZSUP/ (purch. order) Message no. 06054 Diagnosis Purchase requisitions of docume
-
How to remove the list of on-line ids that appear when logging on
I have several people logging on to my computer. Every time I begin my id, a list of all the ids that have been used appears. I want to delete that list and in fact prevent any such list from being kept,
-
Hi, I need to attach a document to user decision step and i have converted the document to Xstring and generated the SOFM instance. Now i am binding this SOFM instance to "_ATTACH_OBJETCS" of UD step. I am getting the attachment link in UD but when i
-
How to reinstall iPhoto (Lion)?
Hi Apple Support, At the very first stage, whenever I opened the Mac App Store, there was one update of iPhoto. However, it was impossible to carry on the update after I type in the ID and PSW which I registered my MBA. After this issue, I delete the
-
How to realize summarized display of stock values on storage location level
Hi all, we have implemented in Release 3.5 a report to analyze Stock values on storage location level according to the "How to...realize summarized display of stock values on storage location level"- paper. The report is running witout problems. Now