Virtual CICS User Group Sponsors

Broadcom Mainframe Software

Virtual CICS User Group | September 2023

Using CICS Artifacts to build Web Service APIs

James Alexander, Software Engineer

CICS applications are still responsible for “running the business” in many major organizations. In this presentation with a live demo, participants will see how to reuse, without change, existing CICS transactions, programs, and/or data to build a web service. James Alexander will demonstrate how you can quickly build web service APIs out of these applications without the risk of having to re-platform or rewrite them using HB.js

James Alexander, Software Engineer

James AlexanderAlexander has over four decades of experience in mainframe systems programming and managing large IT organizations. He joined Broadcom in August of 2022 when it acquired HostBridge Technologies. Prior to joining Broadcom he had been with HostBridge for 18 years and was head of IT services for Oklahoma State University for 22 years where he set direction for IT services — including network operations — and oversaw integration of disparate technologies into uniform business solutions.

Read the Transcription

[00:00:03] – Amanda Hendley (Host)
Great. Well, I want to thank you all for joining us for this virtual user group CICS, and today we have a great program for you. We’ve got a couple of things to take care of before we get on with our program. So I’m going to make sure that all of our attendees are able to just enter. So I’ve disabled the waiting room so people coming in to get settled. But again, I want to thank you for joining us for the itech ed virtual user group session. If you’ve only participated in the CICS sessions, there is actually a Db2 and an IMS session that you can also participate in if that’s of interest. In some months we have two meetings, and then some alternate months we have one meeting. So I encourage you to check those out. You can find out all the information at the iTech-Ed website. If this is your first time here or we haven’t met. My name is Amanda Hendley. I’m the co-host of these sessions and I am also the managing editor over at Planet Mainframe. So our agenda for today, we have introduced the session, so that’s taken care of.

[00:01:15] – Amanda Hendley (Host)
We’re going to take a look at our sponsors. We’ll have our presentation followed by Q&A, have some news and articles to share with you, and then we’ll announce our next session. Our partners for this series, Virtual CICS, are Broadcom, IntelliMagic, DataKinetics, and Planet Mainframe. You can find links to all of these companies at the CICS website. I encourage you to check them out because they actually all have great resources for you, including the Broadcom community pages. So if you’ve got some questions that you need answers to and want to do some of that community collaboration, I encourage you to go and check out those pages. And now we’re ready to get started. I’m going to introduce James, and while I’m doing that, James, if you want to go ahead and I’m going to stop sharing. We’re here today for Using CICS Artifacts to Build Web Service APIs and our presenter is James Alexander, who is a software engineer with over four decades of experience in mainframe systems programming. He was with Host Bridge Technologies, which was acquired by Broadcom last year. And prior to that, he was actually head of IT services at Oklahoma State University for 22 years, where he saw the integration of different technologies and created a uniform business solution.

[00:02:44] – Amanda Hendley (Host)
So we’ve got a lot of expertise here. So, James, welcome. We’re glad to have you.

[00:02:50] – James Alexander (Presenter)
Thank you for inviting me. I really appreciate you having the opportunity to talk to you all. I’m a little remote today. I happen to be in Bangkok for the last couple of weeks, so I’m a little bit away from home. If I look a little tired, it’s probably because I am. I hope you don’t mind. So let’s hop right into it. I’m not much of a believer in slides, so I only have just a few slides to work through. And then I really like showing the product, showing what we’re capable of doing. So what’s the problem that we’re trying to solve? We all have legacy applications, applications that still run the business day in and day out. Depending who you ask, there’s somewhere between 200 and 800 billion lines of COBOL still in production today. We’ve got tens of millions invested in it on a company basis, and some companies have much more invested. Nobody wants to use a 3270 terminal. Everybody wants to use a web application, or better yet, a phone. And the host just doesn’t allow us to do that. In many cases, it doesn’t allow us to access that business logic that’s locked up inside our applications.

