Wednesday, March 13, 2013

Tip of the Day: Finding a Link Between a BPM Worklist and an Enterprise Manager Instance ID


Problem Description
I want to trace the instance of BPM worklist in Enterprise manager console.


Using the search option available in the BPM worklist, we can easily search for a specific instance in a BPM worklist. But, if it is faulted, then how can we trace its corresponding instance in Enterprise manager console?

BPM Worklist



Enterprise Manager Console


Work around:

I tried printing instance ID in BPM worklist using a form, but there is no direct correlation of the BPM worklist instance id the instance ID from Enterprise Manager.

The other way is to look at the date-time stamp, but it is really painful process to track the exact instance in Enterprise Manager.


Better work around:

The following query provides insight and additional information from the BPM worklist:

SELECT TASKNUMBER, COMPOSITEINSTANCEID, INSTANCEID, TASKID,
ASSIGNEES, ASSIGNEESDISPLAYNAME, CALLBACKID, PROCESSID,
PROCESSNAME, PROCESSVERSION, ASSIGNEDDATE, CREATEDDATE,TITLE, USERCOMMENT
FROM wftask
WHERE TASKNUMBER = <task_number>;


--- The <task_number> is the task number of BPM worklist. Using this you can easily locate the composite instance for a given task number.

This query provides the COMPOSITEINSTANCEID which is instance ID of PROCESSNAME and PROCESSVERSION. This information can be used to find the matching instance in EM console under soa-infra -> default -> PROCESSNAME[PROCESSVERSION]

In addition to this, the INSTANCEID can be used to track down the instance in right click on soa_infra -> Service Engines -> BPEL. In the screen click on “Instances” tab. Enter the value in this and you will get the instance and other details.

Solution:

I am still looking for the easier way to trace EM instance from BPM task.

Thanks to Vikrant Korde for today's tip!

Thanks all,
-ryan

Monday, March 11, 2013

Update the WebCenter Content: Content Server Home Page without Customization


This feature has been a part of the Content Server product for as long as I can remember but no one seems to remember it.

You can change the home page of the content server without customizations. That’s correct! You can do this. And if you act now you can do it twice!! For the price of once!!

OK enough levity. Too much coffee.

The method is relatively simple – use the Web Layout Editor applet.

Log in as an administrator, navigate to the Administration -> Admin Applets page and start the Web Layout Editor.

From the main menu, select Options -> Update Portal

In the Update Portal Page dialog, enter in the HTML and IdocScript that you would like to use on the home page.

Select OK

For example, if it has never been changed before, then the dialog will contain the following:

<!--
This area is fully Idoc Script capable. Use the condition variable IsLoggedIn
to determine if page is delivered to an authenticated user.  Use the condition
variable IsDynamic to see if content is delivered dynamically.  Delete the
file <HomeDir>/data/pages/portal_message.inc to revert back to the default
portal message.  The static portal page is not updated unless the
"Update Portal..." option is used in WebLayout Editor.

To view example script below, copy it out of this comment area.

<div align=left><b>Examples of script:</b></div><br>
       <$if IsLoggedIn$>UserName = <i><$UserName$></i><br><$endif$>
       <$if IsDynamic$>Current Time = <i><$dateCurrent()$></i>
       <$else$>This is a static page.
       <$endif$>
 -->

Simply move the closing comment tag (-->)  above the opening div tag and select OK.

Navigate back to the home page and refresh it and you will see your name and the time on the home page.

You can use any IdocScript functions for this. You can use, for example, a Word Document displayed via Dynamic Converter, then give the Word document to someone to maintain. In this way, anyone can maintain and update messages on the home page.

Wednesday, March 6, 2013

How to configure Virtual Box with internet and host access


I have had such a hard time locating the information I needed to get a VirtualBox VM to use both NAT and Host networks so that the VM could see the internet and the host could see the VM with a known IP address that I decided to write this post.

The configuration in this post is as follows:
·         Host O/S is Windows 7 (64 bit)
·         VirtualBox is version 4.2.6 r82870
·         Guest O/S is Oracle’s Enterprise Linux 5 (64 bit)
·         Guest has a web server installed and running.

To make this work requires the following steps:

Setup the Host Network Adapter in VirtualBox

1.       Start VirtualBox
2.       Select the File menu and Preferences
3.       On the left side, select Network

