Captiva Licensing Guide

On the heals of the Captiva License Decoder, I found this handy write up for installing and understanding Captiva licenses:  Captiva Licensing Quick Start Guide.pdf.



Captiva License Decoder

Nicely done little app to decode those pesky Captiva license files to understand what you really have.  Nice work, Jim and Kevin.

Blog postDirect link.

Captiva 7.1 Certified on Windows 10

I recently read in the ECD Product and Solutions Bulletin:

“The Enterprise Content Division continuously improves products to fit your needs and we’re glad to announce that Captiva 7.1 is now certified for Microsoft Windows 10 x64. More information can be found in the release notes, or contact support if you have any questions.”

That’s good news for many I’m sure.

Captiva 7.5 Available

EMC has announced the general availability of Captiva 7.5.  The theme of Captiva 7.5 is “capture at the edge”.  New features in Captiva 7.5, among others, are new Real-time Capture capabilities through a “set of web services designed to meet the needs of emerging mobile and web applications.” These web services expose Captiva as a set of “stateless, capture flow-independent REST services that can be called directly from within a line-of-business application” — that’s pretty cool.  These services, in combination with the new Captiva Web Client, offer great new opportunities for organizations with remote capture needs or those that don’t want to be tied to desktop components for capture, index, and classification.  For additional information, see the announcement, or the resource page.

UPDATE:  Here is a pretty candid review of the new Import module designed to replace MDW.

Captiva IA Password Vulnerability Patched

EMC issued ESA-2015-012: EMC Captiva Capture Sensitive Information Disclosure Vulnerability along with patch 25 (for Captiva v7.0) and patch 13 (for Captiva v7.1) to correct a problem where the IA database password may be logged in clear text by the DAL.  Note that Captiva v6.1, v6.5, and v6.6 are also identified as containing the same problem but are not patched.

Momentum Live: Upgrading Captiva

As part of the Momentum Live program, EMC-IIG offers you the opportunity to interact with community members and other experts on a variety of topics.  On Aug 20-27, the topic will be EMC Captiva Best Practices for Upgrades & Migration.  Join the conversation and learn something.  Better yet, share a nugget of wisdom or a lesson learned with other community members.

Past episodes of Momentum Live include energy & engineering, InfoArchive, managing engineering documentation, and application decommissioning, and can be accessed here.

UPDATE:  I just read through the transcript from the Captiva:  Is your system healthy? Momentum Live session and found it really insightful.

How to Export Tabular Data in Captiva 7

See my post over at Armedia’s blog demonstrating how to export tabular data in Captiva 7.

Captiva 7 Web Services Tutorial

I am pleased to announce the availability of my Captiva 7 Web Services Output (WSO) Tutorial.  In this paper I explain how to use the Captiva Web Service Output (WSO) module.  The tutorial walks through creating web services to be consumed by WSO, setting up the CaptureFlow containing WSO, configuring WSO, and testing the entire process from end-to-end.  The tutorial presents a simple use case which requires Captiva to interface with, extract metadata from, and import scanned documents into a case management system — all via web services.

As with my previous Captiva tutorial, this tutorial is a result of plunging head-first into a project and finding no useful, publicly available resources to assist me.  This paper chronicles my findings and offers source code as a starting point for others.

You can find the tutorial here, on my Publications page, and on the EDN.  Enjoy!

I welcome any feedback.

Simple Uses of Captiva’s Multi Module – Part 2

In this post I demonstrate a simple CaptureFlow script to split pages into documents when a Patch 3 separator sheet is encountered. Refer to the previous post for details regarding the desired Patch 3 behavior. For context, the CaptureFlow snippet is repeated here.

The Multi module can be used to modify the Captiva node tree and convert pages into documents by “splitting” the list of page nodes into a list of documents with single pages. Perhaps the easiest way to understand this behavior and the desired outcome is to examine the graphic below.  When the Patch 3 sheet is encountered in the node tree on the left, it is deleted and a level 1 node is inserted before every following level 0 node, until another level 1 node is encountered or the end of the batch.


To create a CaptureFlow script in Captiva Designer, click the Multi module step that will implement this function (ProcessPatch3 in my CaptureFlow depicted above), and choose Scripting… from the drop down menu. The CaptureFlow scripting editor will open. The following VB code implements the required functionality.

Imports System
Imports Emc.InputAccel.CaptureFlow

Public Partial Class MultiTest

' #1 – execute before module is triggered
Public Shared Sub ProcessPatch3_Prepare (node As IBatchNodeData)
  Dim docs As IBatchNodeData()
  Dim pages As IBatchNodeData()
  Dim patchcode As String = ""
  Dim imgProc As IBatchNodeData
  Dim has_Patch_3 As Boolean = False

  ' define Multi constants
  Dim IAMULTI_DELETE As Int16 = 16
  Dim IAMULTI_READY As Int16 = 8

  On Error Resume Next

  ' #2 - get collection of all documents in batch
  docs = node.GetDescendantNodes(1)
  For Each doc As IBatchNodeData In docs

    ' #3 - get collection of pages from each document
    pages = doc.GetDescendantNodes(0)

    ' #4 - evaluate each page
    For Each page As IBatchNodeData In pages

      ' #5 – get patch code from Image Processor step
      imgProc = page.GetStepNode("ImageProcessor")
      patchcode = imgProc.ReadString("Patchcode")

      ' #6 – if this page is patch code, set flag and delete
      ' this page
      If patchcode.Equals("3") Then
        has_Patch_3 = True

      ' #7 – otherwise process it accordingly
        If has_Patch_3 = True Then
        End If
      End If
    has_Patch_3 = False