[00:04:06] – James Alexander (Presenter)
We need to find ways to be able to get to that logic. And you’ve got some choices available to you in doing that. You could, if you chose to rewrite applications, you could move them off the host. There’s problems with both of those big problems. First off, it takes a long time to do that. You try to rewrite your applications or try to migrate off the host, it’s going to take you years. Is it going to be worth spending two to three years on that? And you can mitigate some of that time by throwing money at it. It’s already going to be expensive to try to migrate off the host or rewrite applications. You can throw money at it and try to reduce the time, but the biggest problem is not time or money. Biggest problem is risk. Changing a single line of code introduces risk into your environment, and you can’t afford that. Changing all your applications, moving all your applications off the host, the risk is outrageous. You’ve got to find different ways of doing that. What are the requirements you’re really trying to get here? You want to reduce the cost of bringing your mainframe into an API world, be able to interact with those applications.

[00:05:22] – James Alexander (Presenter)
You got to reduce the cost, and you got to be able to use those existing assets you already have in place, those assets that are locked up inside of CICS. You don’t want to have to buy new, expensive skill sets to be able to do that. You either want to use existing skill sets or easy to learn skill sets most importantly, you have to minimize the risk. And the best way to minimize the risk is by not changing a single line of code for your CICS applications. Leave all that code exactly where it lives today. Reuse it, regardless of the type of artifact it is, whether it’s a visual transaction. And what I mean by a visual transaction is a transaction where the business logic and the presentation logic is all intermingled in the code without changing any of that, or changing your commercial programs or your data sources behind that, the VSaM, Db2, Datacom, whatever your data sources happen to be behind your applications, no changes in those applications at all. Those applications need to continue to run as they’ve always run. To keep your risk down. Make sure that the security auditing and logging is still the same.

[00:06:35] – James Alexander (Presenter)
You don’t lose any of the integrity domain frame has given you, both in security, high-availability, high-throughput. Now how do you accomplish that? How do you have all of these things, not have to change any of your code? Well, surprisingly, it’s installing a JavaScript engine inside of CICS, a JavaScript engine that runs right next to your applications where you can orchestrate those business processes and turn them into callable APIs without changing those applications on the host. So that visual transaction allows you to change address instead of being six, seven or eight screens that are walked through on a terminal, it’s a single invocation to the host to a web service API running inside CICS. JavaScript engine that orchestrates through that change address process, navigates through those screens or calls the commercial program, or access the data directly. Being able to do that inside CICS right next to your applications without having to change your applications at all to turn that business logic, that business process into a standard space callable API to the outside world. JavaScript engine we ported to run inside of CICS came from Firefox. It runs on the zIIP, which means that doing this orchestration is not going to add to your cpu overhead.

[00:08:08] – James Alexander (Presenter)
All of the Javascript that you create to do the orchestration to create these web service APIs is zIIP eligible. That doesn’t mean we’re going to change your application logic, it’s still going to run on the GP as is IBM’s code is as well. But all the orchestration logic you create, all the transformations that you do inside the JavaScript engine to create this web service API to the outside world. That’s all zIIP eligible. No specialized client is required to be able to call into this a web service API. Anything that can make a standard web service API call can talk to hpjs running inside CICS. The service boundary is actually the host. So the services come directly out of the host, not out of some middle tier, not of some other application running off host, but the services. The web service APIs are coming directly out of the host. Most of the time that indication is going to be HTTP or HTTPS but maybe you want to use MQ to transport those web services outside the host. You can also call hbjs via CICS links or EXCI or anything that you basically can talk to CICS with.

[00:09:23] – James Alexander (Presenter)
You can call hbjs. Installing hbjs inside your environment, be able to create these web services doesn’t change any of your options. You have available to you inside of CICS when it comes to high availability or high throughput. So if you need to run three or four CICS regions that support high throughput, you can do that with hbjs either running in a single region or in multiple regions, just as you would with any other application API to the outside world. It can be whatever you choose, JSON XML soap. It can be restful. It’s your choice. You could even use binary data in and out of the host if that’s what you wanted to do. There are no requirements to lock you into a specialized API or an API that might not suit your environment. I’ve got one more slide and then we’re going to hop into actually looking at code, because I’m a guy that likes to see things and how they work. So we’re going to take a couple of different artifacts that live inside of CICS. In the demo, I’m getting ready to do the hardness artifact to deal with is a visual transaction, a transaction that was only meant to run at a terminal.

