Deciding when to use knowledge module, ODI procedure or an OpenTool is a debate every ODI user will have to face eventually. When facing such a decision, there are some points that make it an easier choice to make.

This post is not written to explain ODI KM, ODI Open Tool, ODI procedure or any technical issues around them. It is more for explaining the concept and when to use each one, as I look at things.

Knowledge module, what is it really?

Actually, despite of what many people might think, knowledge modules do not contain all the functionality one might need for his integration project. They contain common functionality for the technologies which ODI supports out of the box and are templates, which could be learned from and modified in order to meet one’s more specific needs or other technologies. Before starting any project, the assumption that you have all the functionality you need in the KMs should be verified, because if you do – it is nice. If you don’t, it will cost you time and this time should be included in your project schedule, otherwise you will lag behind your timeline. It might happen, that in order to meet the requirements of a project further KM development is required. Although, modifying a KM is not something you do too often, before so, it needs to be assured, that there is no other out of the box KM, which does what is needed, the one we intend to modify is the right one for the job and still does not satisfy. Another thing, usually a KM modification will be needed for features, which we will want to use later on and maybe in other projects as well. As I see it, when modifying a template, you should be creating another template. Modifying KMs all the time, can become a pretty messy thing.

Procedure is like an interface without GUI.

You basically, can achieve almost everything you do in an interface and more by writing procedures, but writing procedures is a much more time consuming procedure :). It is more an object for a single project, you hit a wall and need to add some functionality, which is not built into ODI? “OK”, write a procedure, just don’t be reusing it on right and left, otherwise you might “KO” (excuse me for my geeky humor). Knowledge modules are designed to be reused in different projects while using logical schemas, procedures are not. This would make harder to reuse a procedure for doing the same thing on another logical schema, for this you would need to duplicate the procedure and remember to choose another schema from the drop down menu, such things slow down the development of your projects and are pointless, you know… remembering stuff. Another word on duplication of procedures, I don’t think it is right to maintain two or more objects with the same functionality in one project, just because you need to connect to a different DBs, do you? What if a change will be required? Good luck.
Reusing the procedure with no schema connectivity or within the same connection (for example, locking different tables) is possible and might be fine , as long as the option are used correctly. Although, either way I would not advise to go and distributing it between different projects, if you need a global object, create one. Use either KM or open tool, depending on the task.

Open tool is the way to integrate your own functionality.

I will say right away, that not many are up for such a solution, either because this requires a more deeper java knowledge or the time it might take to develop such a thing is a little longer. This is the right spirit to pull you back in the long run. Developing and maintaining fundamental tools for your organization is a must and part of the job. If you need a tool to be reused in your projects, this is is the way and it will be available for you anywhere an ODI tool is. The biggest difference from KM or procedure, is the fact that open tool will not share the transactions within your package, it is more a global standalone and persistent step in a package. Also, this tool should achieve its goal with minimal functionality, because you would need to be able to have some kind of backwards compatibility when modifying the class you have developed. You can read more on Open Tools in  my previous post.

KMs, Open Tools or procedures? What are you using the most?