End Sub
End Class

Here is how this code works:

  1. The CaptureFlow script editor automatically creates the _Prepare() and _Finish() methods for your module. Because I want to set all of the trigger values before the Multi module is executed, I implement this logic in the _Prepare() method.
  2. Get all of the documents in the batch into a collection.  This is accomplished by passing 1 as the level parameter to the GetDescendantNodes() method.  The node object here is essentially the entire Captiva node tree as it is being sent to the RemoveEmptyDocs step.
  3. For each document in the collection, get a collection of its pages.  This code uses the same GetDescendantNodes() method as step 2, but now the “node” it is operating on is a document retrieved in step 2, and the level parameter is 0 (pages).
  4. For each page in the collection, evaluate each page.
  5. Reach back to the ImageProcessing step for each page to retrieve the Patchcode value for this page.  Patchcode is a standard level 0 IA value.
  6. If patchcode equals 3, I have found a Patch 3 sheet. Set the global variable, has_Patch_3 = true and delete this page.
  7. If patchcode is empty or some other value, then check to see if a patch code has been encountered in this document (i.e., has_Patch_3 = true). If so, split this page into its own document using the Ready trigger value 1. Otherwise, the page gets the default Ready value of 8.


These past couple of posts (0,1) have demonstrated some simple uses of the Captiva Multi module.  In particular, they have demonstrated how to manipulate the Captiva node tree to delete unwanted pages and documents, or to restructure the node tree based on patch codes.  The essence of both implementations, that is using IA Value assignments and CaptureFlow scripting, is the same:  assign each page’s Multi Ready trigger the no-op value (8), and then change it accordingly as conditions dictate.  The primary difference between the IA Value assignment and the CaptureFlow scripting approaches is that the CaptureFlow script is able to persist the state of the patch code while examining the page nodes of a document.  It uses this persisted state to determine whether or not to “split” the node into a document or not.  This type of persistence is not possible using IA Value assignment.

If you have other cool examples of using Captiva’s Multi module I’d like to hear about them.

Simple Uses of Captiva’s Multi Module – Part 1

In this post I demonstrate how to delete selected pages and documents from a Captiva batch using the Multi module and IA Value assignments. Refer to the previous post for details regarding the requirements for removing pages and documents. For context, the CaptureFlow snippet is repeated here.


Removing Divider Sheets

To remove all of the divider sheets in a batch, ensure the Multi module that implements this task (RemoveDividers in my CaptureFlow) is triggered at the Batch level. Then set the following IA Values before the module is triggered (location A on the diagram):

RemoveDividers:0.Ready = 8
RemoveDividers:0.Ready = 16 when ToUpper(ImageProcessor:0.Barcode0_Text) = “DIVIDER”

This has the effect that for every page, the Multi module is set to process the page normally (i.e., Ready state 8), unless it contains a barcode that reads “DIVIDER”. If a divider sheet is recognized in this way, the Ready trigger is set to 16 for that page. This structure of IA assignments is necessary because the simple IA assignment language does not contain an if-then-else construct. Also notice that although the Multi module triggers at the Batch level (7), I am setting IA values at the Page level (0). This has the desired effect of removing all of the divider sheets from the batch.

Removing Blank Pages

Removing blank pages from the batch is similar to removing the divider sheets. Prior to executing the instance of the Multi module (RemoveBlankPages in my CaptureFlow), set the following IA Values (location B on the diagram):

RemoveBlankPages:0.Ready = 8
RemoveBlankPages:0.Ready = 16 when ( (ScanPlus:0.BlankPage <> 0) OR (ImageProcessor:0.BlankPage = 1) )

Blank pages can be detected in two places: by the scanner, or by the Image Processor module. A non-blank page receives a value of 0 (zero) from ScanPlus and a value of 1 from the Image Processor. So, if either of these conditions is not true, set Multi’s Ready trigger to the delete value (16). Notice again that IA Values are set at the Page level, even though the Multi module is triggered at the Batch level. This has the desired effect of removing all of the blank pages from the batch.

Removing Empty Documents

Removing empty documents from the batch follows the same pattern as the previous two examples. The only difference is the level at which the Ready trigger is set and the condition used to set the trigger. These IA Values are set at location C in the diagram; the Multi module is named RemoveEmptyDocs in my CaptureFlow.

RemoveEmptyDocs:1.Ready = 8
RemoveEmptyDocs:1.Ready = 16 when (_Node:1.NumChildrenAtL0 = 0)

Notice here that I set the Ready trigger at level 1 (document) to delete the document if it does not have any children at level 0 (page).
In the next post, I will demonstrate how to process the Patch 3 separator sheets such that all pages following it are processed as individual documents. This implementation will utilize some simple CaptureFlow scripting.

%d bloggers like this: