<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Enterprise Dev Craft]]></title><description><![CDATA[Practical engineering lessons from 15+ years in enterprise apps development.
Description: Hands-on tips, solutions, patterns, and lessons learned from building ]]></description><link>https://flow-ecm.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 26 Oct 2026 11:08:16 GMT</lastBuildDate><atom:link href="https://flow-ecm.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A VS Code Extension to Generate Boilerplate Java Maven Projects for IBM BAW Case and Navigator Customization]]></title><description><![CDATA[VS Code extension to generate Java Maven boilerplate for IBM BAW Case custom widgets and actions, reducing manual project setup.]]></description><link>https://flow-ecm.hashnode.dev/a-vs-code-extension-to-generate-boilerplate-java-maven-projects-for-ibm-baw-case-and-navigator-customization</link><guid isPermaLink="true">https://flow-ecm.hashnode.dev/a-vs-code-extension-to-generate-boilerplate-java-maven-projects-for-ibm-baw-case-and-navigator-customization</guid><category><![CDATA[IBM]]></category><category><![CDATA[BAW]]></category><category><![CDATA[cp4ba]]></category><category><![CDATA[IBM Case Manager]]></category><category><![CDATA[icn]]></category><category><![CDATA[navigator]]></category><category><![CDATA[widgets]]></category><category><![CDATA[plugin]]></category><category><![CDATA[maven]]></category><category><![CDATA[Java]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[dojo]]></category><dc:creator><![CDATA[Ramesh Bhat]]></dc:creator><pubDate>Sun, 18 Oct 2026 19:43:59 GMT</pubDate><content:encoded><![CDATA[<p>When working with <strong>IBM Business Automation Workflow (BAW)</strong> <strong>Case</strong> solutions, creating an extension package for <strong>custom page widgets</strong> and <strong>actions</strong> is not exactly a plug-and-play experience. Creating CSHS pages is another option, I will cover that path in another blogpost.</p>
<p>IBM provides the documentation and structure required to build these customizations, but getting a <strong>working Java Maven project</strong> setup from scratch still takes time. You need to organize the folders correctly, create the required files, wire Maven properly, and make sure the project aligns with the expected IBM BAW customization package format.</p>
<p>To make this easier, I built a <strong>VS Code extension</strong> that generates the boilerplate Java Maven project for <strong>IBM BAW Case</strong> widgets package and a <strong>Navigator</strong> plugin inside it.</p>
<ul>
<li><p>GitHub: <a href="https://github.com/RameshBhat/CaseWidgetsProjectGeneratorExtension"><strong>https://github.com/RameshBhat/CaseWidgetsProjectGeneratorExtension</strong></a></p>
</li>
<li><p>IBM documentation reference: <a href="https://www.ibm.com/docs/en/baw/24.0.x?topic=solutions-creating-custom-page-widgets-actions"><strong>https://www.ibm.com/docs/en/baw/24.0.x?topic=solutions-creating-custom-page-widgets-actions</strong></a></p>
</li>
</ul>
<hr />
<p>In this post, I’ll explain:</p>
<ul>
<li><p>the problem I was trying to solve,</p>
</li>
<li><p>why IBM BAW customization setup is cumbersome,</p>
</li>
<li><p>what the extension generates,</p>
</li>
<li><p>and how this can speed up development for Case custom widgets and actions.</p>
</li>
</ul>
<hr />
<h2><strong>The problem</strong></h2>
<p>If you have worked on IBM BAW Case client customizations or Navigator desktop customizations, you probably already know that the initial project setup is one of the most frustrating parts.</p>
<p>Before you even start writing actual business logic, you need to:</p>
<ul>
<li><p>create the correct Maven project structure,</p>
</li>
<li><p>organize Java source folders,</p>
</li>
<li><p>create package definitions,</p>
</li>
<li><p>prepare the customization package layout,</p>
</li>
<li><p>add the necessary boilerplate files,</p>
</li>
<li><p>and make sure everything matches IBM BAW expectations.</p>
</li>
</ul>
<p>This is not difficult because the code itself is complex — it is difficult because the setup is <strong>manual</strong>, <strong>repetitive</strong>, and <strong>easy to get wrong</strong>.</p>
<p>Even with IBM documentation, the process still requires careful attention to project structure. A small mistake in folder layout, naming, or packaging can slow down development and debugging.</p>
<p>That is the problem I wanted to solve.</p>
<hr />
<h2><strong>Why I built this extension</strong></h2>
<p>I wanted a faster way to bootstrap a project for <strong>IBM BAW Case customization</strong> without manually repeating the same setup every time.</p>
<p>The goal of the extension is simple:</p>
<blockquote>
<p><strong>Generate a ready-to-use Java Maven boilerplate project for IBM BAW Case customization packages directly inside VS Code.</strong></p>
</blockquote>
<p>Instead of spending time creating folders and template files by hand, the developer can run the extension and start implementing the actual widget or action logic immediately.</p>
<p>This is especially useful because IBM BAW customization package setup is <strong>not a trivial project scaffold</strong> like a basic Spring Boot app or a regular Maven archetype. It has its own structure and expectations, and setting it up correctly from scratch can take time.</p>
<hr />
<h2><strong>What the extension does</strong></h2>
<p>The VS Code extension helps generate the base project structure needed for IBM BAW Case customization development.</p>
<p>At a high level, it can help with:</p>
<ul>
<li><p>creating the boilerplate <strong>Java Maven project</strong>,</p>
</li>
<li><p>generating the required folder structure,</p>
</li>
<li><p>reducing manual setup effort,</p>
</li>
<li><p>giving developers a starting point aligned with IBM BAW customization requirements.</p>
</li>
</ul>
<p>This means you can spend less time on setup and more time on:</p>
<ul>
<li><p>widget implementation,</p>
</li>
<li><p>action logic,</p>
</li>
<li><p>integration testing,</p>
</li>
<li><p>and deployment into your BAW environment.</p>
</li>
</ul>
<hr />
<h2><strong>Why this matters</strong></h2>
<p>In enterprise development, especially with platforms like IBM BAW, productivity is often lost not in coding but in <strong>environment and project setup</strong>.</p>
<p>A small automation like this can make a big difference because it:</p>
<ul>
<li><p>improves consistency across projects,</p>
</li>
<li><p>reduces setup errors,</p>
</li>
<li><p>speeds up onboarding for new developers,</p>
</li>
<li><p>and makes repeated customization work much easier.</p>
</li>
</ul>
<p>For teams building multiple custom widgets or case actions, having a repeatable scaffold can save a lot of time over the life of a project.</p>
<hr />
<h2><strong>Reference: IBM BAW documentation</strong></h2>
<p>The extension is based around the IBM guidance for creating custom page widgets and actions:</p>
<p><a href="https://www.ibm.com/docs/en/baw/26.0.x?topic=solutions-creating-custom-page-widgets-actions">https://www.ibm.com/docs/en/baw/26.0.x?topic=solutions-creating-custom-page-widgets-actions</a></p>
<p>If you are new to IBM BAW customization, I strongly recommend reading the official documentation first. It explains the overall customization model, while the extension focuses on reducing the manual setup effort.</p>
<hr />
<h2><strong>The GitHub project</strong></h2>
<p>The VSCode extension package is available here:</p>
<p><a href="https://github.com/RameshBhat/CaseWidgetsProjectGeneratorExtension"><strong>https://github.com/RameshBhat/CaseWidgetsProjectGeneratorExtension</strong></a></p>
<p>If you work with IBM BAW Case solutions and want to avoid creating the same boilerplate project again and again, feel free to try it out.</p>
<p>If your need is to only customize Navigator desktops, then you can directly open the plugin project in the VSCode.</p>
<hr />
<h2><strong>Final thoughts</strong></h2>
<p>IBM BAW is powerful, but anyone who has built Case customizations knows that getting the initial project structure right can be a challenge.</p>
<p>This VS Code extension is my attempt to make that process simpler by generating the boilerplate Java Maven project for <strong>IBM BAW Case customization packages</strong>.</p>
<p>If this is a problem you have faced too, I’d love your feedback.</p>
]]></content:encoded></item><item><title><![CDATA[Content services GraphQL, and why schema matters..]]></title><description><![CDATA[Highlighting the potential and robustness API development using GraphQL schema provided in IBM Content Services in CP4BA.]]></description><link>https://flow-ecm.hashnode.dev/content-services-graphql-and-why-schema-matters</link><guid isPermaLink="true">https://flow-ecm.hashnode.dev/content-services-graphql-and-why-schema-matters</guid><category><![CDATA[IBM]]></category><category><![CDATA[cp4ba]]></category><category><![CDATA[filenet]]></category><category><![CDATA[Content Services]]></category><category><![CDATA[GraphQL]]></category><dc:creator><![CDATA[Ramesh Bhat]]></dc:creator><pubDate>Sat, 10 Oct 2026 16:57:48 GMT</pubDate><content:encoded><![CDATA[<p>GraphQL is not new in the FileNet world. It has been around since the 5.5.x line, long before every discussion started getting folded into CP4BA.</p>
<p>That is exactly why Content Cortex is worth looking at from a different angle.</p>
<p>The story here is not that IBM added GraphQL to the stack. The story is that the schema is front and center, and that changes how you approach content access.</p>
<p>After looking through the Content Cortex development material alongside IBM’s published Content Services GraphQL schema and JavaScript samples, what stands out is not the transport or the syntax. It is the fact that the schema becomes the contract you build against.</p>
<p>That is the part that matters.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a8b1f0a664f0f9ec42de6a1/c737ea28-e4d4-4e6e-8b38-3bdcfcc4d07e.png" alt="" style="display:block;margin:0 auto" />