[00:10:39] – James Alexander (Presenter)
And that’s the standard part of my demo I’ve done dozens of times. I’m going to really kind of just take a look at the code a little bit, help you understand exactly how it works. But I’m not going to go into a lot of detail. We can also call any commercial programs or go directly at any data. So if we want to go at VSAM or datacom or Db2, which is what I’m going to do today, we can do that as well. Now we’re running inside of CICS. So when we access Db2, we’re really accessing Db2 through that CICS to Db2 link. Okay, so I’m going to switch over to the demo now and off the slides and we’re going to talk about, and I’m going to show you get my icons all out of the way, how we’re able to do that. Before we start on looking at the code though, I want to show you the application I’m going to be talking to just really briefly. And it’s a real simple application. It’s an IBM sample application. It’s probably 20 or 30 years old. It’s a stock portfolio trading application and I got four stocks in my portfolio and I can get real time quote buy or sell shares.

[00:11:53] – James Alexander (Presenter)
And the real information I need to get to, if I’m doing a real time quote is information about how many shares I hold or the value of those shares or what the current stock price is, those types of things. Now this is a really simple application. I’m not going to dwell on it. This is the application, we’re going to use the business logic and turn the business logic here into web service APIs. Let’s take a look at the code and the development environment I’m going to be using today is Eclipse. We have in beta vs. Code vs. Code allows us a bigger audience to be able to use and be able to write the Javascript. I’m going to use Eclipse today because I don’t want to have to deal with a beta in front of a demo and all you people. So we’ll stay with, although I am going to show you a little bit of beta tooling that we’ve got available to us. So this is Eclipse and it allows me to interact with hostbridge running inside of CICS. There’s a plugin that’s added to Eclipse that allows us to do that interaction. I can see my host and the services that are available to me there.

[00:13:02] – James Alexander (Presenter)
I can have my local application or my local files here. If I want to use git or some other source control. Anything that integrates into either VS Code or into Eclipse we can use as source control for the services we create. I’m going to create a real simple web service here, by the way, everything I’m doing is live. So if I stop talking every once in a while because I can’t type and talk at the same time. So it’s a very simple piece of javascript and all it’s going to do is say hello world. Of course it’s not JSON, it’s not XML, it’s just going to be returning text. But I wanted to show you how easy it is to create a web service and deploy it. If I want to test this piece of code that I’ve just written, I can right mouse click in the window and I can say execute and I get this message that comes back here that ran inside of CICS. What just happened was that piece of Javascript was sent to the host, syntax checked, compiled and executed inside CICS, and the results of that execution was sent to me here.

[00:14:18] – James Alexander (Presenter)
If I want to deploy this as a web service, all I have to do is do a right mouse click and make and it’s going to tell me build complete. Oh, it’s asking if it’s okay if I replace my existing hello world. Then it tells me build complete and I’m able to interact with that application. I’m able to execute that Javascript here from my Eclipse. And when I did the make just now, it compiled and saved that Javascript inside the host. So now I can actually invoke that service from any application outside the host. Let me hop over here and show you how I can actually execute that from a web service. I can get that out of my way, I can come over here and I can invoke that hello world from a browser. So I get compiled, saved and deployed a web service in seconds. Now I’m not interacting with CICS. Let’s take a look at how we do that. So here’s the service I wrote earlier today, and it’s going to allow me to exercise that trader application. I’m not going to go into a lot of the detail of the code that’s here.

[00:15:54] – James Alexander (Presenter)
I want to touch on some highlights that you understand how this code works. Now the entire service is only 89 lines long and it’s going to allow me to get the real time quote for all four of those stocks. Now getting the real time quote for all four of those stocks is 18 transactions. It’s one transaction to start trader and then it’s four transactions for each one of my stocks that I’m going to retrieve. So there’s four stocks, so four times 416 and then it’s one transaction to intrader at the end. But that’s a total of 18 transactions to be able to interact with my host, to be able to pull back these services. And again, all I have to do to test is do a right mouse click and execute or I can deploy, but do I right mouse click and make. So let’s take a look exactly what’s inside this code. This is all standard Javascript. There’s nothing unusual about any of it. I’m pulling in some pre written Javascript by the use of packages that are required. I’ve written Javascript utilities that allow me to do certain activities inside of CICS and I can pull in that Javascript and use that Javascript in other services that I create.