4.       In the network dialog, select the  to add a new host only network



5.       Follow the prompts for locating the driver for the new network. On my machine, the file is located at “C:\Program Files\Oracle\VirtualBox\drivers\network\netadp”
6.       Double click on the new adapter; “VirtualBox Host-Only Ethernet Adapter #3” in this example.

7.       Change the settings as shown here



8.       Select OK to close the Host-Only Network Details
9.    Select OK to close the VirtualBox – Settings dialog.

Set up the VirtualBox VM

1.       With the VM shutdown, select the Settings for the VM and open the Network dialog and set Adapter 1 as shown here and refresh the MAC Address. No Port Forwarding is required.



2.       Set Adapter 2 as seen here and refresh the MAC Address as well



3.       Select OK to close the settings dialog.
4.       Start the VirtualBox VM

Set the Network in the VirtualBox VM

1.       Log in as root
2.       Select System -> Administration -> Network



3.       It should look similar to the following



4.       Select the eth0 device and Edit. Verify that it looks like the following. If not then change it.
eth0 is set for DHCP



There are no static routes defined



and the hardware matches the VirtualBox Adapter 1 hardware and MAC address.



5.       Select OK to save any changes
6.       Select the eth1 device and Edit. Verify that it looks like the following. If not then change it.
Set the IP Address and Subnet mask



There are no static routes defined



and the hardware matches the VirtualBox Adapter 2 hardware and MAC address.



7.       Select OK to save the changes
8.       Add your new IP Address and host name to the hosts file



9.       Save and exit the network configuration
10.   Open a terminal and restart the network



11.   Restart the VirtualBox VM

Update the Windows Hosts File

1.       Edit the hosts file (c:\windows\system32\drivers\etc\hosts). Note that Windows hides the etc folder so you will need to either show all hidden folders or type the path in.
2.       To the hosts file add
10.88.12.4  dev.example.com dev
3.       Save and close the host file.

Verify Virtualbox VM can reach the internet and itself

1.       When the VirtualBox VM is restarted, log in as a non-root user
2.       Start the web browser
3.       Verify internet connection by selecting a known site such as www.google.com
4.       Verify the local web server by http://dev (or whatever your VirtualBox VM hostname is)

Verify the Windows Host can connect to the VirtualBox VM

1.       Open a web browser
2.       Verify internet connection by selecting a known site such as www.google.com
3.       Verify the local web server by http://dev (or whatever your VirtualBox VM hostname is)


In this configuration, your host can access the VirtualBox VM and the VirtualBox VM can access the internet but the VirtualBox VM is not visible to others.

Monday, March 4, 2013

Oracle IPM: Customizing AXF Task Details page – Add new actions: Invoke Outcome


This blog guides you to add functionality to the existing composites. There are 3 different type of actions configurable with Oracle provided AP Solution Accelerator.

  • Invoke “outcome” of human task
  • Do validations, like Transaction id is blank.
  • Allow user to pick user/ Group from list.

The below description focuses on “invoke outcome”. Remaining type of actions and its details will follow on next blogs.

For each solution namespace (can be analogous to BPEL composite, most of the times) that you create, there is an AXF Tasklist page (url has “cmd=Start<SOLN_NAMESPACE>&sol=<SOLN_NAMESPACE>” – assuming that you have already made the database entries for Start<SOLUTION_NAMESPACE>. If not, do not worry, there will soon be another article explaining how to do that) where the end user is provided with the option to take any of the actions that you have configured in your BPEL Human Task. The AXF task list page for a particular Solution Namespace and Command Namespace provides you with all the instances of invoices currently under a particular view.



View Task opens the AXF Task Details page, which has some actions in the left side bar.



In case you want more flexibility with these actions, you need to do some data manipulations in the AXF Database, using the DEV_IPM schema.

Let us first look at the tables in this story:

     1.      AXF_ACTION_MENU


In this table, the entry for Solution_Namespace is made.
Menu_ID is auto incremented using a sequence (AXF_ACTION_MENU_SEQ).
Rest all the entries are to be done as they are for other rows.

     2.       AXF_ACTIONS


This table maps the actions displayed on the UI. For each action displayed on the UI, there is a corresponding COMMAND_NAMESPACE entry here in this table.