<h2><strong>The problem was never access</strong></h2>
<p>FileNet never had a shortage of APIs. There was always a way to reach content, object metadata, classes, folders, and property values.</p>
<p>What usually caused friction was the shape of consumption.</p>
<p>Too much payload. Too much response shaping in the client. Too much coupling between backend structure and what the application actually needed. Too much code spent pulling apart responses and stitching together something usable.</p>
<p>That is where a schema-driven model starts to pay off.</p>
<h2><strong>The schema tells the real story</strong></h2>
<p>The most useful artifact in all of this is not the marketing language and not even the overview page. It is the schema itself.</p>
<p>IBM published a <strong>Content Services GraphQL schema</strong> sample, and it is the fastest way to understand how the model is exposed. Looking at the <a href="https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-javascript-samples/graphQL.js">graphQL.js</a> file tells you more than any generic explanation ever will.</p>
<p>You can see the actual types, the query structure, the object model, and how repository-backed content is represented.</p>
<p>That matters because in a GraphQL-based surface, the schema is not background detail. It is the API.</p>
<p>Once you look at it that way, the conversation becomes much more concrete. You stop talking about GraphQL as an abstract capability and start looking at whether the exposed model is actually useful.</p>
<h2><strong>The JavaScript sample makes the picture clearer</strong></h2>
<p>The other useful piece IBM published is the JavaScript sample.</p>
<p>This matters because GraphQL is easy to describe in theory and much more revealing in client code. The <a href="https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-javascript-samples/app.js"><code>app.js</code></a> sample shows how the request is assembled and how the response is consumed from application code.</p>
<p>That is where the value becomes practical.</p>
<p>If the schema is well designed, the client stays focused. You build a request around the fields you need, send it, and work with a response that is already much closer to the shape the consumer wants.</p>
<p>That is a better development experience than hauling back a large response and carving it down after the fact.</p>
<h2><strong>Why Content Cortex is interesting</strong></h2>
<p>What makes Content Cortex worth paying attention to is that it continues this schema-driven way of exposing content-related capabilities.</p>
<p>That is the useful part.</p>
<p>The consumer gets to work against a typed contract. The request is shaped around the consumer need, not around a fixed backend payload. The result is a cleaner path from repository-backed data to application-facing structure.</p>
<p>That is a much better fit for content-heavy applications, especially where the consumer needs a selective projection instead of a broad response.</p>
<p>This is the difference that matters in practice. Not whether GraphQL exists, but whether the exposed schema gives you a cleaner model to build against.</p>
<h2><strong>A better developer surface</strong></h2>
<p>In the old pattern, the work often started after the API call. You retrieved a lot, filtered a lot, and transformed a lot.</p>
<p>With a schema-driven surface, more of that control moves into the request itself.</p>
<p>That changes the developer experience in a useful way.</p>
<p>The schema defines the available types. The query defines the projection. The client asks for what it needs and gets back a response shaped around that choice.</p>
<p>That is why the schema matters more than the fact that GraphQL is being used.</p>
<h2><strong>Real value for content-centric applications</strong></h2>
<p>This model is especially useful when the application is content-centric and selective by nature.</p>
<p>That includes cases where the consumer needs:</p>
<ul>
<li><p>specific metadata fields</p>
</li>
<li><p>repository object information without excess payload</p>
</li>
<li><p>focused views over content structures</p>
</li>
<li><p>a cleaner contract between UI and backend data</p>
</li>
</ul>
<p>For this kind of work, a well-exposed schema is easier to reason about than broad endpoint responses that have to be trimmed and reworked in the application layer.</p>
<p>That is the practical advantage.</p>
<h2><strong>Final thought</strong></h2>
<p>Content Cortex is not interesting because it uses GraphQL. GraphQL has been in the FileNet stack for years.</p>
<p>What makes it worth paying attention to is the way the schema becomes the primary developer surface. That shifts the conversation from generic API access to a typed, consumer-shaped contract for working with content services.</p>
<p>And in this space, that is the part that actually improves the development experience.</p>
<h2><strong>References</strong></h2>
<ul>
<li><p>Content Cortex Development Overview</p>
<p><a href="https://www.ibm.com/docs/en/content-cortex/26.0.1?topic=development-overview"><strong>https://www.ibm.com/docs/en/content-cortex/26.0.1?topic=development-overview</strong></a></p>
</li>
<li><p>Example Queries and Mutations</p>
<p><a href="https://www.ibm.com/docs/en/content-cortex/26.0.1?topic=development-example-queries-mutations"><strong>https://www.ibm.com/docs/en/content-cortex/26.0.1?topic=development-example-queries-mutations</strong></a></p>
</li>
<li><p>Content Services GraphQL schema sample</p>
<p><a href="https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-Schema/csgraphql_schema.graphqls"><strong>https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-Schema/csgraphql_schema.graphqls</strong></a></p>
</li>
<li><p>Content Services GraphQL JavaScript sample</p>
<p><a href="https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-javascript-samples/app.js"><strong>https://github.com/ibm-ecm/ibm-content-platform-engine-samples/blob/master/CS-GraphQL-javascript-samples/app.js</strong></a></p>
</li>
</ul>
<p>#IBM #CP4BA #FileNet #ContentManagement #GraphQL #ECM #ContentCortex</p>
]]></content:encoded></item></channel></rss>