[00:17:07] – James Alexander (Presenter)
So I can create reusable code and use it any place. To be able to run transactions I have to create an HB object so I can interact with the CICS services on the back end. Start a transaction. It’s nothing more than doing an HB run and indicating which transaction I’m going to execute. That starts the trad transaction just as if I were running at a terminal. Now there’s no vtam involved, there’s no 3270 data stream involved. We’re using an API inside of CICS that lets us exercise those transactions without having to have any sort of terminal involved in the process. Using a bridge API that’s available from IBM. I’m also going to get some input from the outside world on this service, so I’m going to pass some parameters in that says what companies I want to get the real time quote for. So here I’m going to extract out from the query string the companies that I want to get the real time quote for. I’m going to separate them with commas and I’m going to use a Javascript function that splits that input array. So after I retrieve the input from the query string I’ll have an array of companies I’m going to iterate over.

[00:18:24] – James Alexander (Presenter)
I also want to decide at runtime what type of output I want. Do I want XML output or do I want JSON output? So I’m going to pass in a parameter that allows me to determine that at execution time what the output looks like. So that is my initialization function. I’m going to have a termination function as well. The functions are totally in control of whoever creates the service. It’s just the style I like is to use initialization and termination at the end of my service. Here in my termination I want to find out how many transactions I’ve got and I want to add that to my output. I want to see how long it took me to run this service. I’m going to calculate the elapsed time as part of that and add that to my output string. And then here using that type that I got off from the query string, I’m going to either output XML or I’m going to output JSON. And you can see there’s only one line that I have to use to be able to create either XML or JSON from the Javascript object I’m creating. Up here at the top I kind of have a template of what I want my Javascript object to look like.

[00:19:35] – James Alexander (Presenter)
And this is what the JSON output is going to mimic or model itself out after on the output side. And then the core of my application is walking through and getting the real time quote from each one of my companies. So this function is going to walk through based upon the company number, walk through and fill in those fields on the screen to walk to the correct screen and then it’s going to extract those values off the screen. Now how does it do that? Am I doing screen geometry to be able to interact with those applications? Do I have to know what row and column a field is at to be able to either fill it in or extract a value off the screen? The answer is no. I actually use the real field names the programmer chose when they wrote the application. So when I’m setting the company number to option here, that’s a field name that’s on the screen. When I’m setting that menu screen, that’s in between where I selected a real time quote or buy or sell. After I’ve selected the company, I’m filling a field called op two. That’s a field the programmer chose when they originally wrote the application.

[00:20:45] – James Alexander (Presenter)
Now how do I know what these field names are? Do I have to analyze code? Is there some sort of special process I’ve got to do to extract that information? The answer is no. We get that information directly out of the BMS map load modules. The metadata is there and available to us. The field names that are on the screen are known to that BMS map. But how do I know what those field names are when I write my services? Well, we’ve got tooling that lets us do that. Let me switch over to my browser here and go to the application explorer. Now this is some beta tooling that will be part with the VS Code that allows us to walk through our transaction just as if I were at a terminal. Now this looks like a terminal, but it’s not. It is not a terminal. This is actually a conversation with hbjs running inside of CICS. There’s enough information in the conversation that this web application has with hbjs that it’s actually able to recreate what the screen looks like. This is not a 3270 screen. This is a JSON conversation with hbjs in the back end.

[00:21:56] – James Alexander (Presenter)
We do that, may have that conversation, produce these screens so we can know what those field names are. So if I want to know what my input field is here, I can click on it here, or I can put my mouse over here and it highlights it. Either one, I want to know where this field is. I can click on it. It says that’s comp three. So here are the field names for this application. The field names again the programmer chose when they wrote the application. We extract these dynamically out of the BMS map at execution time, so there’s no special setup that I have to do to be able to get this information. I’m going to walk on through this just to see what the real time quote again, this field is real time quote or this selection is real time quote and the field is up to. So if I select that I end up on the real time scope screen and here are the data elements I want to extract off the screen. Now using real field names means that I’m not reliant upon screen geometry. If this application should change, if somebody should change the trader application, move fields around or delete fields I’m not using, I don’t care in my service because I’m referencing the fields by the field names the programmer chose.