Action_ID is again auto incremented using the sequence AXF_ACTIONS_SEQ.
Display_Text is the label you want to give your action on the UI.
Menu_Order acts as a rendering switch – 0 means visible and other values means not rendered.
Menu_ID is the same as the one in the AXF_ACTION_MENU table, for the Solution_Namespace.

     3.       AXF_COMMANDS


In this table a command class is configured for your Solution Namespace and Command Namespace. Usually, it depends upon what your action actually does. For example, oracle.imaging.axf.commands.bpel.CompleteTaskCommand is used when the action signifies completion of a flow or a sub flow. oracle.imaging.axf.commands.bpel.OpenTaskCommand is used when a new flow is initiated. Here, for a new action, you will need the following entries:

SOLUTION_NAMESPACE
COMMAND_CLASS
COMMAND_NAMESPACE
<Your_Solution_Namespace>
oracle.imaging.axf.commands.bpel.AutotaskCommand
AutoOpenTask
<Your_Solution_Namespace>
oracle.imaging.axf.commands.bpel.ReleaseTaskCommand
CancelTask
<Your_Solution_Namespace>
oracle.imaging.axf.commands.bpel.CompleteTaskCommand
<Command Namespace you entered in AXF_ACTIONS>    
<Your_Solution_Namespace>
oracle.imaging.axf.commands.bpel.OpenTaskCommand
OpenTask
<Your_Solution_Namespace>
oracle.imaging.axf.commands.bpel.ReleaseTaskCommand
SkipTask




     4.       AXF_SOLUTIONS


AXF_SOLUTIONS consists of a SOLUTION_CONTEXT entry, which is usually the same for all the Solution Namespaces, namely, ejb.AxfCommandMediator#oracle.imaging.axf.service.AxfCommandMediatorRemote.

     5.       AXF_SOLUTION_PARAMETERS




This perhaps is the most important table because is maps the outcomes of various actions for consumption by either your BPEL process or by AXF internally. Let’s have a closer look at the values that need to be entered here, and what they represent.

For each Command Namespace (i.e. the action you want to add to the UI), there will be 3 entries, which will have the following values:



On the AXF Worklist page, there is an Auto Task button, clicking which open up all tasks in the list in serial order for appropriate actions to be taken by the user. The CMD_AUTOTASK_OFF parameter key’s value will redirect AXF view to the default starting point of your AXF flow in the case when the Auto Task function is not available to the user.

CMD_AUTOTASK_ON points to AutoOpenTask, which is nothing but another Command Namespace created as a part of the Start<Solution_Namespace> entries. The details for AutoOpenTask are as follows:



If you are creating a new composite and don’t have the Start<SolutionNamespace> entries in place, then you will have to do that first.

OUTCOME maps to the value which your BPEL flow is expecting as a return value from the Human Task in this case.

PS: Please note that you are not supposed to create the entries for AutoOpenTask as a part of this exercise. It is a separate topic, and will be addressed in another post.

    6.       AXF_SOLUTION_ATTRIBUTES


In this table, there are 3 entries that are required. There is a snapshot of the actual data below:

SOLUTION_NAMESPACE
PARAMETER_KEY
PARAMETER_VALUE
< SolutionNamespace>
BPEL_CONNECTION
SOA Server
< SolutionNamespace>
CONNECTION_PROVIDER
oracle.imaging.axf.servicemodules.bpel.workflow.AxfWorkflowServiceModule
< SolutionNamespace>
USE_AUTOTASK_LOCKING
FALSE

The keys CONNECTION_PROVIDER and USE_AUTOTASK_LOCKING are given the standard values, as in the snapshot. BPEL_CONNECTION is the name of the connection that is created for the SOA Server in IPM UI.

Once the entries are made using values that we are supposed to enter in various tables as described above, there is one final step that remains to be done for the changes to reflect on the AXF Task details page.

Open the IPM Drivers UI (http://<your_server_ip>:16000/imaging/faces/Driver.jspx). The page that looks like this:


Enter the Solution Namespace, Command Namespace (Remember, the Start<SolutionNamespace> command namespace. And yes, it is a Command Namespace, though it is never shown as an action on the Task details page!!!) and the user name.

Click on Execute Request.
Click on Clear Configuration Cache.
Click on Reset DMS Metrics.
Click on Execute Response. This shall open your AXF Tasklist page in a new tab, and you should be able to see the newly added action on the details page.

Thanks all for reading!