Deadline for an interactive activity

In the process, there is an automatic activity (A) before an interactive activity. Please let me know how to set the deadline for the interactive activty through A.
The requirement is regarding setting up the SLA for an instance for every interactive activity. The instance should be highlighted in red once the SLA is crossed. I know how to customize the workspace for this. I am looking at how to set up the deadline (SLA) through code based on certain conditions.

If you want the instance to remain in the Interactive activtiy even though the deadline has passed, you might not want to use a Due transition. The Due transition's whole purpose is to fire and have the work item instance flow through it after the time period specified inside the Due transition's property elapses.
You might want instead want to create a new project variable that represents some time in the future for the work item instance. This would have to be a time variable since an instance sitting in an Interactivity won't be able to indicate that a time period has elapsed except by comparing the current time with the time value you set in the project variable's time variable.
I'm not sure that the deadline predefined variable is a fit for what you're trying to do. You'd use the deadline predefined time variable to set an SLA for the entire process. Once this time period expires, the engine will fire an exception (an "InstanceExpiration" exception) that would need to get caught by an Exception Handler activity somewhere inside your process.
When you create a Due transition for an activity, it's a different type of SLA. It sets an SLA for a specific activity (vs. the entire process). You're not going to find much joy in trying to set the predefined variable activity.deadline. This is automatically set by the engine when the engine sees that an activity has a Due transition. The engine sets this time to the time in the future established by the Due transition. This is a read only predefined variable that you won't be able to set. Instead, consider creating and setting a new project time variable I mentioned above that you can check to see if the time has elapsed by comparing it with the current time.
To make a primitive instance variable (e.g String, Decimal, Time, etc.) available to a JSP, create a BPM Object with attribute(s) corresponding to the instance variables you want passed to the JSP. Prior to the Screenflow's Interactive Component Call task where you present the JSP, you'd just need to set the primitive instance variable(s) to the attributes in the BPM Object.
Hope this helps,
Dan