[00:23:11] – James Alexander (Presenter)
They move the fields around, I’ll still get the same fields. They might be in a different location, but I won’t care in my application. The only time that my service might need to be updated is if they delete a field I’m using or if they add a field that I need to add to my service. I’m walking through this application just as if I would if I’m on a terminal using the same PF keys, clear keys, et cetera. So now I know my field names, I know my navigation pass, I can create my web service and just as if I were running at a terminal, I’m hitting PF three keys to backup and then go pick up the next company down. In my main routine I’m just looping over the parameters that were passed in. I’m looping over the companies that were passed in as part of the request. Whether they pass in one company or four companies, this loop will execute all of that and extract out that information from those screens. Running those 18 screens or 18 transactions I talked about earlier to be able to walk through all of those screens. Let’s see what this looks like when I run it.

[00:24:17] – James Alexander (Presenter)
First thing I need to do is make sure I make it so I’m going to do a right mouse click and make it’s going to replace my experiments for earlier today again. So that says build complete. I now can go over and actually execute that service when I’m going to call that service from my browser and you can see here I’ve got live demo basic, which is the name of the service I created. I’ve got companies one, two, three and four. And my output type is JSON when I hit enter here. And by the way, I’ve already authenticated earlier, so my user id and password are being passed in. Authentication is occurring. You can see that I get back a JSON document that has the information I’m concerned I want. It’s got information about the real time quote. It’s got that elapsed time as well as the transaction count I just executed. If I want this in XML instead of JSON, I could just say XML instead and I get it in XML. And if I could have any number of different styles and in my termination routine I could then based upon the type, output, whatever style I needed for the application that’s invoking me, the default for this is going to be JSON.

[00:25:34] – James Alexander (Presenter)
Nobody wants to use XML anymore, do they? And again, if I want to just do one company or two companies or three companies, it’s at my decision at the time I do the invocation based upon the parameters I’m passing in. So I’ve just taken an application that runs on the host, a business process on the host, and I’ve turned it into a callable API and I did it in 89 lines of code. Now this doesn’t do the buy and the sell portion, but if I were writing the services for a customer, I’d probably do those as separate web services, or I might do them as a restful web service as opposed to separate services. But you want to kind of keep your services small, tight and very focused on a single business process because then you can reuse those services in any applications you need to build or assemble using those. And you don’t have to be as concerned about security and auditing those types of things if you keep the services very focused. Okay, I mentioned Db2, and how do we go about getting Db2? Now I’m going to show you how to get Db2 pretty quickly.

[00:26:48] – James Alexander (Presenter)
But the really important thing I want to show you is not only can I do visual transaction in this web service, but I can modify this web service to get Db2 data too. Or I could do it to get information out of VSAM, or I could call other transactions all in a single web service. Let’s take a look and see how hard it is to be able to get data out of Db2 using hbjs. And again, this is coming from CICS, so we’re using that CICS to Db2 connection. And again I’m getting some input values being passed in on the query string. You can see that I’m building a dynamic SQL statement here. Using the information that was passed in I’m able to create this SQL string with the start date, end date and the company where I want to get stock out of it. This is a small Db2 table that’s got several different stocks in it and ten or 15 years worth of stock for each one of those records for each one of those stocks. And all I have to do is a single request here or a single statement that says okay, pass this SQL statement over to routine that I’ve written.

