Is it a batch, a document, a page or a file?

“The ability to save compound documents blurs the definition of “pages”, which is sometimes confusing for knowledge workers.”

The ILINX product suite, as well as most content management systems, saves content in batches. A batch can contain one or more documents and a document can contain one or more pages.

“This made complete sense when we we’re all saving only TIFF images.”

ILINX has the ability to store diverse file types in a single compound document. This includes standard image file formats along with virtually any type of electronic document, such as Microsoft ® Word, Excel, PowerPoint, Text, Video, audio, web content, etc. What used to be pages in a document may now include, as an example, a single page TIFF, a Word document with 35 pages, and a PowerPoint document with 12 pages, all combined into and saved as a single compound document that displays as three pages when indexing.

“We just might have to think about revising our terminology to keep up with all the advances in content management.”

Robert Hughet
Quality Assurance Mgr.
ImageSource, Inc.

How to run SQL code against an Oracle databse

Context: ILINX Capture, ILINX Release and Oracle IPM 11g

Problem: A customer wanted the ability to run some custom SQL code against an Oracle database after a doc has been released to Oracle IPM 11g.

Solution: Place the built-in DatabaseLookup IXM after Release and use the return value from Release to call Oracle. Below is a screen shot of the workflow:

phong

Phong Hoang
Development Manager
ImageSource, Inc.

Pulling the value from a tag in an XML data type using T-SQL

If you need to extract the data from an XML data type column to be used as part of query, and you need it to be a usable data type in MS-SQL, you can use the Value() method.  Using the Value method, we can extract the data contained within an XML tag as a SQL Data Type. The Value() method takes two arguments:

XQuery and SQLType

The following returns the value stored in the second <SSID> tag as a VarChar(50):

– First we create an XML variable to store the data that we’ll use for this example
DECLARE @x xml
SET @x =      ‘<NETWORKS>
<SSID> Wompsters University </SSID>
<SSID> Wompsters Inc </SSID>
</NETWORKS>’

– Select the second SSID value and specify that we’d like to return it as a VarChar(50), (Keep in mind the <SSID> position starts at 1, not 0)
SELECT @x.value(‘(//NETWORKS/SSID)[2]‘, ‘varchar(50)’);

– This will return the VarChar “Wompsters Inc”, which you could use like a normal String in any SQL query

Benn McGuire
QA Test Engineer
ImageSource, Inc.

How to: Get Image Page Count in .NET C#

How to get image page count in .NET C#

private int GetTotalpages(string filePath)
{
int pageCount = 0;
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (Image temp = Image.FromStream(fs))
{
pageCount = temp.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
}
}

return pageCount;
}

KyoungSu Do
Software Developer
ImageSource, Inc.

Creating Case Insensitive Dictionaries In .NET

For millennia, mankind has looked to the stars and wondered, “How can I create a generic Dictionary in .NET that allows me use case insensitive strings as keys?” Well today that age old question will be answered with this neat trick.

Simply put, all you need to do is add a StringComparer object when constructing a generic Dictionary that uses a string key, and make sure to use on of the IgnoreCase StringComparers that are offered. Below is some sample code to illustrate just how easy this is.

// Create a generic dictionary with a string comparer that ignores case sensitivity.
//
// This includes the following:
//  - CurrentCultureIgnoreCase
//  - InvariantCultureIgnoreCase
//  - OrdinalIgnoreCase
Dictionary<string, string> stringMap = 
     new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
stringMap.Add("Test Key", "Some value");

// Now try to access or change the corresponding value with the key.
// The case of the key string no longer matters.
stringMap["test key"] = "This will work";
stringMap["TEST KEY"] = "And also this";
stringMap["tEsT kEy"] = "And this as well";
stringMap["tEST kEY"] = "And finally this";

// This can be done with any dictionary that uses a string as the key
Dictionary<string, int> numberMap = 
     new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
numberMap.Add("Test Key", 0);

// Same deal here, you can use any case to get or set the values in the map
numberMap["test key"] = 1;
numberMap["TEST KEY"] = 2;
numberMap["tEsT kEy"] = 3;
numberMap["tEST kEY"] = 4;

And that’s all there is to it.  I hope you enjoy and find this useful.

Richard Franzen
Developer
ImageSource, Inc.

What Johnny Cash, stolen cars & software development have in common

“Now the headlights they was another sight
We had two on the left and one on the right
But when we pulled out the switch all three of ‘em come on.”
– Johnny Cash
“One Piece at a Time”

Many years ago, Johnny Cash sang a song called “One Piece at a Time”, in which he describes an automobile assembly plant worker stealing parts and pieces of various automobiles and assembling them into a very distinctive, one-of-a-kind car.

Given the nature of software, the essence of which is some form of code, building software is somewhat like putting that car together.  Technology evolves over time, operating systems change, and new tools all contribute to the complex process of building an application.  Code is pieced together in files and modules, and the output of the code in the form of log files and/or visual display on a monitor are the effects of the code.  When building an engine, putting on the heads and bolting up the crankshaft before attaching the pistons and connecting rods isn’t recommended.  Similarly, software designers aren’t always able to see all the parts until there is a basic framework constructed, and limitations of the system come to light.  Re-designing components and restructuring development schedules are not uncommon. Continue reading

ILINX Capture Mobile for iOS and Android Update

ILINX Capture Mobile extends document capture, normally limited to scanners inside of your organization, out to mobile devices in the field.

  • Capture documents on your mobile device via its camera or existing photos folder
  • View and select batch profiles and associated document types live from your internal ILINX Capture system
  • Index and send documents directly into your ILINX Capture workflow for processing, all from your supported mobile device

ILINX Capture Mobile is great for city/county inspectors, accident photos, realtors, appraisers, or anyone needing to document information remotely or even just expedite travel expenses.

Look for the full details coming soon at: http://imagesourceinc.com/

Robert Hughet
Product Manager
ImageSource, Inc.