Similar Messages

  • Multiple Approvals for an interactive activity

    I have an interactive activity in my workflow. To proceed from this activity i need multiple approvals from different users/participants. The number of users/participants providing approvals are collected dynamically.All the users/participants are in the same role (Approver).
    Also, the participant who approves the activity should not again see the pending item in his inbox but the other users should still be able to see it. For instance, if there are 3 approvals needed of user1,user2 and user3, and user1 approves then the item should now be visible as pending only for user2 and user3.
    Appreciate any help regarding this.

    Hi Dan,
    Thanks for your reply. I did try using the update() method but m still getting the same exception. Below please find the code snippet that i am using. Would be great if you help if me recognize the mistake:-
         private DirectorySession createFDISession() throws AuthenticationException, ProtocolNotSupportedException{
              DirectorySession directorysession = null;
              this.configuration = configure();
              String directoryId = "";
              String fdiPreset = "";
              directoryId = configuration.getProperty(ProcessService.DIRECTORY_ID);
              fdiPreset = configuration.getProperty("FUEGO_FDI_PRESET");
              DirectoryPassport directoryPassport = DirectoryPassport.createWithIDAndPreset(directoryId, fdiPreset);
              directoryPassport.fillPassport();
              directorysession = Directory.startSession(directoryPassport);
              return directorysession;
    public void addUserInFDI(UserVO userVO, List<String> roleMap) throws AuthenticationException, ProtocolNotSupportedException, DirectoryException
              DirectorySession directorysession = null;
              if (userVO != null && userVO.getUserId() != null && !userVO.getUserId().trim().equals(""))
    // create directory session
                   directorysession = this.createFDISession();
                   List<RoleAssignment> roleAssignmentList = new ArrayList<RoleAssignment>();
                   try {
                        for(String role:roleMap)
                        roleAssignmentList.add(getRoleFromString(directorysession, role, "", ""));
                        String organizationUnit = configuration.getProperty("ORGANIZATION_UNIT");
                        String newUserPwd = configuration.getProperty("FUEGO_FDI_NEW_USER_PASSWORD");
                        DirOrganizationalUnit orgUnit = DirOrganizationalUnit.fetch(directorysession,organizationUnit);
                        DirHumanParticipant user = DirHumanParticipant.create(directorysession, userVO.getUserId(), userVO.getFirstName(), userVO.getLastName(),
                                  userVO.getFirstName(), userVO.getEmail(), userVO.getPhone(), "",
                                  newUserPwd, orgUnit,(RoleAssignment[]) roleAssignmentList.toArray(new RoleAssignment[roleAssignmentList.size()]), true);
                        //calling the update function on the created user
    user.update();
                        System.out.println("permission : "+user.getPermissions());
                   finally
                        directorysession.disconnect();
              } else {
                   log.info( "Invalid user's information : " + userVO);
         private RoleAssignment getRoleFromString(DirectorySession directorysession, String roleParamStr, String roleStr, String parameterStr) throws DirectoryException
              RoleAssignment roleAssignment = null;
              roleStr = "";
              parameterStr = "";
              if(roleParamStr.indexOf("||") < 0)
                   roleStr = roleParamStr.trim();
              else
                   ArrayList<String> roleParamList = getArrayList(roleParamStr, "||");
                   if(roleParamList != null)
                        roleStr = roleParamList.size() > 0 ? roleParamList.get(0).trim() : "";
                        parameterStr = roleParamList.size() > 1 ? roleParamList.get(1).trim() : "";
              DirOrganizationalRole dirOrganizationalRole = DirOrganizationalRole.fetch(directorysession, roleStr);
              if (dirOrganizationalRole.isParametric())
                   if (parameterStr == null || parameterStr.equals(""))
                   roleAssignment = new RoleAssignment(dirOrganizationalRole.getId(), parameterStr, 127, 0);
                   roleStr = roleAssignment.role;
                   parameterStr = roleAssignment.parametricValue;
              else
                   roleAssignment = new RoleAssignment(dirOrganizationalRole.getId(), 95, 0);
                   roleStr = roleAssignment.role;
                   parameterStr = null;
              return roleAssignment;
         public ArrayList<String> getArrayList(String inputStr, String delim) {
              ArrayList<String> returnStr = new ArrayList<String>();
              if (inputStr!=null)
                   StringTokenizer strTokens = new StringTokenizer(inputStr, delim);
                   while (strTokens.hasMoreTokens()) {
                        returnStr.add(strTokens.nextToken().trim());
              return returnStr;
         }

  • Interactive activity deadline without due transitions

    I need to define deadline for all interactive activities. However, I do not want to add due transitions or Connector to every interactive activity. How to set the activity deadline without due transitions?
    Or, I add a due transition / deadline to all interactive activities. If the deadline is reached to any of them, an exception will start.
    Or, if any activity is expired, it should go to a specific activity. How to do that?
    For example, a process has 2 interactive activities, named a1 and a2. The first activity has a method:
    activity as Activity
    activity=Activity("a2")
    t as Time
    t = addSeconds(activity.deadline, i : 20)
    It sets the deadline of a2. However, after it is deployed to BPM standalone 10g, when sending a1, Standalone shows error.
    Sincerely
    Edited by: YE on Jun 5, 2009 4:01 PM

    Hi Ye,
    There is a predefined variable called "deadline" you might want to consider using for this. Instead of having to add due transitions for each activity, if you set the deadline variable to some time in the future, once that time is exceeded the work item instance automatically throws an "InstanceExpiration" exception.
    1) I usually set the deadline variable in the Begin activity in the process to some time in the future. Although you can set it there, it can be changed anywhere in the process if you want the deadline to be different in the next activity. You just need to be sure to set the deadline upstream of the activity.
    2) Add an exception handler to catch the InstanceExpiration exception by:
    a) adding an orphan Interactive activity
    b) if an exception handler does not exist in the process, right mouse click anywhere in the white space of the process -> "Add an exception transition to" -> select the Interactive activity you added in the first step -> click the "Properties" tab -> select the Exception Name combo dropdown and pick "InstanceExpiration" -> click Ok and then Yes.
    c) the logic in the Interactive activity that catches the overdue instances needs at least these statements:
    // reset the deadline so another exception is not immediately thrown
    deadline = 'now' + '2d'
    // code here to do what it is that you want done (e.g. escalate the priority, send someone an email, etc.)
    // now send the instance back to the activity where the deadline expired
    action = BACK Hope this helps,
    Dan

  • Multiple deadlines for an activity

    HI guys,
               I need to create a step in which if user does not take action for 3,5,10,20 days,we send him mail on his lotus notes.Single deadline,i think,can be done by 'latest end'.but how to tackle multiple deadlines.please help me.

    Hi Vivek,
    There are several options as long as you use a modeled deadline. In the modeled deadline you send the notifications, you can use a loop and put a wait step in the loop. I would not use a method like Arghadip suggest, because this couldn't be good for the system, but use a dummy method in a task with a requested start deadline. Another option is to use a wait for event step and wait for a condition (if you are on 4.7? or ECC5 or higher that is). You can wait for a condition which is true and you can use a requested start deadline. This is better for the performance of the system I think.
    Another option is to use paralel processing in the modeled deadline and use requested start deadlines for the different notifications.
    Probably you can think of more options, when you think about it.
    Regards,
    Martin

  • BPM process interactive activity(JSP) - external webservice method interac

    I am using Oracle BPM studio 10.3.1.0.
    I have one external web service published on glassfish application server, I have introspected it in my BPM process using its WSDL.
    Now one of my BPM process interactive activity is there, which is represented by one JSP, I am giving some input to my JSP.
    I want this input to be passed to the web service method as a parameter, and it should fetch the output, so basically I want to invoke the web service method, could you please guide me how to do it?
    Thanks & Regards
    Ashish

    Hy Ashih
    I dont know if this is best way to do that, but I have a similar situation here, and I'm using AJAX do call the webservice method by BPM and retrieve data.
    Something like this:
    1 - Create the XMLHttpRequest() object in your jsp (if you need I have the entire code)
    2 - Create the a JavaScript method for to call the OBPM method in your component
    function mymethod(arg1, arg2, arg3)
    xmlhttp.onreadystatechange=function()
                                                      if( xmlhttp.readyState==4 )
                                                           document.getElementById("AnyDIV").innerHTML = xmlhttp.responseText;
         var resp = "<f:invokeUrl var='YourComponenteName' methodName='YourMethodName'/>";
    //Incude how many args your need here
         resp+="&arg1=" + arg1;
         resp+="&arg2=" + arg2;
         resp+="&arg3=" + arg3;
         xmlhttp.open("POST",resp,true);
         xmlhttp.send(null);
    3 - You'll need a div html tag called "AnyDIV" to receive the BPM answer
    4 - On you BPM component, in YourMethodName method (needs to be ServerSide = no), create two args, the first is httpRequest type (name request), and the second is httpResponse type (name response) (fuego lib)
    5 - Type the code below in your BPM method to send info back to the JSP
    //getting the args
    String arg1 = request.getParameter(string : "arg1");
    String arg2 = request.getParameter(string : "arg2");
    String arg3     = request.getParameter(string : "arg3");
    //Do the webservice call here, prepare the html answer and put it into an string variable
    strReturn = "bla bla bla";
    //Send the anwser back to the jsp
    response.bodyTextContent(arg1 : strReturn);
    Or you can do this using xml answer and deal with the tags with javascript
    that's it

  • Interactive activity, external task example???

    Hi,
    I'm trying to search for a simple external task example, however it is totally imposible to find anything ... :(
    I would like to make a few questions about it. When you create an external task in a interactive activity, you can specify an URL where the request will be redirected when you click on a external task, but how do you send the information about the specific process you want to work with in the URL? is it possible to pass parameters to this URL ? which is exactly the correct use of the external URL configuration? if I pass the control to an external system, how this system is able to know which BPM process instance to work with?
    Regards,
    Antonio.

    Hi,
    I've recently found out that Aqualogic simply sends the information about the process as request parameters to the external system:
    taskIn:0
    activity:TareaExterna
    instanceId:/ExpenseReport#Default-1.0/6/0
    participantId:Peter Jones
    Very easy, however it is quite frustrating not finding anything about it. I agree with you that it is an upcoming technology, however the documentation of a product should have a minimum of quality, specially coming from an important company as BEA. They offer a functionality and simply do not explain how it works.
    In any case, thanks a lot for answering my question!! :)
    Best regards,
    Antonio.

  • Equivalent of Global Interactive Activity in 11g

    Hello,
    Is there an equivalent of Global Interactive (not Global Creation) activity in OBPM 11g? What I intend to do is to be able to have certain stand alone activities in the workflow bounded independently to different taskflows (there taskflows are associated with the business process but not directly linked to it). E.g. Let's say I have a requirement that the 'Manager' role in the workflow should be able to assign the primary process participants to different Line of Businesses based on day to day needs. All I need is a UI to achieve this. But I am also trying to leverage BPM roles so that only 'Managers' are able to see this link in their workspace / worklist and able to access this UI. We have previously implemented this using 'Global Interactive' in 10g. All we did was to place the activity in a manager swimlane and associate a screenflow to it. Trying to understand what 11g has to offer for this requirements.
    Thanks,
    Gaurav

    One of the things that helps end-users train themselves on a process is to present a picture of where a work item instance that they are working on is located in the process. This is commonly referred to as the “you are here” map. In Oracle BPM 10g, this is done like this:
    1.     Add a Global Interactive activity to an abstract role (role with a name).
    2.     Name this new Global activity “You are here”.
    3.     Click Runtime in the left pane and check the "Has instance access" (do not check the checkbox labeled “Use activity for instance presentation").
    4.     Click the OK button.
    5.     Right mouse click this new activity and select Main task from the popup.
    6.     Change the Implementation type to "Show Process Image".
    7.     Click OK.
    8.     Save the project and reload the project.
    9.     Start the WorkSpace again. Log out and relogin.
    10.     On the right side of the inbox, for an existing work item instance click the "Select action" dropdown.
    11.     Click the new "You are here" action.
    12.     Note the red flag above the activity where this work item instance is located in the process.
    Hope this helps,
    Dan

  • How to invoke BPM object instance variable from interactive activity?

    I have a screenflow with an automatic activity "A" followed by an interactive activity "B". "B" calls a BPM object "X" and uses a JSP presentation to show its attributes. Is there a way to use another BPM object, say type "Y", create an instance variable of that type inside "A", and get its attributes values from the JSP page associated to "B"?
    Edited by: user6473912 on 20/07/2010 03:37 PM

    Try this. It assumes you have:
    <li> a user named "auto"
    <li> a project variable named "customerType"
    <li> an instance variable named "orderAmount" that is a decimal
    <li> an instance variable named "order" that is a BPM Object that has attributes named "customerName" and "amount"
    ps as ProcessService
    xmlObject as Fuego.Xml.XMLObject
    do 
      connectTo ps
          using url = Fuego.Server.directoryURL,
          user = "auto",
          password = "auto"
      instF as InstanceFilter
      create(instF, processService : ps)
      addAttributeTo(instF, variable : "customerType", comparator : IS, value : "Gold")
      instF.searchScope = SearchScope(participantScope : ParticipantScope.ALL, statusScope : StatusScope.ONLY_INPROCESS)
      for each inst in getInstancesByFilter(ps, filter : instF) do
        // here's how to get the value inside a primitive instance variable
        orderAmtObj as Object = getVar(inst, var : "orderAmount")
        // here's how to get the value of attributes inside a complex BPM Object instance variable
        //    - in this case this is an "order" object with two attributes (customerName and amount)
        orderObj as Object = (getVar(inst, var : "order"))
        xmlObject = Fuego.Xml.XMLObject(createXmlTextFor(DynamicXml, object : orderObj, topLevelTag : "xsi"))
        logMessage "The value of the order object's customer name is: " +
               selectString(xmlObject, xpath : "customerName")
        logMessage "The value of the order object's order amount is: " +
               selectNumber(xmlObject, xpath : "amount")
        // here's a rather uninspired way to retrieve who the participant is that was assigned the instance
        logMessage "The participant assigned to this instance is: " + inst.participantId
      end
    on exit
      disconnectFrom ps
    endDan

  • Difference in completion deadline for tasks which are parallel for each

    Hello Everybody,
    We have critical problem wherein we have set a completion deadline for a task against a human activity which is parallel for each but in the runtime, a difference of 1 second is appearing for the parallel tasks generated.
    We have raised a COMPLETIONDEADLINEISCRITICALEXCEPTION and if the deadline is met we are executing an ABAP RFC for auto approval.
    The automated step for executing the RFC is also parallel for each. When the tasks are created only one gets cancelled on completion of deadline while others get suspended. I am assuming this is happening because of the difference of 1 sec in the completion deadline for parallel tasks in the runtime.
    This is very critical and i request all you to please provide your inputs.
    Thanks & Regards
    Gaurang Dayal

    Hi Guarang,
    Do you expect that all the parallel tasks are instantiated at exactly the same point in time? That is an unrealistic expectation....
    First off, the Par Foreach doesn't spawn multiple threads, it executes each 'parallel' action in sequence in the same thread. Parallel in this context means all the actions (Task initiation) will occur and a process token will stay at each Task. For the token to pass the subsequent merge ALL the parallel tasks must be complete (all tokens must arrive at the merge). So you won't ever get all the tasks initiated at EXACTLY the same time.
    Further, even if the BPM kernel did spawn multiple threads (and there are very good reasons it won't!) it is rather unlikely that in these different threads you would for sure get all the initiations at EXACTLY the same time.
    If it's important that you get the task completion deadline the same in all tasks you should get a suitable timestamp in a mapping step which precedes the split and then set the deadline explicitly using that value when the task is initiated - i.e use a specific time value not an offset time value.
    An FWIW you should read and understand the documentation on Boundary Events so that you can know what to expect when one is fired and you know how to handle them.
    regards, Nick

  • Global Interactive activity

    Hi,
    Could you please tell me how we can pass I/O arguments through PAPI WS/PAPI API to execute the Global Interactive activity, the main task defined for it is a Screenflow. Global Interactive activity is not having "Instance Access" check in the Properties option. We will then use these arguments inside the Screenflow for business process. As per my knowledge, for Screenflow mapping, we need to map "Value" with the appropiate arguments defined in the Screenflow argument mapping section. By default, "Value" shows predefined values.So, how we can map argument values coming from PAPI WS/PAPI API to this screenflow.
    Thanks,
    Abhishek

    One of the things that helps end-users train themselves on a process is to present a picture of where a work item instance that they are working on is located in the process. This is commonly referred to as the “you are here” map. In Oracle BPM 10g, this is done like this:
    1.     Add a Global Interactive activity to an abstract role (role with a name).
    2.     Name this new Global activity “You are here”.
    3.     Click Runtime in the left pane and check the "Has instance access" (do not check the checkbox labeled “Use activity for instance presentation").
    4.     Click the OK button.
    5.     Right mouse click this new activity and select Main task from the popup.
    6.     Change the Implementation type to "Show Process Image".
    7.     Click OK.
    8.     Save the project and reload the project.
    9.     Start the WorkSpace again. Log out and relogin.
    10.     On the right side of the inbox, for an existing work item instance click the "Select action" dropdown.
    11.     Click the new "You are here" action.
    12.     Note the red flag above the activity where this work item instance is located in the process.
    Hope this helps,
    Dan

  • Global Interactive activity link to be displayed only at instance end

    Hi All,
    I have a requirement where link in right hand side dropdown at instance level should be shown only when instance is completed. For this I am using one global interactive activity with 'has instance access' option checked and also 'read only' option checked. It is visible when instance is completed as well as when alive. I dont want the later part. Could anyone advice?
    Regards,
    Yasmin.

    Yasmin,
    You need to persist your instance variables by inserting them into the database table. And then pull your compleled instances based a known parameter (let say a defined instance id that can be an oracle or sql row id).
    Does this make sense to you?
    Thanks
    badam571
    Edited by: badam571 on Apr 27, 2010 1:30 PM

  • Unassign a task using Global Interactive activity.

    Hi,
    There is a task assigned to a particular user. I want to unassign that task from Global Interactive activity but it is not working. Steps followed by me are:
    1. Global Interactive activity for unassigning any task at any time from the instance drop down.
    2. A screenflow is called in the Global Interactive activity for unassign.
    3. In the screenflow I have an automatic activity where I have written Participant.next=Participant.Unselect;
    The log message in the automatic activity after the above written code shows participant value is blank. But when it comes out of the screenflow to the main process the participant automatically gets assigned. In the workspace the activity shows that it is still assigned to the user.
    Note: I cannot use OOTB feature of Unassign because I need to show a screen with some reasons for Unassign, so I'm using a screenflow.
    Kindly revert ASAP.

    Hi Yasmin,
    Try executing the code at the process level or use the product feature 'Unassign'.Hope it helps.
    Regards,
    Ritu S.
    Edited by: Ritu Singh on May 17, 2010 1:21 AM
    Edited by: Ritu Singh on May 17, 2010 2:04 AM

  • Configuring Main Task of Interactive Activity to use Portlets

    Hi,
    I currently have a ALBPM implementation where we are using Screenflows in our Main Task of the Interactivity Activity to interact with the user.
    Now we plan to replace the screenflow with portlets as we are implementing the Weblogic Portal Server and would like to have all the UI be developed using portlets.
    Unfortunately we are unable to find any tutorial or guide that can help us with the steps involved with the same. And also who can we test the invocation of the portlets using the ALBPM workspace.
    Regards,
    Kartik

    Hi Ritu,
    I'm guessing you might have logic inside your Interactive activity that looks like this:
    input "Enter the customer id: " : customerName
        using title = "Customer Information",
              buttons = ["Ok", "Cancel"]
        returning selectedButton = selectionAlthough I find "input" and "display" statements useful for initial prototyping and some testing, don't take it beyond that. The problem with these statements is that they tie up a thread as long as someone has the input or displayed dialog up. Quickly you'll run out of threads as people march off to lunch with these dialogs left up on their screens. Instead use Screenflows with either JSPs or BPM Object presentations to render information to end users.
    In direct answer to your question though, if you're using the input statement (again - don't do this in production) be sure to handle the variable that contains the value of the button clicked. The above logic would be changed to the logic shown below to handle the Cancel button being clicked:
    selectedButton as String
    input "Enter the customer id: " : customerName
        using title = "Customer Information",
              buttons = ["Ok", "Cancel"]
        returning selectedButton = selection
    if selectedButton = "Cancel" then
       // action is a predefined variable that is an enumeration used in this case to cancel the user's input
       action = CANCEL
    endHope this helps,
    Dan

  • Optional Task in Interactive Activity usage?

    Hi Gurus,
    BPM version : 10.3.2
    You will be appreciated if some could explain about the optional tasks in the Interactive activity? and how can I execute the same using PAPI?
    Thanks in advance.
    -Narasimha

    Hi Ritu,
    I'm guessing you might have logic inside your Interactive activity that looks like this:
    input "Enter the customer id: " : customerName
        using title = "Customer Information",
              buttons = ["Ok", "Cancel"]
        returning selectedButton = selectionAlthough I find "input" and "display" statements useful for initial prototyping and some testing, don't take it beyond that. The problem with these statements is that they tie up a thread as long as someone has the input or displayed dialog up. Quickly you'll run out of threads as people march off to lunch with these dialogs left up on their screens. Instead use Screenflows with either JSPs or BPM Object presentations to render information to end users.
    In direct answer to your question though, if you're using the input statement (again - don't do this in production) be sure to handle the variable that contains the value of the button clicked. The above logic would be changed to the logic shown below to handle the Cancel button being clicked:
    selectedButton as String
    input "Enter the customer id: " : customerName
        using title = "Customer Information",
              buttons = ["Ok", "Cancel"]
        returning selectedButton = selection
    if selectedButton = "Cancel" then
       // action is a predefined variable that is an enumeration used in this case to cancel the user's input
       action = CANCEL
    endHope this helps,
    Dan

  • Create new instance through global interactive activity

    Hi All,
    I have a requirement where when instance is completed, I need to provide a link at instance end through global interactive activity. Once user clicks on that activity a screen appears where user clicks on button and new instance should be created.
    Now the problem is I tried notifying the main process and then use process creation activity to create instance but this cannot be used as instance is already completed.
    Second approach i used is processinstance.create method. But new insatnce is not getting created. Also i m not getting any exception.
    Please reply as this is very important requirement.
    Regards,
    Yasmin

    Create a new instance before the END activity is executed..
    After the screenflow for the global activity pass a variable to collect the button value on ON CLICK..
    If button value = true, then call a sub-process else END.. The sub-process does not need any Global activity to start the process . The values would be passed from the BEGIN activity of the sub-process itself.

Maybe you are looking for