[00:28:03] – James Alexander (Presenter)
That’s part of the hbjs distribution and this is all written in JavaScript and it will do the prepare the open and the fetch for all the rows of information and return back to me the results of that. I’m taking that results and simply adding it again to JavaScript object. And then I’m going to take that Javascript object and turn that into JSON for the outbound side so I can actually get information out of Db2 in as few as 41 lines of code passing these parameters in. So let’s take a look and see how this works when I run it. And again, here’s the name of the service. This is my host and I’m going to get quotes for broadcom stock. And look at the broad range I’m getting. I’m going to get from 2015 all the way to 2019, and I’m going to return it as JSON. That’s quite a few days of stock information, 1006 rows, that covers that. Now I could put in any date range here I want. Now that’s not necessarily a good thing, right? If I’m a DP two administrator, maybe I don’t want you doing large queries against my application on the host during the day.

[00:29:21] – James Alexander (Presenter)
Well, since I wrote the web service, I can control how much data you can get and when you can, even the time of day you could get it. So if I want to restrict this to something smaller than four years worth of data, I can say well, I’m just going to restrict it to only the first ten rows. So I’m going to make this and rerun my same web service again. And instead of returning 1000 rows, I return ten rows. Now the reason I’m showing you that is because I’m letting you know that you as the service creator are in complete control of how your services are used. You get to decide how your data is transformed into information as it’s supplied to the outside world. You control how much data they return. Now, the credentials they supply at execution time, it controls their authentication and access to the actual data. So if I sent this web service call to somebody else and they embedded it in their application, the credentials they use would determine if they had access to that data or how much the data they had access to, just as it would access to the transaction trader.

[00:30:41] – James Alexander (Presenter)
Okay, so now I’ve got these two web services. What if I want to get Db2 data back over here and make it part of this web service? How hard would that be? Well, I could take all of this code and embed it inside of this and get Db2 that way, or I could take the logic that I have here and turn it into that package. Remember at the top I said I can include packages pre written Javascript so I can reuse that logic over and over again. So if I take this and instead of making it responsible for getting information from the query string and how to output it, if I just turn it into a function, something I can call that does that for me, and then I can turn that into a package, see what that looks like. So here’s a package with the same basic logic as I had in the web service I created. But now this doesn’t have an interface to the outside world. It’s only made to be invoked by other pieces of JavaScript creating those web services. So I don’t have to get the company start date, end date from the query string, I do it by simply passing those parameters in.

[00:32:01] – James Alexander (Presenter)
When I call this function, I’m still assembling the SQL. I went ahead and added a restriction so I can only get ten rows of data. The same result set is going to come back and I’m going to append it to the same Javascript object. But I’m going to just return it. I’m not going to process it, I’m not going to do anything with it, I’m just going to return it. To call this package, all I have to do is have a couple of statements here, one that requires the package into my piece of Javascript that’s going to use it, and then I just have to do an invocation for this method. So let’s make this build complete. I’m going to copy this right here and I’m going to go back to my live demo and I’ll add this at top. I now have access to the functionality that’s in that package, and a package can have dozens and dozens of utilities or functions or methods inside of it, not just one like this package does. Now the other thing was I need to invoke this. So I’m just going to copy this statement right here and go back over to my live demo basic and I need to add this to my output.

[00:33:23] – James Alexander (Presenter)
And where should we do that? Well let’s do that. Let’s go ahead and do that right in our terminate. So right here where I’m adding status, I’m updating my tran count and elapsed time. I’m going to add that Db2 data to my response object before I output it, say response and we’ll call it Db2 quotes, Db2 data just for a name equals. And then I’ll paste in that that I copied. And again, this could be parameters that I pass in. Oh, let’s put a bigger date range in here to make sure that my restriction to only ten rows is working. But we’ll put a little over a year’s data request, a little over a year’s data. I think that’s all I have to do. I’ve only updated really two lines. I’ve included this and I’ve added this. This is all live so I hope I got it right. Let’s do a make on this. There it is. And let’s go back and call that service that we created here. I’m just going to refresh it and look you there. We now have Db2 data. And you can see my restriction that’s on my SQL, it’s in place and I’ve added Db2 data.

