<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Modern Mainframe - Medium]]></title>
        <description><![CDATA[Mainframe modernization for the next generation of application developers using Visual Studio Code (VS Code), Git, and DevOps automation — automated build, test, deployment of COBOL applications &amp; more. Features articles on Code4z, Team Build and Endevor Bridge for Git. - Medium]]></description>
        <link>https://medium.com/modern-mainframe?source=rss----4c7d2fded734---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Modern Mainframe - Medium</title>
            <link>https://medium.com/modern-mainframe?source=rss----4c7d2fded734---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 16 Jun 2026 11:19:32 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/modern-mainframe" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[My Journey From ISPF to VS Code and Git With Code4z]]></title>
            <link>https://medium.com/modern-mainframe/my-journey-from-ispf-to-vs-code-and-git-with-code4z-20bd25826c7a?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/20bd25826c7a</guid>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[broadcom]]></category>
            <category><![CDATA[code4z]]></category>
            <category><![CDATA[mainframe-modernization]]></category>
            <category><![CDATA[mainframe-developer]]></category>
            <dc:creator><![CDATA[Vijay Nair]]></dc:creator>
            <pubDate>Mon, 16 Mar 2026 14:55:53 GMT</pubDate>
            <atom:updated>2026-03-16T14:55:52.304Z</atom:updated>
            <content:encoded><![CDATA[<p>Are you a z/OS developer hesitant about <strong>mainframe modernization</strong>? If you had told me a month ago that I would abandon my 3270 emulator and trade years of ISPF for<strong> VS Code</strong>, I would have laughed. Yet, taking the leap from traditional green screens to a modern IDE using Broadcom’s<strong> </strong><a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.code4z-extension-pack"><strong>Code4z</strong></a> extension pack hasn’t just transformed my UI — it has completely re-architected my daily development workflow.</p><p>For years, the <em>green screen</em> has been my home. I know the ISPF shortcuts like the back of my hand. I take pride in my ability to navigate SYSVIEW at lightspeed, hunt down datasets, and trace Assembler macros through split screens. To a mainframe developer, that knowledge is a badge of honor.</p><p>But recently, I was handed a challenge: build a new feature that generates detailed dataset information based on JCL SYSIN inputs, and do it <strong>using 0% green screen and 100% modern tools</strong>. While this breakdown doesn’t cover the <em>entire</em> Software Development Life Cycle (like requirements gathering or final production deployment), it covers the absolute meat of what we do every single day as developers.</p><p>Here is the modern toolchain that takes our daily development beyond the standard ISPF panels:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aArtw-XTpXHz0OJJZ670oA.png" /></figure><p>Let’s break down how this workflow actually felt, phase by phase.</p><h3>1. Analysis &amp; Editing: Eliminating Navigation Friction</h3><p><strong>🛠️ Tech Stack:</strong> <em>Endevor Bridge for Git, Code4z (COBOL/HLASM Language Support, Cobol Control Flow )</em></p><p><strong>The Traditional Workflow:</strong> Analyzing code in ISPF involves significant navigation overhead. Simultaneously viewing a MACLIB, the source code, and a reference listing requires constant panel navigation (F3) and logical screen swapping (F9), making it difficult to maintain a comprehensive view of the application logic.</p><p><strong>The Modern Workflow:</strong></p><ul><li><strong>Persistent Split Screens:</strong> By cloning my repository locally using <a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.bridge-for-git-explorer"><strong>Endevor Bridge for Git</strong></a>, my workspace is entirely unified. I can split my screen to see my source, MACLIB, and list files all at once. Best of all? No repetitive logins. When I open VS Code the next morning, the elements I was editing are exactly where I left them.</li><li><strong>Intelligent Navigation:</strong> The <strong>COBOL and HLASM Language Support</strong> extensions completely change code traversal. Instead of manual string searches, I just right-click and hit <strong>“Peek Definition”</strong> or <strong>“Peek Reference.”</strong> For copybooks, I just hover over the macro and click to open it.</li><li><strong>Taming Legacy Code:</strong> When analyzing a 25,000-line COBOL program I’ve never seen before, the <strong>Code Outline</strong> gives me a structural overview. But for the deep dive, I open the same <strong>Control Flow Graph</strong> used in debugging. Even without running the code, it generates a visual roadmap of the spaghetti logic, helping me pinpoint exactly where to inject new code without breaking existing flows.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OzbN0naztGOjNh2TVZ6vxw.png" /><figcaption><strong>VS Code editor showing the COBOL Control Flow extension visualizing a program’s PERFORM graphs, or a developer using the “Peek Declaration” feature on a variable.</strong></figcaption></figure><h3>2. Compile &amp; Build: Local Execution &amp; Clean Merges</h3><p><strong>🛠️ Tech Stack:</strong> <em>Team Build, Enterprise Git</em></p><p><strong>The Traditional Workflow:</strong> In the traditional Endevor interface, compiling follows a proven, sequential flow: you issue a generate command, wait for execution, and navigate to the list file on a separate screen to review errors. When multiple developers work on the same module, it requires careful, manual coordination to merge changes and ensure no code is overwritten.</p><p><strong>The Modern Workflow:</strong></p><ul><li><strong>Frictionless Local Builds:</strong> <strong>Team Build</strong> doesn’t reinvent the wheel — it just brings the process into the local IDE. I can compile and build right in VS Code, and the load module is made available on the mainframe for testing. It makes the existing process seamless.</li><li><strong>Solving the Merge Headache:</strong> Because we push our code to an enterprise Git repo, dealing with teammates modifying the same module is no longer painful. Standard Git conflict resolution highlights exactly what changed side-by-side, letting me easily merge code locally before it ever hits Endevor.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kwb23RejrkhpeHFPodvv0Q.png" /><figcaption><strong>A visual representation of a Git merge conflict being resolved side-by-side in VS Code, alongside the terminal output of a successful Team Build.</strong></figcaption></figure><h3>3. Testing &amp; Execution: From SYSVIEW Refresh loop to Right-Click Submits</h3><p><strong>🛠️ Tech Stack:</strong> <em>Code4z </em>(Z<em>owe Explorer, Data Editor for Mainframe, JCL Language Support)</em></p><p><strong>The Traditional Workflow:</strong> My specific development task required submitting JCL with new SYSIN parameters. The old way meant editing the SYSIN in ISPF, submitting the JCL, backing out, opening SYSVIEW, and frantically refreshing to view the job log output. Then, to verify the actual data changes, I would have to navigate to a different utility like File Master plus.</p><p><strong>The Modern Workflow:</strong></p><ul><li><strong>Right-Click Submit:</strong> With Zowe Explorer, I just keep my datasets open in the editor. I make my changes to the SYSIN, right-click, and hit “Submit Job.”</li><li><strong>Instant Log Retrieval: </strong>Job logs stream instantly to the IDE or download locally via Zowe. Meanwhile, integrated JCL validation catches syntax errors pre-submission, completely eliminating the friction of repetitive mainframe logins.</li><li><strong>Side-by-Side Data Validation:</strong> Validating the dataset information was critical. Instead of reverting to a green-screen utility, I used Broadcom’s Data Editor to open target datasets directly in VS Code. This lets me check precise attributes and validate data side-by-side with my job output in one unified view.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FUUmAow3GukfcNYBfOYs-g.gif" /><figcaption>Submitting JCL via Zowe Explorer while validating dataset attributes side-by-side.</figcaption></figure><h3>4. Debugging &amp; Analysis: The “Cockpit View” of Your Logic</h3><p><strong>🛠️ Tech Stack:</strong> Code4z (<em>Debugger for Mainframe), InterTest / SymDump</em></p><p><strong>The Traditional Workflow: </strong>InterTest and SymDump are incredibly powerful, but their 3270 interfaces are bottlenecked by screen real estate. You are forced into constant trade-offs — choosing to view source code, trace data, or monitor a few variables. Because you cannot see the full context at once, tracking complex GO TO or PERFORM logic becomes a fragmented, screen-toggling experience.</p><p><strong>The Modern Workflow:</strong></p><ul><li><strong>The “Trifecta” View:</strong> This is where the modern interface truly shines. When I launch the <strong>Debugger for Mainframe Code4z extension</strong>, I don’t just see code. I set up a “Cockpit View” that is impossible in ISPF:</li><li><strong>Left Panel:</strong> My <strong>Variables</strong> (updating in real-time), <strong>Call Stack</strong> (showing exactly how I got here), and <strong>Trace</strong> (history of execution).</li><li><strong>Center Panel:</strong> The live <strong>Source Code</strong> with the active execution line highlighted.</li><li><strong>Right Panel:</strong> The <strong>Control Flow Graph</strong>, visually mapping the program’s logic nodes.</li></ul><p><strong>Visualizing the Path:</strong> As I step through the code line-by-line, the Control Flow Graph on the right <em>animates</em> with me. I can literally watch the path of execution turn green as it flows through the logic nodes.</p><ul><li><strong>Proof of Logic:</strong> This isn’t just cool to look at; it is a verification tool. If I expect the code to enter the “High Risk” paragraph but watch the graph divert to “Standard Risk,” I know immediately where the logic broke — without digging through variables to find the cause. It connects the <em>data</em> (variables) with the <em>behavior</em> (graph) instantly.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C5V9hlcdzrwet_qy0vPGqA.gif" /><figcaption><strong>A screen recording showing the debugger stepping through the COBOL code, with the Control Flow Graph on the right highlighting the path in real-time.</strong></figcaption></figure><h3>5. The Reality Check: It Wasn’t All Smooth Sailing</h3><p>I won’t lie to you — abandoning 11 years of muscle memory is frustrating. The transition wasn’t instantaneous, and I hit several walls that made me want to run back to ISPF.</p><p><strong>The Muscle Memory Battle</strong> <br>For the first week, my fingers were my worst enemy. In ISPF, Enter is your &quot;Execute&quot; key. In VS Code, Enter just adds a new line. I can’t tell you how many times I stared at the screen waiting for a job to submit, only to realize I was just staring at a text editor. Losing my F7/F8 scrolling and F3 exit habits took genuine effort to unlearn.</p><p><strong>The “Black Box” Anxiety</strong> <br>In Endevor on the mainframe, I know exactly where my code is. Moving to Git was a mental leap. The concept of “staging” and “committing” locally before pushing felt unsafe at first. <em>Is my code actually saved? Did I just overwrite the master branch?</em> Trusting a distributed version control system took time, and I had to force myself to trust the process.</p><p><strong>The Setup Curve</strong> <br>ISPF is just <em>there</em>. You log in, and it works. VS Code requires setup. Configuring Zowe profiles, ensuring my certificates were valid, and mapping my local folders to the correct Endevor systems wasn’t a one-click affair. It required me to understand the “plumbing” of how my PC talks to the mainframe — something ISPF had always hidden from me.</p><h3>The Bottom Line</h3><p>Taking the challenge to go 100% modern for this core part of my daily work was an eye-opener. Moving from ISPF to a modern, Git-driven, VS Code-based stack isn’t about replacing the mainframe — it’s about replacing the friction. By leveraging Endevor Bridge for Git, Zowe, and Broadcom’s Code4z extensions, I get to keep the reliability and power of z/OS while finally adopting a workflow that lets me focus entirely on the code, rather than the environment.</p><p>If you are a mainframe developer holding onto your green screen, take it from me. Jump in.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=20bd25826c7a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/my-journey-from-ispf-to-vs-code-and-git-with-code4z-20bd25826c7a">My Journey From ISPF to VS Code and Git With Code4z</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Code4z VS Code PL/I Language Extension Preprocessor Support]]></title>
            <link>https://medium.com/modern-mainframe/code4z-vs-code-pl-i-language-extension-preprocessor-support-915db130116b?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/915db130116b</guid>
            <category><![CDATA[ibm-z]]></category>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[cobol]]></category>
            <dc:creator><![CDATA[Azat Satklyčov]]></dc:creator>
            <pubDate>Mon, 02 Mar 2026 11:32:37 GMT</pubDate>
            <atom:updated>2026-03-02T11:32:36.158Z</atom:updated>
            <content:encoded><![CDATA[<p>In my previous blog “<a href="https://medium.com/modern-mainframe/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420">Code4z’s Newest Mainframe Language Extension</a>”, I’ve written about a new VS Code extension for PL/I Programming Language [1]. Now the extension supports PL/I preprocessor statements.</p><p>Let’s expand on what is and how are PL/I preprocessor statements and <strong>usage of these preprocessors in VS Code extension for PL/I Language</strong>.</p><h3><strong>What is a PL/I Preprocessor?</strong></h3><p>Before answering that question, let’s understand what a preprocessor in computer science is. A preprocessor is a program (automated editor or text manipulator tool) that processes (precomputes or modifies) source code (its input data) before the actual program compilation begins. In other words, its processed output data will be used as an input data to another program [2].</p><p>The <strong>PL/I preprocessor</strong> is the preprocessor for PL/I programming language, that <strong>prepares the PL/I source code for the compiler.</strong></p><h3><strong>The Role and Challenges of PL/I Preprocessors</strong></h3><p>The PL/I preprocessor is known as a powerful PL/I compile-time facility tool that operates as a “<strong>compiler before the compiler</strong>.” It works by scanning source code before the main compilation stage and identifies special commands prefixed with a <strong>percentage sign (%)</strong>, such as %INCLUDE, %DCL, and etc. PL/I preprocessor supports complex logic, variable manipulation, and string processing to generate <strong>optimized or</strong> <strong>customized code</strong> (favor of custom syntax instead of the ones written on the stone).</p><p>But PL/I preprocessors bring<strong> key challenges in legacy environments </strong>like: Invisible syntax errors (standard editors fail to recognize macro syntax), no code completion support, code obscurity (e.g. without modern tools you have to expand macro), and monolithic complexity.</p><h3><strong>How VS Code Makes Developer Work Easier</strong></h3><p>Modern extensions such as <a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.pli-language-support">code4z — PL/I Language </a>extension can help to solve these challenges by integrating preprocessor logic inside the IDE and offers several technical advantages that bridge the gap between legacy mainframe development and modern software engineering.</p><p>Here are the<strong> key benefits of PL/I Preprocessors support in VS Code</strong>: Real time syntax accuracy, persistent language intelligence (code completion, go-to definition, hover-over etc.), integrated error handling (e.g. can highlight the skipped code with low opacity) and semantic awareness (e.g. some variables and procedures that are only available after the preprocessor has run)</p><h3><strong>Key Preprocessor Facilities</strong></h3><p>PL/I processors provide a wide range of <a href="https://www.ibm.com/docs/en/epfz/6.1.0?topic=reference-preprocessor-facilities">preprocessor facilities</a> for developing, optimizing, and maintaining mission-critical applications. These processors are designed for versatile, high-performance computing, supporting scientific, engineering, and commercial data processing [3].</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1003/1*6PB9wAgcP81zapOZya8r4w.jpeg" /><figcaption>Figure-1: PL/I programming language preprocessor key facilities</figcaption></figure><h4><strong>Preprocessor Statements</strong></h4><p>The PL/I preprocessor uses a set of specific <a href="https://www.ibm.com/docs/en/pli-for-aix/3.1?topic=scan-preprocessor-statements">preprocessor statements</a> to manipulate source text, manage conditional compilation, flow control, and automate code generation. Preprocessor statements are executed when encountered for:</p><p><strong>Declarations and activation: </strong>%DECLARE (or %DCL), %ACTIVATE, etc.</p><p><strong>Control flow and conditional logic: </strong>%IF…%THEN…%ELSE, %DO, %END, %SELECT etc.</p><p><strong>Code generation and Inclusion:</strong> %ANSWER, %INCLUDE, %INSCAN, %XINCLUDE, %XINSCAN etc.</p><p><strong>Utilities: </strong>%NOTE, %NULL</p><p><strong>Integrated Include Preprocessor</strong>: Allows you to incorporate external source files into your programs by using ‘via <strong>++INCLUDE</strong> or <strong>-INC</strong>’ directives beyond the standard include directive.</p><h4><strong>Preprocessor procedures </strong>(also called as Macros)</h4><p>You can use preprocessor statements and groups inside preprocessor procedures to perform many kinds of different operations, like below:</p><p><strong>Validation</strong>: Use %IF inside the procedure to check if arguments are valid and provide a diagnostic message using a %NOTE if they aren’t.</p><p><strong>Complex Formatting</strong>: Use built-in functions like INDEX, SUBSTR, and TRANSLATE to play with input data before it becomes coded.</p><p><strong>State Management</strong>: Procedures can update global %DCL variables to keep track of how many times a particular code block has been generated.</p><p><strong>Providing results</strong>: To pass results pack to preprocessor scan use either <strong>ANSWER</strong> or <strong>RETURN</strong> statements.</p><h4><strong>Macro preprocessor options</strong></h4><p>To enable macro preprocessors, you can either use PP(MACRO) compile-time option in the program after %PROCESS directive or define it in the configuration file for global usage.</p><p>You can use macro preprocessors for below use-cases:</p><p><strong>Data and Syntax control</strong>: using <strong>NAMEPREFIX (character) </strong>and <strong>FIXED(option)</strong> to determine default base for preprocessor variables and use</p><p><strong>Source code handling and transformation</strong>: Use <strong>CASE(UPPER|ASIS)</strong> option whether the preprocessor converts your input source text to uppercase before processing it. The <strong>RESCAN (UPPER | ASIS)</strong> option controls how the preprocessor behaves after it has already performed a text replacement.</p><p>Use <strong>DEPRECATE (ERROR | WARN)</strong> to flag macro procedures that are intended to be phased out, issuing either a warning or an error.</p><p>Use <strong>INCONLY </strong>option<strong> </strong>to only handle %INCLUDE and %XINCLUDE and ignore other macro logic.</p><p>See below code animation for some preprocessor examples or just try it on your own PL/I code:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*17FosR7NSewNJXucet7ZPQ.gif" /></figure><p>In case you have not installed or used the extension, please try the <a href="https://medium.com/modern-mainframe/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420">guidance here</a>.</p><h3><strong>Summary</strong></h3><p>PL/I preprocessors provide significant advantages in mainframe development by enabling code automation, enhancing maintainability, and improving the efficiency of the compilation process. They allow developers to manipulate source code before it is passed to the compiler using specialized preprocessors which we mentioned above in detail.</p><p>In coming releases extension will extend its support to PL/I specialized integrated preprocessors like CICS and DB2, they will be processed inside a block EXEC CICS and EXEC SQL respectively and translates (CICS and SQL) statements into PL/I calls.</p><p>For further information, you may contact us on Slack: <a href="http://che4z.slack.com/">che4z.slack.com</a></p><p>References</p><p>[1] <a href="https://azat-satklichov.medium.com/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420">https://azat-satklichov.medium.com/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420</a></p><p>[2] <a href="https://en.wikipedia.org/wiki/PL/I_preprocessor">https://en.wikipedia.org/wiki/PL/I_preprocessor</a></p><p>[3] <a href="https://www.ibm.com/docs/en/epfz/5.3.0?topic=reference-preprocessor-facilities">https://www.ibm.com/docs/en/epfz/5.3.0?topic=reference-preprocessor-facilities</a></p><p>[4] <a href="https://www.ibm.com/docs/en/epfz/5.3.0?topic=guide-pdf-version">https://www.ibm.com/docs/en/epfz/5.3.0?topic=guide-pdf-version</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=915db130116b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/code4z-vs-code-pl-i-language-extension-preprocessor-support-915db130116b">Code4z VS Code PL/I Language Extension Preprocessor Support</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sliding Mainframe into the Context Window: Connect your LLM with Endevor using MCP]]></title>
            <link>https://medium.com/modern-mainframe/sliding-mainframe-into-the-context-window-connect-your-llm-with-endevor-using-mcp-cea6dc48ef78?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/cea6dc48ef78</guid>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[endevor]]></category>
            <category><![CDATA[mcps]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[llm]]></category>
            <dc:creator><![CDATA[Chace Medeiros]]></dc:creator>
            <pubDate>Tue, 17 Feb 2026 12:50:16 GMT</pubDate>
            <atom:updated>2026-02-17T12:50:15.038Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V4vOougq_1oIlthVJsGctg.png" /></figure><p>Large Language Models (LLMs) are incredibly powerful, yet they are traditionally limited by a knowledge cutoff and a lack of access to your private, evolving data. When discussing a complex Endevor environment, the difference between a standard LLM interaction and one powered by a <strong>Model Context Protocol (MCP)</strong> server is the difference between general speculation and actionable intelligence.</p><p>Without an MCP server the LLM operates in isolation. It relies solely on its static training data and local context, lacking visibility and automation within your specific Endevor inventory structure, element history, metadata, or processor configurations.</p><p>When staring at 10,000 lines of COBOL in VS Code, even the latest and greatest LLM cannot help the new mainframe developer assigned to fix the latest bug in the program. Outside of the code within the element, the LLM is clueless about the element’s purpose in the larger context of an inventory.</p><h4>🚩 It does not know how an element is used.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q8fYxWx2YC5qBL1nRso_sQ.png" /></figure><h4>🚩 It does not know about change history metadata.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eybhrBuQXMyalE76mJWtww.png" /></figure><h4>🚩 It definitely does not know how an element is built.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mrsS8mwCy-I9G6q17QpH3Q.png" /></figure><blockquote><strong>Does the LLM work with </strong><a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.explorer-for-endevor"><strong>Explorer for Endevor</strong></a><strong>?</strong></blockquote><p>Modern Mainframe developers rely on the Explorer for Endevor (E4E) Visual Studio Code extension from Code4z to navigate familiar codebases with precision. However, the extension was never designed to interface with an LLM. This disconnect makes it difficult to feed Endevor information into the model’s context. Additionally, the LLM cannot directly use E4E for resource retrieval, meaning the user always has to be in the loop to relay this context. This creates an efficiency bottleneck around information access.</p><h4><strong>The Challenges</strong></h4><p><strong>⚠️ Contextual Blindness:</strong> The model cannot read your specific stages, systems, or subsystems, leading to generic advice that may not apply to your environment.</p><p><strong>⚠️ Manual Data Entry:</strong> You are forced to copy-paste logs, SCL (Software Control Language) snippets, print listings, or inventory reports into the chat, which is time consuming and risks hitting context window limits.</p><p><strong>⚠️ Inaccuracy &amp; Hallucination:</strong> Lacking real-time data, the LLM may guess at element locations or dependency impacts, potentially leading to errors in your change management process.</p><h3>Introducing Code4z Assistant</h3><p>We are excited to introduce <strong><em>Code4z Assistant</em></strong>, a read-only bridge that connects your LLM of choice directly to your Endevor inventory.</p><p><strong><em>Code4z Assistant</em></strong> is a VS Code extension containing an MCP server compatible with any local MCP client that supports MCP tools and streamable HTTP. It transforms the LLM from a general assistant into a <strong>context-aware subject matter expert</strong> that can query your mainframe data on demand. Think of <strong><em>Code4z Assistant</em></strong> as a toolbox containing special tools for interacting with Endevor Web Services.</p><p><strong>The Benefits:</strong></p><p><strong>✅ Real-Time Retrieval:</strong> The LLM can proactively retrieve the status of a package, an environment mapping, or the history of an element using standardized tools.</p><p><strong>✅ Reduced Overhead:</strong> Instead of flooding the chat with data or not having enough of it, the MCP server provides only the specific resources needed for the current task. Keeping the conversation and the context window size efficient.</p><p><strong>✅ Precision Tooling:</strong> The LLM can troubleshoot build failures and inspect packages with direct access to the actual error logs and environment configurations.</p><h3>Upgrade Your Daily Flow</h3><h4>Understand code and analyze impact</h4><p>Mainframe Applications are a web of dependencies. Before, finding the impact of a change involved manual searches. Now the LLM uses the <strong><em>get element usage</em></strong> or <strong><em>get element dependencies </em></strong>tools to traverse up and down the dependency tree. As a result, the developer gets a top-level map of the environment in one window:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hxq8Bft7Ce58eklb86y59A.png" /></figure><h4>Track and coordinate changes</h4><p>Mainframe code isn’t just code; it’s a history of business decisions. By exposing <strong><em>get element changes, </em></strong>the LLM can explain why and how a piece of code exists:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6TY3aZ3DERuI695U4UbQdA.png" /></figure><h4>Understand Endevor Builds</h4><p>Processors and component lists shouldn’t be a black box. By exposing <strong><em>get processor group, </em></strong>the LLM is enabled to retrieve a list of processor groups for a given element. If you are unsure of how a given element is built, you can ask the LLM to summarize the build process. It’s like having a DevOps engineer sitting right next to you:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6RchuP3lMsOOk6i8vclkWA.png" /></figure><h3>How it Works</h3><p>We designed this with the modern developer experience in mind. No complex green screen navigation is required.</p><ol><li><strong>Install:</strong> Developers install the <strong><em>Code4z Assistant </em></strong>extension in their VS Code environment alongside Code4z , including Explorer for Endevor, and any other preferred extensions.</li><li><strong>Configure &amp; Connect via EWS:</strong> Developers connect to Endevor via existing Endevor Web Services (EWS) host URLs and credentials (or a locally provisioned Zowe profile).</li><li><strong>The Secure Bridge:</strong> The MCP server runs on a local port as a subprocess of the <strong><em>Code4z Assistant </em></strong>VS Code extension, allowing any locally compatible MCP client (like Copilot, Cline, or local LLM interfaces) to fetch context directly without ever having to share EWS credentials with the LLM.</li></ol><h3>Ready to give your LLM a Mainframe education?</h3><h4>Connect with the <em>Code4z Assistant team </em>to access our pre-release MCP Server available on the DevX and DevOps Validation Community:</h4><ul><li>Ekaterina Tumanova — ekaterina.tumanova@broadcom.com</li><li>Petr Galik — petr.galik@broadcom.com</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cea6dc48ef78" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/sliding-mainframe-into-the-context-window-connect-your-llm-with-endevor-using-mcp-cea6dc48ef78">Sliding Mainframe into the Context Window: Connect your LLM with Endevor using MCP</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Integrating Endevor Package Lifecycle Steps with ServiceNow Change Request Module using OAuth 2.0]]></title>
            <link>https://medium.com/modern-mainframe/integrating-endevor-package-lifecycle-steps-with-servicenow-change-request-module-using-oauth-2-0-9e65b086fda6?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/9e65b086fda6</guid>
            <category><![CDATA[endevor]]></category>
            <category><![CDATA[oauth2]]></category>
            <category><![CDATA[modern-mainframe]]></category>
            <category><![CDATA[servicenow-integration]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[Jose Benigno Gonzalez]]></dc:creator>
            <pubDate>Fri, 23 Jan 2026 12:34:08 GMT</pubDate>
            <atom:updated>2026-01-23T12:34:07.610Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Synchronous and Real-time Interface from Mainframe to ServiceNow Instance.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oBoNKgu-_pCZWoLkut87hA.png" /></figure><p>Mainframe modernization is not only about creating new applications to access mainframe applications from open source solutions like Visual Studio Code (VSC), Eclipse CHE, Zowe CLI, etc., but also involves adapting existing legacy applications to connect to external/internal web services. One modernization effort involves integrating Endevor with ServiceNow. This integration can serve two similar purposes: validating an Endevor CCID or verifying the name and readiness of an Endevor package. This blog focuses on the ServiceNow validation for Endevor packages. The solution goes beyond simply checking for the existence of the ServiceNow entry; it mandates that the entry’s status must be in the correct state.</p><p>While various software solutions exist for this type of integration — such as Python, GoLang, and Java — this document focuses on a different approach. We leverage the z/OS Client Web Enablement Toolkit. This toolkit is built directly into the base of the z/OS operating system, offering a lightweight solution. Its key value is enabling traditional, native z/OS applications to more easily engage in the client/server space by providing built-in features for this connectivity:</p><ul><li>A <strong><em>z/OS HTTP/HTTPS protocol enabler</em></strong> which uses interfaces similar to other industry-standard APIs.</li><li>A <strong><em>z/OS JSON parser</em></strong> that can be used to parse JSON text that comes from any source and create new JSON text or add to existing JSON text.</li></ul><p>Almost all environments on z/OS can take advantage of these new services. Programs can use these APIs in the programming language of their choice. You can use REXX, C/C++, COBOL, PL/I, and Assembler languages.</p><p>In this implementation, the programming language selected for building the integration between the z/OS LPAR and ServiceNow instance was REXX, although the Endevor User Exit 7 was written in COBOL.</p><p>✅ <strong>z/OS HTTP/HTTPS protocol enabler</strong></p><p>The HTTP/HTTPS enabler portion of the toolkit allows Endevor to:</p><ul><li>Make simple API calls to connect to the ServiceNow server</li><li>Build an HTTP request, send it to the ServiceNow server, and receive a response.</li></ul><p>Endevor uses the toolkit to execute REST API calls against a ServiceNow instance by following this scheme:</p><p>1️⃣ Initialize a connection (HWTHINIT) to get the work area ready for the toolkit to process the connection to ServiceNow.</p><p>2️⃣ Set the necessary connection options (HWTHSET). In this step, the URI of the ServiceNow web server, SSL options, cookie processing behavior, and other options are set, one option at a time.</p><p>3️⃣ Connect to the ServiceNow instance server (HWTHCONN).</p><p>4️⃣Initialize a request (also HWTHINIT) to get another work area necessary for the toolkit to process the request.</p><p>5️⃣Set the necessary HTTP request options (also HWTHSET):</p><p>🕐 <em>HTTP request headers which need to be sent to the ServiceNow server.</em></p><p>🕑 <em>Request body.</em></p><p>🕒 <em>Application code receiving control to process the data that is returned from the snow web server.</em></p><p>Setting one option at a time.</p><p>6️⃣Send the request (HWTHRQST) to join the request to a particular connection and send it over that connection. The responses are sent back Endevor user exit routines (exits).</p><p>7️⃣ Clean up the execution environment to release work area storage, disconnect from Snow web server, and end the connection.</p><p><strong>✅z/OS JSON parser</strong></p><p>z/OS JSON parser is used to process the JSON text file sent from the ServiceNow web server to the Endevor user exit routines, following this scheme:</p><p>1️⃣ Start the JSON parser initialize service (<strong><em>HWTJINIT</em></strong>) to create a parsing instance.</p><p>2️⃣ Call the JSON Parse service (<strong><em>HWTJPARS</em></strong>) to have the parser validate the syntax of the text stream and create an internal representation of the JSON text data. Once the data is parsed, it allows all subsequent services to run faster because the data is usually instantly available.</p><p>3️⃣ Get the data that is needed using the JSON Search service (HWTJSRCH) to find a specific key in the data (a name in a JSON name/value pair). If that key is found, the value can be retrieved by using one of the parsers “get” services. You can also scope search to a particular JSON object if desired.</p><p>4️⃣ When the process is finished, the parser instance (HWTJTERM) is used to free the storage that is being used by the parser.</p><p>You can find more information about the toolkit in <a href="https://www.ibm.com/docs/en/zos/3.2.0?topic=zm-zos-mvs-programming-callable-services-high-level-languages"><strong><em>z/OS MVS Programming: Callable Services for High-Level Languages</em></strong></a><strong><em>.</em></strong></p><p><strong>✅Endevor — ServiceNow Integration Overview</strong></p><p>1️⃣ <em>Synchronous and Real Time Interface from Mainframe to ServiceNow Instance.</em></p><p>2️⃣ <em>Use SSL communication — Certificates in SAF Keyring</em></p><p>3️⃣ <em>Secure access using authorizations tokens from Endevor to ServiceNow API — OAuth2</em></p><p>4️⃣ <em>Basic Authentication is also provided.</em></p><p>5️⃣ <em>Trace Facility.</em></p><p>✅ <strong>ServiceNow Change Request State Values</strong></p><p>The change request process has many states, and each of them is of vital importance to the success of the process and the quality of the service provided. The different states are represented in the following diagram:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lMr1mQrZ_DAc5H5zdKhSow.png" /></figure><p>The above states are configurable and are included in a ServiceNow table with their corresponding attributes</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YzkblNTvoRycZ90Qk9oKnA.png" /></figure><p>✅ <strong>Integration Architecture Overview</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/697/1*yHMYhSv0FZdPZEcy7HK32Q.png" /></figure><p>OAuth 2.0 is an authorization standard designed to provide third-party applications with a secure method for obtaining limited access to a user’s data on a separate service without requiring the user to disclose their password. The mechanism operates through the issuance of an “access token,” which the user’s browser subsequently utilizes to retrieve specific resources, such as ServiceNow entry details. This protocol is the established standard for authorization across a multitude of widely used applications and services.</p><p>The OAuth2 client, <strong><em>Endevor Package Exit 7 — ServiceNow Driver </em></strong>in this example, is the application that requires access to protected resources, such as a change request details or data. Before the client can access these resources, it must first get an access token, which serves as proof of authorization to access the requested resources. The client must first be authorized by the resource owner (ServiceNow Instance) and must hold a valid access token in order to access protected resources. The ServiceNow API server hosting the protected resources will validate the access token to ensure that the client is authorized to access the requested resources and will return a JSON file containing the information corresponding to the issued request.</p><p>Creating an OAuth2 client in ServiceNow is a necessary step to enable Endevor Driver to use OAuth2 flows. Before using OAuth, the application must be registered with the service you plan to integrate with (ServiceNow Instance). This is done through a registration form in the developer or API portion of the service’s website, where the application name is provided.</p><p>After the application is registered with the service, a client ID is received from the authorization server and optionally a client secret. These are unique identifiers that allow the authorization server to identify your application and allow it to access protected resources. The client ID is considered public information and can be included in any language source code or used to build login URLs. The client secret, however, must be kept confidential and is used to authenticate the client to the authorization server.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HB7EkvAYXoIq7LT9TwlNKw.png" /><figcaption><strong>ServiceNow OAuth API endpoint creation</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*spHuH-8RMWvB2dnsRSidCg.png" /><figcaption><strong>ServiceNow OAuth Application registration</strong></figcaption></figure><p>✅ <strong>Endevor Package Lifecycle Steps</strong></p><p>The Endevor Package Lifecycle steps integrated with the ServiceNow Change Request module are:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j6Q1m34ItR5wkI6t-d2ikA.png" /></figure><p>Below you will find a detailed description of each of the steps in the lifecycle of an Endevor package and the integration performed with the ServiceNow Change Request module:</p><p>CThis step automatically creates an Endevor Package ID using the change request number returned by the ServiceNow Instance and following the nomenclature described below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*EWlZAWav376t2lKcxyx6Pg.png" /><figcaption><strong>Package ID Nomenclature</strong></figcaption></figure><p>Endevor Packages ID can be created in three different ways:</p><p>1️⃣From scratch, using the new Change Request number provided by ServiceNow,<br>2️⃣Next in sequence package, using a previously created Package ID associated to a ServiceNow change request or<br>3️⃣Absolute package ID following the nomenclature described above. <em>A Change Request number already active in ServiceNow is mandatory.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kw0b6bHs-ivH7hwGpv45Xg.png" /><figcaption><strong>Endevor Create Package Step</strong></figcaption></figure><p>Below you will see an explanation of each type of Package Creation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S0PqsWx4bjpC32Leympy7Q.png" /></figure><p>You only need to provide the suffix ‘<strong><em>SNCHG#’ </em></strong>in the Package ID field and select option 2 from the Package Panel Menu, the interface will POST a request to the ServiceNow Instance and the Change Request returned will be used in the new Package ID constructed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w2AZbE1UVRBfl9izV0TmwA.png" /><figcaption><strong>Create a new package linked to a new change request dynamically created</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Uc0BFWnNKyyX09mu2-ZNvQ.png" /><figcaption><strong>Endevor Package ID assigned automatically using ServiceNow change request created</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ylGfzCk9BFOge8GOKOmHnQ.png" /><figcaption><strong>ServiceNow UI — Change Request created on behalf of Endevor — State New</strong></figcaption></figure><p>Once the Package is populated with all the elements needed, it is finally created (Package Constructed):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aBQ68eDZs6Au10S58vPkpw.png" /></figure><p>and a WORK NOTE is posted to the ServiceNow Change Request number about this fact:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l_s9CSH3bGUJdjwAw0IUWA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i8hPK9NGG0M7BBf1uKiE4Q.png" /></figure><p>In this implementation, a total of 776 different packages ID could be created for the same ServiceNow Change Request. The last 2 characters of the packet ID define the sequence number and range from ‘AA’ to ‘ZZ’ (676 values) and ‘00’ to ‘99’ (100 values).<br>In order to create a new package ID for an already created Change Request, the suffix containing the Change Request number should be specified in the Package Panel:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9cscDOSyA1_A6Arunw-6TA.png" /><figcaption><strong>Creation of the next Package ID in sequence for an already created Change Request</strong></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xnKdx0hQbOqO05qs-nqQNw.png" /><figcaption><strong>Sequence assigned to the Package ID for the Change Request</strong></figcaption></figure><p>When the package is finally constructed, a Work Note is added to the Change Request in ServiceNow:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Fb-lmzKcXbkFxCexS01bGg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Zi9CocF57yTKKtSZK7u6A.png" /></figure><p>We can create a new Package ID for an already created ServiceNow change request and assign it the sequence number of your choice. The interface validates that the Change Request is already active and has the expected state:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8sCaJs5EGv93hKgGy26KpA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Cfwe4iwLd97StZSo2Qg6SA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IgJZm71dudWXphtgH2PqnQ.png" /></figure><p>A WORK NOTE is also added when the package is created this way:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*y1ily1Wk3ZuMRuLz8gh2fQ.png" /></figure><p>AAn Endevor Package ID created for a ServiceNow Change request can only be CAST if the Change Request State is APPROVED</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k6ubejh_4ddEWfwfV65q_A.png" /></figure><p>Executing the CAST Step using ISPF Panel, Batch Package or any IDE of your preference:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Cp_fJ_RsfYzS2Ivxqiho9w.png" /><figcaption><strong>Request Change Request Approval</strong></figcaption></figure><p>So, let’s approve the Change request using the ServiceNow UI:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3OFhyKRyzQn6iDC1eNPnhA.png" /><figcaption>Request Change Request Approval</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yUHdAyxHU-dwLtgh7uMhAA.png" /><figcaption>Change Request Approved</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ughVSsX7V0wt2g2ocJjamg.png" /></figure><p>FThe ServiceNow change request linked to a Package ID should be in APPROVED state so that package approvers can approve/deny it, like in the previous step of the Package Lifecycle (CAST).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1m0qHYQR8FbuZhT0uAv5yw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l8QPjfsWVexLopnJGK7E2Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kc9lqrl5OeiXRmT6GjCgdQ.png" /></figure><p>ITo execute an Endevor package linked to a ServiceNow CR, two conditions must be met:</p><p>🕐 ServiceNow change request in “IMPLEMENT” state and<br>🕑Endevor package execution date/time within the execution window defined at the change request field “Planned Start Date/Planned End Date”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FV_QEDCAkoXQi-QJH-fiMw.png" /></figure><p>Let’s execute an Endevor package linked to a ServiceNow change request:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eALXZh5upEIIp_9bGEeBrg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wPwvtChD0rrqnWM0DGGHWA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W7YoJIHysX3WtiZb2xJnIg.png" /></figure><p>The Endevor package cannot be executed because ServiceNow change request is not in “IMPLEMENT” state. Let’s connect to ServiceNow UI and promote the CR to the next phase within the CR lifecycle:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IwzmHVHkB7Ve8Ittplzgaw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9QqjdGaFXuPIr_96sHspUw.png" /></figure><p>Once the CR has been promoted, let’s try the Endevor Package execution step once again:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NnQYyNMtld9c3p0MGcLeKw.png" /></figure><p>A new error message is issue because the Package execution Date/Time is not within the ServiceNow change request execution window, actually this window has not been set yet.</p><p>Let’s modify the Schedule Tab in the Change Request:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4PCW213CfyFuiDayr6tsOQ.png" /></figure><p>and try the Package execution step once again:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2GXAVyZnv299qEEbxCYdUQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CbBBdPgVk5VX0tSeMP36eg.png" /></figure><p>TTo Ship an Endevor package linked to a ServiceNow CR , the same two conditions like the Execute Package Step must be met:</p><p>🕐 ServiceNow change request in “IMPLEMENT” state <br>🕑Endevor package execution date/time within the execution window defined at the change request field “Planned Start Date/Planned End Date”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U3qjj2is0GER4ar65xhUVw.png" /></figure><p>The validation process is the same that was used for the Package execution step, but this time using the SHIP step available at the ISPF Panel or the Batch Package Facility. <br>Exception Management is available for every error message returned by the communication process or by the condidtions that are not met during the execution of every package step.</p><p>In the next blog <strong><em>Endevor Element CCID validation against ServiceNow using OAuth 2.0,</em></strong> I will show you how to validate Endevor Element Actions Change Control IDentifiers (CCID) against ServiceNow Incident Management Module and act according to the state of the incident.</p><p>⚠️<strong>Additional Resources.</strong></p><p>The source code programs are available on github at <a href="https://github.com/BroadcomMFD/broadcom-product-scripts.">https://github.com/BroadcomMFD/broadcom-product-scripts.</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9e65b086fda6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/integrating-endevor-package-lifecycle-steps-with-servicenow-change-request-module-using-oauth-2-0-9e65b086fda6">Integrating Endevor Package Lifecycle Steps with ServiceNow Change Request Module using OAuth 2.0</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Art of Mainframe Modernization: What I Learned Selling “Change” to Green Screen Rockstars]]></title>
            <link>https://medium.com/modern-mainframe/the-art-of-mainframe-modernization-what-i-learned-selling-change-to-green-screen-rockstars-2931f8245c52?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/2931f8245c52</guid>
            <category><![CDATA[mainframe-modernization]]></category>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[cobol]]></category>
            <category><![CDATA[ci-cd-pipeline]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Daniel Barraza]]></dc:creator>
            <pubDate>Mon, 15 Dec 2025 16:16:10 GMT</pubDate>
            <atom:updated>2025-12-15T16:16:09.033Z</atom:updated>
            <content:encoded><![CDATA[<p><em>In my last role, I learned transformation isn’t a science. It’s an art. And the first rule is that your “hall of fame” developers will, and should, resist.</em></p><p>Let’s get one thing straight: I did not achieve a 100% successful transformation in my last role.</p><p>But I did learn from my mistakes. Over the course of my efforts, I came to realize transformation is possible, once you have the right mindset.</p><p>Read on to see how I made mistakes, learned, and ultimately realized how to best approach large-scale transformation projects successfully.</p><p>My mission for five years as a DevOps Transformation Engineer was to modernize our zDevOps practices. This meant moving our teams from a <strong>traditional</strong>, in-house SCM to modern GitLab CI/CD pipelines.</p><p>And I failed, repeatedly.</p><p>I failed with some of our most brilliant developers. These were the “hall of fame” rockstars with 30 years of muscle memory on a 3270 “green screen” terminal. These developers were so fast and so efficient that they could run circles around a new hire using a modern IDE.</p><p>And I walked in and asked them to trade that mastery for VS Code.</p><p>This was like asking a grandmaster concert pianist to start over and learn the guitar. I learned very quickly that <strong>DevOps transformation is not a science. It’s an art.</strong></p><p>The tools, like GitLab, VS Code, and SonarCube, aren’t the solution. They’re just the paint. The <em>real</em> work is human. It’s messy. And it requires you to drop the “engineer” mindset and become part-therapist, part-salesman, and full-time relationship builder.</p><h3>My First Mistake: Leading with the “Solution”</h3><p>Like any good engineer, I started by showing my “customers” the solution. “Look at this new tech! It’s better!”</p><p>The resistance was immediate and justified.</p><ul><li>“This is slowing me down.”</li><li>“My current tools work perfectly fine.”</li><li>“This feels like a waste of my time.”</li></ul><p>They were right. My new “better” way was making their productive lives <em>worse</em>. I was asking them to “slow down to go faster later,” but I wasn’t giving them a compelling reason to trust me. I was trying to sell the <em>destination</em> (a modern pipeline) without respecting the <em>cost of the journey</em> (unlearning decades of mastery).</p><p>I had to throw the playbook out. I realized <strong>you can’t “convince” anyone.</strong> You have to continuously adapt, get creative, and find a different angle for every single team.</p><h3>The “Aha!” Moment: Stop Pushing, Start Listening</h3><p>My job wasn’t to “roll out tools.” My job was to <strong>build relationships.</strong></p><p>My entire strategy shifted. I stopped trying to convert the “rockstars,” the ones who were perfectly happy and efficient. That was a losing battle.</p><p>Instead, I went looking for a different archetype: the <strong>“Eager and Willing Champion.”</strong></p><p>In every area, in every team, there’s always <em>one</em> person who is curious, open to new ideas, or just <em>loves</em> new tech. They might not be the team lead or the “rockstar,” but they are respected.</p><p>My <em>entire</em> focus shifted to finding and empowering that one person.</p><p>They became my new customer. My goal was to make <em>them</em> successful. The single most important part of my job became:</p><ol><li>Find that one “champion” on a team.</li><li>Build a real relationship with them. Listen to <em>their</em> specific problems.</li><li>Give them a “superpower” that made their life <em>immediately</em> better.</li></ol><h3>The “Superpower” Tactic</h3><p>This is where the tech comes back in.</p><p>For many of these new champions, the “superpower” I could offer was <strong>Copilot Assist in VS Code.</strong></p><p>This wasn’t about “migrating to Git.” This was about, “Hey, I know you’re working on that REXX script. Check this out.”</p><p>The moment they saw Copilot analyze an API Swagger doc and generate code, or help them build a complex DB2 query <em>in seconds</em>, their eyes lit up.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nVOqDzQMDdEpL5lbk_t3nw.jpeg" /></figure><p>That “wow” moment did what months of my “transformation” PowerPoints couldn’t.</p><ul><li>It gave them an immediate, almost magical boost for a specific, annoying task.</li><li>It gave them a reason to <em>voluntarily</em> open VS Code.</li><li>It made <em>them</em> the “smart” one who could show their team a cool new trick.</li></ul><p>I wasn’t the “DevOps guy” forcing a change anymore. I was the “helper” who gave them a new toy.</p><p>That champion, armed with their new superpower, would then go to their team meetings and <em>naturally</em> influence their peers. A recommendation from a trusted teammate is a thousand times more effective than a mandate from me.</p><h3>What “Success” Really Looks Like</h3><p>This was a slow, patient, and deeply human process. It was about finding one champion, then another, and slowly building a <strong>coalition of the willing.</strong></p><p>Some of the “rockstars” <em>still</em> hadn’t budged by the time I left that role. And that’s okay. The organization kept running.</p><p>Here is what <em>did</em> happen:</p><ul><li><strong>We built momentum.</strong> Adoption of modern tools like VS Code began to spread organically, team by team.</li><li><strong>We improved collaboration.</strong> For the teams that <em>did</em> migrate, their ability to collaborate with offshore resources and streamline code reviews with merge requests improved dramatically.</li><li><strong>We became “talent-ready.”</strong> We built a modern platform that could attract new developers who <em>expect</em> these tools, while <em>also</em> proving that the mainframe itself (running Python on Z, integrating with Zowe) is a powerful, modern environment.</li></ul><p>The biggest lesson I learned is that technology is easy. People are hard.</p><p>The “art” of transformation isn’t about having the best tools. It’s about having the most empathy. It’s about respecting the mastery of the people you’re trying to “help,” and having the patience to build one relationship at a time.</p><p>And ultimately, I learned that a “full migration” mandate might be the wrong goal entirely. Our organization wanted one toolchain, but a <strong>hybrid approach</strong>, which was not considered, is often the smarter one.</p><p>The real goal shouldn’t be 100% conversion; it should be 100% productivity. And that means giving each engineer the best tool for <em>their</em> specific job, even if that means supporting two ways of working.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2931f8245c52" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/the-art-of-mainframe-modernization-what-i-learned-selling-change-to-green-screen-rockstars-2931f8245c52">The Art of Mainframe Modernization: What I Learned Selling “Change” to Green Screen Rockstars</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Webinar: AI Code Assistants for IBM Z]]></title>
            <link>https://medium.com/modern-mainframe/webinar-ai-code-assistants-for-ibm-z-aef5ddde9edb?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/aef5ddde9edb</guid>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[developer-experience]]></category>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[cobol]]></category>
            <dc:creator><![CDATA[David McNierney]]></dc:creator>
            <pubDate>Fri, 21 Nov 2025 20:49:50 GMT</pubDate>
            <atom:updated>2025-11-21T20:49:50.211Z</atom:updated>
            <content:encoded><![CDATA[<h3>AI in Practice: Turbocharging DevX With Code4z &amp; GitHub Copilot</h3><p>Brought to you by Broadcom Mainframe Software</p><p>Tuesday, December 2nd<br>11:00 a.m. ET / 10:00 a.m. CT</p><p><a href="https://more.techchannel.com/e3t/Ctc/OR+113/d2nPhZ04/VWx9F06n8P7BW8YH0Mx7HpvXYW6TYKFS5FRh-1MBB8Vx3qgz0W95jsWP6lZ3lXW8xk71z7MNbKMN25mVKbT6KPRW8mPrmR8NblBGW7cLt-y7X-XDMW1GSh5d2YwXhDW352KK67vXC-cW7mzmlq3jQPZrW1VHdpK6b_N4DW1jSLZC12-_hVW6msZ_Z3f07T_W6Mgcby3VTM64W8p8Tyq2Q7cbPVcZgDn5bhwPzW7Yff1g7mdj6TW7Pt6wr2bgSS6W6-rpT08Mh4QxW8-rgK24rBTL1W6wZD3P406PSQW7FW9dd49P0N3Vk3V5g1pqWZSN7jx3h6f8bvXW5HpVj88TG8zzN8H21WZPlSctN6V4mZtz4dNbW2n0ZvC5q17t0W6BDs017HwXrYW582Gk228YkvKW28p-Y73DSbjwW7nTYH162dXXyVFqC914KgtTmf5zWsRs04"><strong>REGISTER NOW</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*KDCdzXpT9WNLg0La.jpg" /></figure><p>How can AI enhance the Z developer experience without disrupting existing processes or, more importantly, compromising the codebase?</p><p>With AI revolutionizing the developer experience, GitHub Copilot has emerged as the dominant AI coding assistant, especially among large enterprises. However, the stakes for mainframe teams working with mission-critical business applications are high, so adoption risk should be carefully considered.</p><p>Key Takeaways:</p><ul><li>This session will explore how to utilize Copilot as an integral part of modern Code4z developer workflows by focusing on high-value, low-risk use cases and policy-compliant deployment.</li><li>We’ll explain how to take advantage of the MCP protocol to access source code in tools like Endevor safely and securely.</li></ul><h3>Can’t attend the live event?</h3><h3><a href="https://more.techchannel.com/e3t/Ctc/OR+113/d2nPhZ04/VWx9F06n8P7BW8YH0Mx7HpvXYW6TYKFS5FRh-1MBB8Vx3qgz0W95jsWP6lZ3n3W35fFM_31nRjSW6zcDc-8rFq28V6shwM18k9HkW3FpkX68RrKZtW4VtCgg6-92pxW96CM3l3shgyhW751bmY2f3yVyW5bbCsc7nHKVYVLX_Pj7zL-QkW4ZxyJF4TFjzcW40SVlr3Hq1fPN5kxGnNLQxrPW4rTwPY1j08LSW5MLDhn4tFhxLW9lgwhR895XkSW2GMdC24j6wHRW5HlgCp5MdYh6W7w78Vd492H6JW2QRBCW6BwgcjW7sy6X16F5P7mVgdZ2c1KR1mXW355kVC3z2y2rN1P6t3ngpYt9W2NlydX4PTwbvW4cz1Fx6clGTCW2vNrQt6kBwC4W63mmMX45_zhqW6_HpXF29h0lSW6wwSWM7KX7YgW8zXPts2hZKzVf5YXTzx04">Register to receive the recorded version</a></h3><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aef5ddde9edb" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/webinar-ai-code-assistants-for-ibm-z-aef5ddde9edb">Webinar: AI Code Assistants for IBM Z</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New Code4z COBOL Control Flow 1.2.1: Better and Faster]]></title>
            <link>https://medium.com/modern-mainframe/new-code4z-cobol-control-flow-1-2-1-better-and-faster-dfe74594c6e9?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/dfe74594c6e9</guid>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[vscode-extension]]></category>
            <category><![CDATA[control-flow-graph]]></category>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[cobol]]></category>
            <dc:creator><![CDATA[Leonid Baranov]]></dc:creator>
            <pubDate>Tue, 09 Sep 2025 13:24:50 GMT</pubDate>
            <atom:updated>2025-09-09T11:52:40.485Z</atom:updated>
            <content:encoded><![CDATA[<p>For those who need to understand COBOL applications, the COBOL Control Flow extension for VS Code is your best friend. The extension is designed to help COBOL developers quickly comprehend and analyze COBOL programs and now with V1.2.1 it displays the code faster and with greater precision. You’ll also appreciate improved navigation and the ability to export control-flow graphs to DOT and JSON.</p><h3>A Tool for Understanding Large Programs</h3><p>Basic COBOL language features like syntax highlighting, navigation between variable definitions and usages, and other essential tools come from the COBOL Language Support Code4z extension, which is automatically installed along with COBOL Control Flow. Those features are helpful but fall short when you need to understand the structure of a large program or the dependencies between its procedures, especially when there are many <strong><em>PERFORM</em></strong> and <strong><em>GO TO</em></strong> statements.</p><p>For the COBOL Control Flow extension to understand a COBOL program, it must parse the source and all of its dependencies, understand the relationships and present this to the developer. This takes time, especially with long programs. In version 1.2.1, analysis and graph generation have become at least 4 times faster. For example, the processing time for a complex program with 3,700 lines of code and numerous <strong><em>PERFORM</em></strong> and <strong><em>GO TO</em></strong> statements was improved from 40 seconds to just 12 seconds, with the graph analysis completed in 1 second. Nice.</p><p>Also there is a new UI — new icons and buttons, as well as a completely redesigned rendering engine that can now handle very large graphs efficiently. The new graph orientation is vertical, making it easier to follow the program logic from top to bottom and left to right. All of this helps you stay focused on the flow.</p><p>You still have access to all the familiar features, including Code-to-Node and Node-to-Code navigation, as illustrated in the image below (Fig. 1). Considering that nodes are now arranged along horizontal levels for improved readability, collapsing and expanding child nodes now behave in a more consistent and intuitive way (Fig. 2)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9U6E2MaAaculNnfV" /><figcaption>Fig. 1</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*GAOz5D9Z8UkFPGAz" /><figcaption>Fig. 2</figcaption></figure><p>For large graphs where a simple screenshot isn’t sufficient, you can now export the entire graph as an image file. This allows you to view it on a larger screen or easily share it with colleagues via email</p><p>If you want to analyze the graph using external tools, you can export it in <strong>DOT format</strong>, a standard graph description language compatible with many visualization and analysis tools (Fig. 3).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*KRzF0RqObWP3PkXm" /><figcaption>Fig. 3</figcaption></figure><h3>Improved Precision</h3><p>The visuals must be clear and precise. The new approach in V1.2.1 significantly improves this. The extension now correctly processes <strong><em>ALTER</em></strong> statements that redirect <strong><em>GO TO</em></strong><em> </em>targets. It also includes support for CICS and SQL statements that impact the control flow, and we have improved support for <strong><em>PERFORM … UNTIL</em></strong><em> </em>and <strong><em>GO TO</em></strong> with multiple targets.</p><p>Of course, there are many extensions that support a wide range of COBOL statements. However, the <strong>execution context</strong> of these statements also plays a crucial role and can significantly impact the resulting control flow graph.</p><p>For example, let’s examine the following fragment of a COBOL program.</p><pre><strong>CALC1</strong>.<br>  ALTER PAR2 TO PROCEED TO PAR_NEW.<br>  PERFORM PAR1.<br><br><strong>PAR1</strong>.<br> GO TO PAR2.<br><br>PAR2.<br> STOP RUN.<br><br><strong>PAR_NEW</strong>.<br>  ...</pre><p>The COBOL Control Flow engine analyzes the control flow of a program by taking into account the context of execution. For example, when an <strong><em>ALTER</em></strong> statement is executed, it dynamically modifies the destination of a <strong><em>GO TO</em></strong> statement. If you execute <strong><em>ALTER PAR2 TO PROCEED TO PAR_NEW</em></strong>, and then execute <strong><em>GO TO PAR2</em></strong>, the control will be redirected to <strong><em>PAR_NEW</em></strong>. If the execution context is not properly maintained, the analysis may incorrectly terminate at a <strong><em>STOP RUN</em></strong> statement that is not actually reachable. As a result, the generated control flow graph will display only a few nodes.</p><p>By preserving and tracking the execution context, the CCF engine can build control flow graphs that more accurately reflect the actual runtime behavior of the program, rather than just static code structure. This improved analysis is essential for identifying hidden bugs and understanding the true procedure dependencies in complex COBOL applications.</p><p>The engine also detects and processes statements that reset or override previous redirections, such as another <strong><em>ALTER</em></strong> or conditional logic that changes control paths. In such cases, it updates the execution context accordingly to maintain an accurate flow.</p><p>This analysis is not limited to <strong><em>ALTER</em></strong> statements. The CCF engine also handles other constructs that affect control flow depending on context — such as a <strong><em>PERFORM</em></strong> section that contains a <strong><em>GO TO</em></strong> statement with a target inside the section. The behavior of <strong><em>GO TO</em></strong> inside a performed section can differ significantly from a direct <strong><em>GO TO</em></strong> to a section.</p><p>Furthermore, control-altering statements inside conditional blocks (e.g., within <strong><em>IF</em></strong> conditions) are also tracked by the engine.</p><p>Ultimately, the CCF engine provides a realistic, context-aware view of your COBOL program’s execution. Instead of just listing procedures and their static dependencies, it reconstructs the true dynamic control flow, helping developers better understand, maintain, and debug large legacy codebases.</p><p>These improvements make it easier to understand large COBOL programs and spot potential issues.</p><h3>Conclusion</h3><p>With COBOL Language Support and the newly improved COBOL Control Flow extension, you can now understand and navigate large COBOL programs faster and more accurately than ever. If you haven’t tried the new version yet, now’s the time!</p><p><strong>Useful links</strong></p><p><a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.code4z-extension-pack">Code4z Foundation pack</a> with more Code4z extensions</p><p>More info about COBOL LS:</p><p><a href="https://medium.com/modern-mainframe/vs-code-language-server-extension-for-cobol-preprocessors-34f10c91558b">​​VS Code Language Server Extension for COBOL Preprocessors</a></p><p><a href="https://medium.com/modern-mainframe/lsp-magic-mainframe-language-support-in-modern-ides-4ea3d81259b3">LSP Magic — Mainframe Language Support in Modern IDEs</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dfe74594c6e9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/new-code4z-cobol-control-flow-1-2-1-better-and-faster-dfe74594c6e9">New Code4z COBOL Control Flow 1.2.1: Better and Faster</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[PL/I — The Newest Mainframe Language Code4z Extension]]></title>
            <link>https://medium.com/modern-mainframe/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/68e27a7ab420</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[cobol]]></category>
            <category><![CDATA[vscode]]></category>
            <category><![CDATA[lsp]]></category>
            <category><![CDATA[mainframe]]></category>
            <dc:creator><![CDATA[Azat Satklyčov]]></dc:creator>
            <pubDate>Mon, 08 Sep 2025 15:22:27 GMT</pubDate>
            <atom:updated>2025-09-08T15:22:27.334Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>PL/I — Code4z’s Newest Mainframe Language Extension</strong></h3><p>Code4z now offers support for Programming Language One (PL/I) applications. This extension has been added to the <a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.code4z-extension-pack">Code4z Foundation</a> pack for VS Code, which includes COBOL, HLASM, REXX, and JCL. Edit capabilities that Code4z users expect in a modern edit environment are now available for PL/I application developers.</p><h3>What is PL/I</h3><p>PL/I or PL/I (Programming Language One) is a high-level programming language developed primarily for scientific, engineering, and business applications. It was unique in that it could handle both scientific computation (like FORTRAN) and business data processing (like COBOL). PL/I has a number of capabilities unique in its time, which are important but challenging for adding intelligence to an edit experience. Some of the PL/I capabilities that are challenging to support were:</p><p><strong>Flexible Data Types</strong></p><ul><li>Fixed-point and floating-point numbers</li><li>Decimal arithmetic (important for finance)</li><li>Character strings of variable length</li><li>Pointers and structures (like C later would)</li><li>Unions (similar to C’s union)</li></ul><p><strong>Compile-Time Capabilities</strong></p><p>PL/I supports <strong>compile-time procedures</strong>, enabling conditional compilation and code generation based on compile-time logic — another rarity at the time.</p><p><strong>No Reserved Keywords</strong></p><p>PL/I <strong>had no reserved words</strong> — you could name a variable IF or THEN, which could lead to confusing but technically valid code.</p><h3>Modern Tooling for Mainframe Languages</h3><p>Big steps towards modern tooling and interfaces support exist for mainframe systems built on COBOL, HLASM, REXX, and JCL under the Broadcom all-in-one Code4z Foundation extension pack, and now for PL/I. PL/I is well known in both the scientific and financial areas for its versatility and reliability. It is very efficient for complex, large-scale applications.</p><p>This constitutes a sizable number of business-critical applications needing to be maintained and supported. So now, leveraging a modern development environment like Code4z is available to PL/I program developers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4AWMj-d7zVSsj7SB" /></figure><h3>Building a Language Application</h3><p>Similar to other smart editor modern language extensions, PL/I is using the Language Server Protocol (LSP). LSP is an open-standard protocol aimed to be used between development tools and language servers, therefore allowing flexibility of IDE’s from a modern IDE point of view, LSP is a consistent way to bring the magic of modern editing capabilities. It is an architecture, which brings all the language-smartness features like go to definition, code completion, highlighting syntax or semantic errors, and more others related to your code.</p><p>LSP Architecture offers the flexibility of choosing any technology combination to implement the client and language-server independently. For example, we have used this LSP Architecture for our all-in-one ‘code4z’ solution to implement language servers, e.g. “<a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.cobol-language-support">COBOL Language Support</a>” using multiple technologies (JAVA, ANTLR, VS Code, Typescript, LSP, etc.).</p><h3>PL/I Language Extension</h3><p>More specifically, the PL/I language support was implemented using the LSP specification <em>vscode-languageclient-*</em>, <em>vscode-languageserver-*</em> libraries. As a result, we provided a PL/I coding assistance tool — a VS Code extension, which brings a similar experience when coding with other languages like JAVA, Python, or Typescript in your modern IDE. It supports and provides rich features such as parsing &amp; validation, syntax highlighting, code completion, and cross-reference linking for PL/I code.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*wKXDQf-HCDuXbwlI" /></figure><p>The advantage of this above architecture is, it is based on one language (only Typescript) on all used technology stack here, and this removes any external dependencies like installing JAVA or Python. Simply, there are no client or server-side prerequisites for PL/I Language Support. Moreover, it is based on a custom PliParser based on Chevrotain language recognizer tool, which gives us a more performant (high speed) PL/I syntax analyzer, especially handy when analyzing big programs.</p><p>PL/I language support extension is free to install and intended to be used by application developers and by any other users who work with z/OS applications built on PL/I language.</p><h3>Installing VS Code Extension for PL/I Language Support</h3><p>In the VS Code extension tab, search ‘pl/1’ or ‘pl/i’ and find the extension to install. No dependency (additional installation like JAVA or Python) is needed to be able to use the extension.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*DyqLxMbDGeejO5Si" /></figure><p><a href="https://marketplace.visualstudio.com/items?itemName=broadcomMFD.pli-language-support">PL/I Language Support</a> provides language awareness features on file extensions .pli, .pl1 and .inc. Create a new or open an existing PL/I file (e.g., FILE.pli), and start using the following language-aware features during coding.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rtSLnw1G1phWbpco" /></figure><h3>What are the features supported by the PL/I extension?</h3><p>PL/I Language Support enhances the PL/I programming experience on your IDE and provides below features.</p><ul><li><strong>Syntax and Semantic Analysis </strong>— Syntax check analyzes the program based on PL/I program grammar and suggests a fix, and the semantic check highlights incorrect names of variables, procedures and copybooks.</li><li><strong>Code completion / Autocomplete </strong>— speeds up the coding process by intuitively suggesting the most likely variables, keywords and building blocks of the PL/I language.</li><li><strong>Code Snippets </strong>— enables inserting the reusable blocks of code or text into a program, which helps to speed up writing the code or use as a common practice shared among the team</li><li><strong>Go To References — </strong>identifies all occurrences of variables in the code.</li><li><strong>Go To Definition — </strong>via right clicking on any variable, you can reveal a definition of the element.</li><li><strong>Playground Support </strong>— PL/I Web Playground provides (via GitHub pages) online editor to try to test any code easily and quickly. It also allows sharing the content remotely and instantly with your colleagues.</li><li><strong>Outline and Breadcrumbs support</strong> — enables a structural view of program elements and allows easy navigation between them.</li><li><strong>Smart Tab</strong> — enables tuning your editor columns to follow the PL/I coding experiences</li><li><strong>Syntax Highlight</strong> — enables highlighting for PL/I code</li><li><strong>Syntax Coloring</strong> — enables identifying and distinguishing the keywords, variables, procedures and language built-ins.</li><li><strong>Compiler Options </strong>— provides inserting PL/I compiler options to tune the program according to your needs. It offers suggestions and validations among the chosen variants.</li><li><strong>PL/I preprocessor </strong>— interpret PL/I code to form source file inclusion, conditional compilation, and macro expansion</li><li><strong>Include support </strong>— allows inserting copybooks or useful code blocks into your PL/I program. Therefore, you can keep your copybooks independently and share easily across the team.</li></ul><p>Let’s try ‘Go To Definition’ support within the included file by the name of an include file and the variable defined in the copybook. Also, you can easily see the preprocessor %DEACTIVATE working correctly, and it removes the variable PAYROLL declaration which is why you have the warning at the end.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/853/0*BDYZcX_elb1f2VlP" /></figure><p>Another handy feature is using configuration files to define compiler options for compiler directives or macros. So, you do not need to define it in source code; it brings the same experience as you define such options in JCL, which is very useful in production code.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZA3y-KjGJxQAyR4w" /></figure><h3>Playground Support</h3><p>Imagine you have a great idea and want to test it directly, and want to share it with your team instantly, but you cannot do it because you need to install the application first and set up an environment locally, which is impossible during a real-time meeting.</p><p><a href="https://zowe.github.io/zowe-pli-language-support/main/">PL/I Playground</a> enables creating interactive, editable coding environments on the web, with live updating previews. You can use Playground Elements to:</p><ul><li>Do a PoC on code examples quickly and easily without installing anything</li><li>Share the content remotely with your colleagues or customers</li><li>Build full-featured coding samples</li><li>Prepare workshop environments and interactive tutorials with examples</li><li>Build full-featured coding sandboxes</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pQXOBDelYcPFqeLn" /></figure><h3>Summary</h3><p>This PL/I extension provides a modern experience to users who work with z/OS systems written in the PL/I language.</p><p>For further questions, contact us on Slack: <a href="http://che4z.slack.com/">che4z.slack.com</a></p><p>References</p><p>[1] <a href="https://medium.com/modern-mainframe/lsp-magic-mainframe-language-support-in-modern-ides-4ea3d81259b3">https://medium.com/modern-mainframe/lsp-magic-mainframe-language-support-in-modern-ides-4ea3d81259b3</a></p><p>[2] <a href="https://medium.com/modern-mainframe/dap-magic-modern-debugging-experience-for-mainframe-software-deecb40df4c8">https://medium.com/modern-mainframe/dap-magic-modern-debugging-experience-for-mainframe-software-deecb40df4c8</a></p><p>[3] <a href="https://langserver.org/">https://langserver.org/</a></p><p>[4] <a href="https://medium.com/codex/antlr-magic-developing-mainframe-language-applications-using-language-recognizer-5262726e1e93">https://medium.com/codex/antlr-magic-developing-mainframe-language-applications-using-language-recognizer-5262726e1e93</a></p><p>[5] <a href="https://itexus.com/pl-i-programming-language-one-overview-and-applications/">https://itexus.com/pl-i-programming-language-one-overview-and-applications/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=68e27a7ab420" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/pl-i-the-newest-mainframe-language-code4z-extension-68e27a7ab420">PL/I — The Newest Mainframe Language Code4z Extension</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CICS Integrations — Easy to Develop, Fast to Deploy, No Changes Required with HB.js]]></title>
            <link>https://medium.com/modern-mainframe/cics-integrations-easy-to-develop-fast-to-deploy-no-changes-required-with-hb-js-6f2d947be990?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/6f2d947be990</guid>
            <category><![CDATA[cobol]]></category>
            <category><![CDATA[architecture]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[mainframe]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Brittany Dartlon]]></dc:creator>
            <pubDate>Tue, 11 Feb 2025 13:07:10 GMT</pubDate>
            <atom:updated>2025-02-11T13:07:10.478Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PhXNWORAoYST-ZordEWdEQ.jpeg" /></figure><h3>CICS Integrations — Easy to Develop, Fast to Deploy, No Changes Required with HB.js</h3><blockquote>Today’s hybrid IT landscape requires extending the value of mainframe applications to make compelling business applications.</blockquote><p>Critical applications and business logic are contained in your CICS environment.</p><p>You have invested time and effort to create applications that happen to run on the mainframe. Tossing them aside just to rewrite them is not a good investment. Tapping into these applications, extending the entry points, and enabling newer tenured developers to access the value is a must do.</p><p>We’ve learned over the years what approaches do not work well when seeking to integrate with mainframe applications! You could use 3270 terminal emulation and the layout of the fields on the CICS application screens to automate running these CICS applications (sometimes called ‘screen scraping’). While screen scraping can pull results from CICS applications into a more user-friendly environment, these types of integrations are slow, prone to break if there are CICS application changes, and can be expensive — driving up mainframe costs.</p><p>What’s a better way to integrate with CICS applications so hybrid applications become more powerful?</p><h3>Modernize Without Breaking Your CICS Applications</h3><p>Valuable CICS applications should be used as a distinct advantage.</p><p>Instead of focusing on moving your valuable CICS applications off of the mainframe, what if you could API enable them? Allow your CICS applications to integrate with modern web services, front-ends, and even with other CICS applications.</p><p>HB.js is the solution for API enabling your CICS applications, allowing you to make these valuable resources readily available for use on any platform, using any integration.</p><p>HB.js operates using the following principles:</p><ul><li>No screen scraping</li><li>Easy services development</li><li>Fast services deployment</li><li>No required changes</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/820/1*BbPbiezVxdZAzZjHXwioWA.png" /></figure><h3>How HB.js Enables CICS Integrations</h3><p>HB.js runs inside of CICS, limiting overhead and redundancy and saving CPU time. HB.js is also zIIP-enabled, further lowering mainframe costs. And HB.js is highly performant, with some customers running more than 30 million transactions per day using HB.js.</p><p>There’s no requirement to change your CICS application to use HB.js. Moreover, HB.js excels at end-to-end application-level testing, enabling confidence in the reliability and integrity of your existing CICS applications. And when your CICS applications do change, your HB.js-developed services will continue to work because HB.js does not use screen scraping. HB.js uses the key-value pairs made accessible in BMS maps to interact with CICS applications in a resilient way. Screens and fields in the CICS applications can be changed without breaking your HB.js services.</p><p>You can use HB.js to navigate complex CICS applications and create HB.js services using JavaScript. JavaScript is used by over 17 million software developers. You can create callable web services for your CICS applications in minutes or hours rather than weeks or months. You can use these web services on any platform, in any manner, with any API. And you can run these web services using DevOps pipelines and standard tools like git, Jenkins, and more.</p><p>You can create an HB.js JavaScript service for each CICS application. Or you can create a single JavaScript service that leverages as many CICS applications as you need — to send a single call to the mainframe, where the HB.js service will orchestrate the needed CICS applications and return a single response with data formatted however you need it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Nl9e2GeWaDSnKAzunPhlxw.png" /></figure><h3>How HB.js Supports Developers</h3><p>Using the supported HB.js development tools that run in Visual Studio Code (VS Code) and Eclipse, easy HB.js service development and fast deployment are possible for JavaScript developers, even those with limited mainframe knowledge and skills.</p><p>HB.js provides an Application Explorer so that developers can learn how existing CICS applications work, discover the important fields on each application screen, and learn how to use the applications with HB.js. Application Explorer provides the information necessary to write HB.js services for existing CICS applications.</p><p>The HB.js development tools in VS Code and Eclipse also enable developers to quickly and easily store, compile, and run HB.js services on the mainframe, using their preferred development environment. Services already stored on the mainframe can also be easily retrieved and updated, without touching a green screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lxwYARej4aCCMTNhHZAiLw.png" /></figure><p>Unlock the value of your legacy CICS applications while improving your business agility by leveraging HB.js. As a part of the Broadcom Mainframe DevOps Suite, you may already have access! Learn more at<br><a href="https://www.broadcom.com/products/mainframe/application-development-testing-devops/hostbridge">https://www.broadcom.com/products/mainframe/application-development-testing-devops/hostbridge</a></p><p>#HB.js#Mainframe#JavaScript#CICS#zOS#Integration</p><blockquote>Co-Authored by <a href="https://medium.com/u/b7e47755bf29">Michael Wendel</a></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6f2d947be990" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/cics-integrations-easy-to-develop-fast-to-deploy-no-changes-required-with-hb-js-6f2d947be990">CICS Integrations — Easy to Develop, Fast to Deploy, No Changes Required with HB.js</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mainframe Engineering Leader Wins Enterprise DevOps Award]]></title>
            <link>https://medium.com/modern-mainframe/mainframe-engineering-leader-wins-enterprise-devops-award-b677899cf7ab?source=rss----4c7d2fded734---4</link>
            <guid isPermaLink="false">https://medium.com/p/b677899cf7ab</guid>
            <category><![CDATA[cobol]]></category>
            <category><![CDATA[enterprise-technology]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[application-modernization]]></category>
            <category><![CDATA[mainframe]]></category>
            <dc:creator><![CDATA[David McNierney]]></dc:creator>
            <pubDate>Tue, 04 Feb 2025 16:12:14 GMT</pubDate>
            <atom:updated>2025-02-04T16:12:14.185Z</atom:updated>
            <content:encoded><![CDATA[<p>Recognition for rethinking software delivery for z/OS-based applications</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1j3x3EccahQkOd4iMC_MwA.png" /></figure><p>Sheree Britt, Associate Vice President, Mainframe Engineering Practice Lead, who’s leading the charge for Mainframe Modernization at TD Bank Group, has been recognized as the Enterprise Leader of the Year by the DevOps Dozen awards!</p><p>The award recognizes a strong DevOps leader who guides their team through the challenges of developing and implementing DevOps strategies, policies, culture, and practices to improve software development and delivery.</p><p>“Culture change is the most challenging aspect of any transformation, but especially in large, complex organizations. TD’s Sheree Britt shows what a leader can accomplish when you lean into DevOps practices and principles and get the organization excited by early wins and the long-term potential,” said Alan Shimel, lead judge and founder/CEO at Techstrong Group.</p><p>Following a distinguished 22-year software engineering career at American Express, Sheree was recruited by TD Bank Group to help modernize the software delivery process across platforms and build a talent pipeline around it. For the past couple of years, she’s been leading the team through innovation and change while successfully maintaining high-quality standards to meet day-to-day demands. By institutionalizing DevOps across platforms, TD benefits from greater business agility, normalized skillsets, and increased digital innovation.</p><p>A particular challenge for the mainframe has been the retirement of experienced developers resulting in the need to backfill with staff familiar with contemporary DevOps practices and toolchains (and unfamiliar with legacy tools and practices). Through her modernization efforts, new recruits can now use familiar DevOps tools and practices and spend more time coding and problem-solving.</p><p>Sheree has been able to bridge the two worlds by adopting an empathetic approach that addresses the perspectives of both new-to-mainframe talent as well as long-tenured developers with limited experience with DevOps.</p><p>Her self-described leadership mission: “Lead with empathy, motivate and help colleagues grow and realize their individual career goals”.</p><p><strong>Teamwork Makes the Dream Work</strong></p><p>TD’s Mainframe Modernization vision is to develop and equip engineering talent with the knowledge and technical skills necessary to succeed while modernizing the software delivery process. This innovative team spans many geographies including Fort Lauderdale, Toronto, Calgary, and New York.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pZcTt0RrSyI3k-Ueb2j3FA.jpeg" /><figcaption>Colleagues Supporting Mainframe</figcaption></figure><p><strong>TD TechCon and Innovation Days</strong></p><p>A key element to the team’s success is the open exchange of ideas at internal forums and the freedom to apply these ideas in a controlled environment. TechCon, for example, brings together TD technologists, in-person and remotely, to learn, develop, and enhance their tech acumen and skills.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/888/0*bcZIllYPeCD998yD" /><figcaption>Sheree representing engineering modernization at TechCon</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/966/0*5HkCmZD9g7F2Hnx5" /><figcaption>Mainframe innovation workshop</figcaption></figure><p><strong>Partnering for Success</strong></p><p>Sheree and her team actively partner with Broadcom to ensure the AppDev process, technology, and culture are progressing together. Sheree is open with her experiences orchestrating her modernization program and in doing so she helps the entire community move forward.</p><p>For example, she recently won a Best Session award at the SHARE industry conference for the presentation, “AppDev Modernization: Where Do I Start?” Broadcom’s Vaughn Marshall was a co-presenter in this well-attended and interactive session. The mainframe community benefits when leaders like Sheree share their modernization ‘lessons learned’ (lifts all boats).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*zgKNyoLQe2URZ-um" /></figure><p><strong>Mainframe Leadership</strong></p><p>Let’s take time to recognize the incredible progress mainframe visionaries like Sheree are making on their modernization journeys.</p><p>Congratulations Sheree Britt! With leadership like yours, the sky is the limit!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b677899cf7ab" width="1" height="1" alt=""><hr><p><a href="https://medium.com/modern-mainframe/mainframe-engineering-leader-wins-enterprise-devops-award-b677899cf7ab">Mainframe Engineering Leader Wins Enterprise DevOps Award</a> was originally published in <a href="https://medium.com/modern-mainframe">Modern Mainframe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>