[00:34:48] – James Alexander (Presenter)
Now realistically this web service has no need for getting Db2 data, but maybe I needed to get some information out of a VSAM file. Or maybe I needed to get from some other data source to integrate with the execution of the visual transaction I did. Or maybe I need to call more than one commercial program at a time. Maybe I need to call three or four programs. Or I need to call the same commercial program repeatedly. Oh by the way, I keep saying comeary program, but it also does channels, containers. In fact, almost any API that’s inside of CICS I can invoke from hbjs. Any data source, any program, any transaction can all be called from hbjs. And you can create web services very quickly from any of those artifacts that’s part of your application on the host and expose them to the outside world in a safe and secure manner. So with that I’m going to stop talking and open the floor up for some questions. I think you can unmute yourself. If you’d like to ask a question audibly, or I’ll see if I can find the chat window. No, nothing in chat yet.

[00:36:05] – James Alexander (Presenter)
You’re going to be easy on the vendor and not ask any tough questions? Well, I guess I turn it back over to you, Amanda.

[00:36:14] – Amanda Hendley (Host)
Let me unmute myself. If you do have any questions, you can pop them in the chat. Or, as James said, happy to have you go off mute. I’m looking for any hands raised, but in the meantime, let me share with you a few. I guess I need to share my screen if I am going to share something with you. Okay. I do have a couple of articles and news pieces to share, and just as a heads up, I cannot see my chat anymore if anyone is putting anything in, but just from a news and article standpoint, I thought it was. There’s so much talk about generative AI. So if you hadn’t come across this article about the new Watson X system, I wanted you to check that out. All of these QR codes are photographable with your smartphone, and they’ll take you to the links. We’ll also include them in the newsletter. I do see a question came in. James, if you want to address Bradley’s question.

[00:37:26] – James Alexander (Presenter)
I’m not sure I know what PI CICS is. Can you clarify for me? Is PI CICS a screen painter of some sort, like a BMS map screen painter? The answer is yes, we can interface to it. Whether we get real field names or not is based upon where the metadata is that describes those field names. If it’s using bms under the covers for the screen painter, then we can absolutely get it. If it’s not, we’ve interfaced of multiple different screen painters before. To be able to extract metadata out of those screen painters, to be able to create that. In a worst case scenario, let’s say that a PI generates a 3270 data stream. We’re still able to interact with that even though it’s a 3270 data stream and be able to interact with the application. Now, unfortunately, if it’s a pure 3270 data stream, I am not able to get real field names because I don’t have any metadata points to it. But that’s a rare case. So if PI has the ability to give us that metadata or if it’s using bms underneath the covers, and I can interact with it and I can get real field names, but I’ve yet to find an application, and this is not an exaggeration.

[00:38:42] – James Alexander (Presenter)
After 18 years, I’ve yet to find an application that we couldn’t interact with.

[00:38:47] – Amanda Hendley (Host)
Thanks James. So I’ve given you a moment to check out these articles and I was saying with the QR codes you can just take a picture of them, but they’re also in the newsletter. So if you registered for these sessions, you’ll be able to get the newsletter that comes out on the alternating months. And in that newsletter, we’ll also have James’s session recapped as well as information about the next session that I’ll also give you today. I wanted to let you know some other ways to get involved apart from the newsletter and participating. We have newly combined all of our user groups on Twitter. Now you only have to follow mainframe vug for virtual user groups to get all the information. You don’t have to follow multiple groups. We do have a dedicated Facebook and a LinkedIn group for you. And again, all the videos get posted on YouTube and on our CICS site. And let’s see again, thank our sponsors for partnering, encourage you to check them out and say thank you and for our next meeting. So we’re going to be talking to Andy Wright, IBM master inventor about CICS and recovery. If it’s not posted yet, registration for this event will be posted up later today, so you can go ahead and get that marked on your calendar with that, if there are no other questions for which I don’t see any coming in.

[00:40:36] – Amanda Hendley (Host)
James, I want to thank you so much for being our presenter today and walking through such a great, detailed demonstration for us.

[00:40:44] – James Alexander (Presenter)
Thank you for the opportunity.

[00:40:45] – Amanda Hendley (Host)
All right, y’all have a great rest of the day.

Upcoming Virtual CICS Meetings

March 12, 2024

Virtual CICS User Group Meeting

CICS Event processing and CICS policies
Jennhy He, PhD
IBM Master Inventor, CICS Development
IBM Hursley Park

Register here

May 14, 2024

Virtual CICS User Group Meeting