Wednesday, September 23, 2026

Continuing Saga

 "...and the beat goes on...and the beat goes on..."

For the past year I have been an employee in Linda McHenry's enterprise LJM Services.  Linda underwent some serious medical procedures. She has bounced back well, but we have had several discussions about legacy planning for LJM Services.  That brings us to a new place where she and I will jointly own LJM Services;  so that we back each other up creating a more secure future delivering services to your company.

To reflect these changes in our business relationship we are changing the name we do business under from LJM Services to ROI Connections.  Many of us have fond memories of the ROI Systems Inc. days.  We like the focus of Return On Investment, investing in software development, consulting services and training, providing a return to pay for itself; an investment, not an expense. A particular interest of mine is the connection of Manage 2000 to the surrounding technological ecosystem. And a particular interest of Linda's is our connection to you, the users of Manage 2000.

I am personally excited about REST service and web service projects connecting Manage 2000 to external services and resources.  This might be Manage 2000 functions that directly connect with 3rd party shipping services like FEDEX and UPS, or building integrations between other in-house technologies like an IGA system and the Manage 2000 backend.  It could be application integrations like Excel ribbon components and action panes that pull data directly from Manage 2000 and allow accountants to post journals right out of Excel, or it could be streaming data directly into Power BI to refresh visualization data.

Linda is excited to continue her service creating and upgrading custom web functions as well as customizing standard Manage 2000 functions. I also detect some excitement about the prospect of teaching technical folks in the field about Manage 2000 development tools so that client technical staff can have some of the fun. It is a gig that we have both enjoyed for decades, and that might be refreshing in your organization due to personnel changes or an increased desire to develop and maintain more technical independence.

I am looking forward to working with Linda McHenry as ROI Connections, bringing our respective Manage 2000 talents to your company.

Let us know if you are interested in investing in any of these services ROI Connections can provide to your company:

  • Manage 2000 Software Development Classes
  • New or customized Web Functions
  • New or customized PWS Functions
  • Internal or External Systems Integration














Wednesday, December 31, 2025

Retirement from EPICOR

Today is my last day with EPICOR. I expect to still be reachable at pnewby@epicor.com during the coming year, but you can also find me at Peter.M2k@gmail.com.

Serving in the Custom Code and Tools groups of the Manage 2000 product team comprises the defining chapters of my professional career. I am deeply grateful for having had the opportunity to work with absolutely amazing people on an absolutely amazing product for 38 years.

It is with satisfaction and fond memories that I let go of my part in the great story of Manage 2000, its creators, supporters, and users.

Best wishes to those who remain and keep our creation alive. I will not be far away and am happy to help as I can.

With deep respect for the Manage 2000 community,

Peter Newby

Friday, May 30, 2025

Manage 2000 Release 8.1 Service Pack 7 Now Available

 General Availability for Manage 2000 8.1 sp7 was announced May 6, 2025.

Service Pack 7 includes a number of significant feature developments and infrastructure renewal.

Here is my Top Ten list:

  1. Multiple product photos may be attached in ITEMS.MISC and may then appear in image carousels in Item based portals like StockStatusPortal, ItemInfoPortal, PlannerScheduler, MasterScheduler, WoStatus, as well as in various ESOP pages
  2. A major Javascript renovation has replaced the prototype.js and scriptaculous.js libraries with modern native Javascript and bootstrap.js 
  3. Purchase Requisitions routing improvements allow web page approvals in place of ECA.TXNS Notify approvals.
  4. Cycle Counting has received enhancements
  5. CUSTOMERS documents PDF option
  6. EFT Payment enhancements 
  7. REST API Authorization Support
  8. Major restructuring of the INTRANET menu providing module organized access to portals
  9. MSO Extended Last Key expressions
  10. COMPANY.NAME switch overriding the 240 day date warnings, allowing sites to extend the date range allowed before warnings are issued
Ask the helpline for the complete list in the FEATURE.SUMMARY if you are interested.

Monday, February 3, 2025

Throughout all your endeavors keep good company

 25 years ago a particular sort of woman sat in the front row of  my Manage 2000 Development Tools programming class and asked an inordinate number of questions; starting with obvious issues and working into arcane detail.  I made it my mission to answer ALL of her questions, and 25 years later I am still not done!

Some of you may know that particular sort of woman as Linda McHenry; who has been my sidekick through thick and thin ever since.  We have taught, learned, laughed, cried, trouble shot, developed and presented together for over two decades.  When not solving Manage 2000 custom development puzzles, Linda is assembling jig saw puzzles, solving Sodoku puzzles, or playing her part in one of 5 or more community bands.  There is also the small matter of the QPR, the extremely organized and detailed cubbies that make up her Quilting Project Room. Linda IS the Master Patterner of Earthsea.  

So when I started to think about getting back to the work I began as a member of ROI Systems Custom Code group, Linda was the first person who came to my mind as good company to keep on this journey.

We intend to have fun.  We intend to build useful extensions to Manage 2000. And we intend to keep good company.

We hope you will be part of our good company.


Monday, January 6, 2025

Times they are a changin'

After 37 years working on Manage 2000 I have decided to ease back to ½ time. For 20 hours each week I will continue to fix treasures, perform maintenance on Manage 2000, and assist our great helpline folks. That will give me 20 hours a week to devote to personal pursuits.

I started out working on Manage 2000 in the custom code department, sometimes called Special Client Services. It was a small group including Teri Scheper, Warren Jacobsen, and Lane Johnson.

The year was 1987.  It was the third day of August, a warm cloudy Monday with a passing thunderstorm.

We worked on ADP 40 terminals wired into an Altos minicomputer and delivered customization to client computer systems by way of a cantankerous communication batch processor named The Magic Bus.

Yes, life was different then. It was the time of Castlevania and Zelda. Michael Jackson was Bad, Whitney Houston was Whitney, and U2 was up the Joshua Tree. Aretha Franklin became the first woman to be inducted into the Rock & Roll Hall of Fame.

The Twins defeated the Cardinals four games to three to win the Series. Twins pitcher Frank Viola was named as the 1987 World Series MVP.

The radio introduced us to "Walk Like an Egyptian", "The Way It Is", and "Livin' on a Prayer".

Important debuting cultural works included "The Princess Bride", "Spaceballs", and "Predator".

And we were all captivated by the baby Jessica McClure rescue saga unfolding in Midland, Texas where at the age of 18 months she fell down a well and was trapped. Rescuers worked for 58 hours straight in order to rescue the child. And all three networks covered every hour.

I was oblivious to most of this due to the sleep deprivation that accompanied our first child. That and the mental distortion of stepping onto the ROI Systems juggernaut named Manage 2000.

Ben has been an architect for the last decade.  Michael is a mechanical engineer.  Matthew does some kind of underwriting voodoo that keeps health insurance solvent.

Now I need to take some time to meet the next generation and watch the magic happen again without the sleep deprivation.

I also hope that some of you may want to invite me back to my custom code days to work on projects of value to your organization.  

I am particularly excited about REST and web services in and out of Manage 2000 8.1.  There can be magic here too.   Excel integration with Ribbon components that are aware of Manage 2000 and directly pull/validate data.  PWS functions that read and post directly to FEDEX or UPS REST services.  Integration projects that let other software in your network leverage Manage 2000 data and processes. 

Time to semi-retire and start having more fun.

Wish me luck!


Friday, July 19, 2024

Javascript Lifecycle

Once upon a time Volkswagon put out an advertisement mocking folks who thought Volkswagons never changed.  The Beetle did look like a Beetle for decades; then again even when it was retro'd.  Change is antithetical to software endurance and yet we write code in a rapidly changing environment.  And our users expect it to continue working for years...decades in the case of Manage 2000.

The W3C has been a conservator of Internet technologies like HTML, CSS, and Javascript. The underlying standards of TCPIP, FTP, and Telnet have been steady for decades.  But there is enormous pressure to 'improve' the user interface technologies that power browser experiences.  And now that the browser wars have consolidated technological components and users are updated with the latest version of a few shared script  engines continuously, browsers can quickly adapt to changes in the definition of Javascript.

ECMA Script 6 was a giant leap forward. It was adopted in 2015 and implemented in most browsers by 2017.  But the European Computer Manufacturers Association (now Ecma International) is moving the Javascript standards forward every year; JS 2016, JS 2017, JS 2018, JS 2019, JS 2020, JS 2021, JS 2022, JS 2023, JS 2024.

Turns out I don't know Javascript.  I know what Javascript used to be.  But I don't know what it can be in this moment. Check out the new methods and properties and whole new language elements:  w3 schools js versions.asp

I guess it is time to give up pretending I know how to program in Javascript and start believing I can figure it out and look it up on Google or Stack Overflow and construct my knowledge of coding in Javascript "Just-In-Time" as I am working through projects.  Oh yeah, I know, AI will help me out  providing Javascript coding techniques in real-time as I type, Javascript coding techniques which are changing with every new project I undertake.  Will I feel like I am in control of the horse, or just hang on to the saddle horn and try not to fall off?



Friday, May 31, 2024

NUGM 2024: A Real Live User Group Meeting!


NovoROISystems' first in-person post-covid user group meeting came off without a hitch. 

 An intimate group of about 20 customers participated, some bringing experience in search of new ideas, others bringing novel points of view and a hunger for experienced perspectives. 

Bud Brown brought his deep well of system administration knowledge. 

Linda McHenry and I shared our custom and standard development experience. I took a deep dive into Manage 2000 as a REST consumer and also as a REST provider.  Linda pulled back the curtain on creating and modifying Manage 2000 web functions.

Marc and Trey and Joanne covered NovoROISystems software as well as several standard Manage 2000 topics. 

And special guest, Ian Foster, brought an introduction to Embrace ERP, which is a going and growing concern with an APICS core similar to Manage 2000.

It was short but sweet.

Really heart warming to see old friends still succeeding in manufacturing using Manage 2000 as a rock solid ERP solution.

And encouraging to see new faces just beginning their journey with Manage 2000 or in some cases experienced Manage 2000 6.5 users looking into the face of the Manage 2000 8.1 world.

Frodo Lives!

Friday, February 2, 2024

Manage 2000 News Ideas

Manage 2000 NEWS.ARTICLES provide a wrapper for ERP generated news content, publishing ERP news on an RSS feed making it accessible from any RSS enabled client.  This might be the Manage 2000 web function NewsReader, or a web browser RSS plug-in, or some other client newsreader software outside of Manage 2000.

Many news content providers already exist within Manage 2000. MSO is one out of 8 news source types available in NEWS.ARTICLES. The MSO new source type publishes the results of Manage 2000 Software Objects.  There are about 1000 standard MSOs, about 1/2 of which are suitable for publishing as news articles (not dependent on PWS).  And if you don't see what you are looking for, creating specific new tailored MSOs can be quickly accomplished using MSO.BUILD.

News About a Customer:

There are lots of standard MSOs creating content about customers and sales.  You can easily configure a newsfeed focused on what has just happened in a customer's account and another feed focused on what is expected to happen shortly.  You can copy any of these standard MSOs to a tailored version to adjust date ranges, time spans, and other options.

Try creating a Customer Recent Events newsfeed with news articles based on some of these MSOs: 508S, 509S, 512S, 513S, 514S.  And a Customer Forecast News with news articles based on some of these MSOs: 510S, 515S, 1272S, 1278S.

In NEWS.ARTICLES select MSO as the Source and enter the MSO Id and then accept all the defaults.

Add your articles to a newsfeed and then inspect in the NewsReader.

When you have something you like then use the previous post 'Virtual NUGM 2023 Tailoring Manage 2000 Web Portals' to guide you through adding your displays to LOOK.AR.

News About Today's Business Activity:

If SOP.CONSTANTS Sales Data Monitoring and AR.CONSTANTS AR Data Monitoring are enabled then MCD_DATA is updated with monitoring information about Sales Orders and Shipments and Invoicing and Cash Receipts as these transactions are entered into Manage 2000. 

MCD_DATA can be used as a News Source in NEWS.ARTICLES to present live information about SOP/AR activity.  You can present bottom line totals or Top Ten lists of customers or parts or sales reps, which continuously update as transactions are entered into the ERP system.

News From The Shipping/Receiving Docks:

Create an E type MSO which lists the RCVNG.RPTS for today in reverse chronological order  sampling the last hour or so.  Then wrap your tailored MSO in a NEWS.ARTICLE.

News From The Production Floor :

If you track live activity on your production floor using an MES system then check to see if it is capable of publishing REST services providing detailed status of work in progress.  If so you can configure a REST.SERVICE in Manage 2000 to consume the MES REST service.  And yes, there is a REST news source type allowing you to publish the MES information inside of Manage 2000, say, on the Work Order Status portal.

News About System Administration Tasks:

Another of the 8 news source types is MONITOR.  You can publish MONITOR.OPTIONS of ADI, BATCH.MASTER, CASE, ECA Agents, MASTER.AGENT processes and more. The original MONITOR.INTERFACE was PWS based, consuming a PWS user license while providing a user display. NEWS.ARICLES publishing MONITOR.OPTIONS are displayed in a web browser drastically lowering the license cost of using MONITOR.OPTIONS and making them available on a variety of devices.

News From Power BI:

If your company uses Power BI to build Visualizations you can publish these as news articles making them available to Manage 2000 users within the ERP system.

In Summary:

Manage 2000 RSS News is a low cost way of sharing ERP news events in real time. You can leave newsfeeds for private consumption by users in NewsReader, or make the newsfeed appear on portal pages, or hang a smart TV in a public area and set its URL to a specific NewsFeedId to create an Airport style monitor of shared information keeping everybody on the same page.

Friday, December 8, 2023

Automating REST Authorization Calls

REST services provided by 3PL partners generally require a two-step process to use their service.  First a call must be made with secret credentials to obtain an authorization token.  Then the auth token is submitted with subsequent requests.

In Manage 2000 REST.SERVICES we can create one REST.SERVICES record to obtain the auth token and then reference it in another REST.SERVICES record:



GetAuthToken accepts JPATH expression parameters to identify the token and the expiration span. It then caches the token for the expiration span and uses the cached version until it expires before going back to the REST service to get a fresh token.

Services like the FEDEX Rates service accept a great many parameters.  These can be specified in the REST.SERVICES record:

A SCREEN.BUILD screen built with matching X_DATA_1 names makes it easy to map the inputs into the RS.COM area for calling the 3PL REST API for information.


The program needs to:

  • Call SUB.MT500 to run the screen
  • Overlay the variables from the screen to the REST common
  • Call REST.SERVICE
  • Parse the result with JPATH
  • Present the results to user, perhaps in the PWS Viewer using SUB.TEXT.OUTPUT.
And the result is a Manage 2000 look and feel function that gets live information from the 3PL REST service:




Tuesday, October 31, 2023

Virtual NUGM 2023 Tailoring Manage 2000 Web Portals

 NovoRoi Systems is in the middle of a month of virtual NUGM with sessions each Tuesday and Thursday from 2:00 to 3:00 pm central time.  This week is a bi-week so everyone can attend to Month End and finish their Halloween costumes.

I've done my two sessions with my co-host Linda McHenry.  The first on October 10 was on major development topics in recent service packs to Manage 2000 release 8.1.  The second on October 24 was on tailoring Manage 2000 Web Portals.

Here are a few slides about adding custom web functions to web portals menus:

Portal Menus Are Just Menus


Portal Menu Roots Are In DEFINE.PORTAL.LINKS


LJM.CM.INQS Is Now Part of CustomerPortal



The Secret to Passing the Portal Key


Adding news articles to web portal news panels:

Create a Feed in NEWS.FEEDS and Attach Articles

Create Your Own Articles in NEWS.ARTICLES

Attach the Feed to the Portal in DEFINE.PORTAL.VIEW

LOOK.AR Now Displays Feed 000018


And enabling MSO access in web functions:

Enabling MSOs Globally in Web Functions

LOOK.AR Now Has an Attachment Icon Menu

Quick Display Example

Navigation Shortcuts under ‘Web Functions’




Tuesday, August 1, 2023

Extending the browser based capabilities of Manage 2000

Manage 2000 8.1 contains 317 browser based functions compared to about 2200 PWS based functions.

A few of the browser based functions are abstract in that they can emulate a class of PWS based functions:

  • ReportBuildRpt, for instance, accepts a module and report name and then emulates that specific REPORT.BUILD report.  
  • BatchProcess accepts a PWS function name and then emulates MT420, presenting the screen as a web page and submitting the request to DJS or MASTER.AGENT.

Over half of PWS functions are MT420 functions such as, MRP.CALC.PN or SHOP.LOAD.SUM.WK or SALES.BY.ITEM. These types of batch functions can easily be published as web functions by creating the appropriate FN.BUILD record.

Given a PWS function name, BatchProcess will use the PWS SCREEN.BUILD definition referenced in the paragraph to generate a web page to gather user input. After prompting the user for input BatchProcess will submit the completed MT420 request to DJS or MASTER.AGENT.

By creating a record in FN.BUILD you are creating a web type pseudo-function, pre-configuring BatchProcess to run a specific MT420 function.  You just need to create a web type function pointing to /MT/BatchProcess/BatchProcess.aspx passing in a parameter named FunctionName with a value like SHOP.LOAD.SUM.WK, and directing it to always run in a batch queue like a Master Agent AdHoc queue.







BatchProcess will not support any possible MT420 request. In particular there is no provision for handling screen output like EOT Viewer inquiries. However, by sending the output to the spooler with an LPTR request, it will be available to the browser user in the MyPrintJobs web page.



Once the FN.BUILD record is created your web function can be added to any menu through MENU.BUILD.  You can add it to PWS menus, or just as easily to the web portal menu system.

Friday, May 19, 2023

Manage 2000 Release 8.1 Service Pack 6 Now Available

 Just in case you missed the official announcement...again!:

 "We are pleased to announce that Release 8.1 Service Pack 6 was released today, April 17th, 2023 and is now available for upgrades."

And yes, we already have 4 or 5 requests in for it.  So the glacier of Manage 2000 client releases continues to press forward.

We have had folks using the knowledgebase for a couple of years and while it is hard to imagine new classic Manage 2000 topics to add to the thousands of KB articles already created, it is pretty obvious that new features in recent service packs deserve some knowledge creation.  So, I am trying to remember the lessons of my technical writing course some years back...something about hushing the passive voice.

There is a school of thought that documentation should be done first and that development should drive off of the documentation.  What I experience is that knowledge creation drives bug fixes. 

When a developer is tasked with knowledge creation and actually has to find simple examples to put into how-tos, things that can go wrong generally do.  But that is why the patch system exists, to make Manage 2000 more resilient.

The other great excitement of the moment for me is a client doing beta testing on the web based ProductConfigurator. The ProductConfigurator was introduced in release 7.2.  The backend has been used by several clients to process custom front end request, but the standard user interface has never undergone a serious full beta test cycle with feedback to and correction by the development staff.

Driving a web experience off the same SCREEN.BUILD metadata that defines the user interface for PWS CTO.ENTRY is an ambitious undertaking.  The payoff for CTO technical folks is HUGE!  Their experience, skills, and techniques configuring models with CCVs applies equally to CTO.ENTRY and ProductConfigurator.

Lane and I have been experimenting with adding accumulator CCV types that can render running totals off of QPA.TABLE.CALC results. This supports running pricing displays as users configure an end item.

I feel we are finishing things started long ago.  And that is a good feeling.

Friday, February 24, 2023

Manage 2000 release 8.1 Service Pack 6 - sneak peek

The development cut is scheduled for Friday March 3rd.  Release Control processing will follow through the remainder of March.  And so expect GA sometime around the traditional April 15 timeframe.

Service pack 6 includes a number of important application features, more LINUX, and more Tools features.

AP.1099.AUDIT.ADDR

- a new function for 1099 year-end processing.

Retail Delivery Fee

- a new Sales Order feature to provide support for complying with new state RDF regulations.

Surcharge

- a new percent-based base extra charge code feature used in order and quote entry when an additional surcharge is needed. 

CountEntry

- a web version of cycle count COUNT.ENTRY. This is a major rewrite of the CountEntry web function first released with service pack 5.

ApproveCredit

- a web version of the CREDIT function.

Grand Totals Added to 30 Web Functions

CustArItems, CustOpenSalesOrders, VendorOpenInvoices, and many others now display grand totals for quick access to the customer's or vendor's overall position.

Fax Option on Red Hat Enterprise Linux

Conditional Support for running Manage 2000 on RHE Linux was announced with Manage 2000 release 8.1 service pack 5. However VSI-Fax features in Manage 2000 are NOT supported in that environment.

With service pack 6 the Manage 2000, faxing features like FXJ and QUICK.FAX are supported on RHE Linux via a Windows Server 2019 proxy.

Web Pseudo Functions

Wrapping web functions like LOOK.AR and LOOK.SO now accept type ahead parameters, so expressions like ‘LOOK.AR 1024’ can be used in the place of ‘CustomerPortal 1024’.

MyPrintJobs 

Now displays most recent print jobs first, and offers an option to delete the print job.

User Prompt Stack

Extended on primary key and validated prompts using the Most Recently Used list from the USER_CONTEXT file. This provides up-arrow-key access to recently used keys on many PWS screen prompts which matches the web function behavior.

REPORT.BUILD

Grand totals are now supported in the web interpreter page for REPORT.BUILD reports and in the roiHyperQueryControl, making them available on many user created web inquiries.

REST Provider API

Manage 2000 now provides 50 REST services covering:
  • Authentication and Authorization
  • Application Server Storage
  • Primary Key Selection
  • Data Validation and Formatting
  • Data Retrieval
  • Shopping Cart Operations
Manage 2000 REST Services have been tested and documented through Postman. Use the Manage 2000 function M2K.REST.SERVICES to access the API documentation and test cases in Postman. 



Thursday, December 22, 2022

Testing and Documenting Manage 2000 REST Services using Postman

Manage 2000 release 8.0 provided 15 poorly documented REST services.

Release 8.1 sp5, the current field release, provides 18 poorly document REST services.

Release 8.1 sp6 (projected release Q2 2023) will provide 50 well documented REST services.

Postman has become an invaluable development tool for both testing and documenting the Manage 2000  REST Services.

The results of Manage 2000 development using Postman can be found at: Manage 2000 REST Services

The Manage 2000 REST Services collection may be imported into Postman and used for your own testing and debugging.

Multiple environments may be setup for running examples against MANAGE-2000, xxx.MAIN, xxx.TRAIN, xxx.DEV...

Service root URL and Auth Tokens may be defined in one place in the environment and then used on all services.

The resulting documentation provides not only parameter specifications but also examples with results, so developers can clearly see the content and format of the data being passed in and the results being returned.  

The results of using Postman speak for themselves.  It is clearly a huge contributor to the usability and quality of today's and tomorrow's REST APIs.

Friday, May 6, 2022

Bearer Token Authorizations and JPATH Expressions

 Yeah, apples and oranges.  And I am not going to relate the two either.  They are just the flotsam and jetsam floating about in my mind from recent development.

Bearer token authorization comes out of the OAuth 2.0 standard, but has taken on a life of its own and become a commonly used authorization mechanism for REST services.

In the Rocket UniData UniBasic Extensions Version 8.2.2 you can find details on the Authorization setting required in setRequestHeader.  There is a whole intro page about OAuth 2.0 and U2.  

Short version:

setRequestHeader(HTTPRequest.Handle,"Authorization", "Bearer ":BEARER.TOKEN)

setRequestHeader(HTTPRequest.Handle,"Authorization", "DIRECT ":HMAC.TOKEN)

And these have to be done after the Request object is created.  There is no option in setHTTPDefault to specify the authorization type ahead of time. 

So in the REST.SERVICES table you just need to start the Auth Token prompt with "Bearer " or "DIRECT " and then the token, and REST.SERVICE will setRequestHeader and your REST.SERVICE request will be off to the races.






JSONPath or JPATH is for JSON what XPATH is for XML; a standard for declaratively specifying pieces of a JSON string to be returned.  I stumbled into the need for such a thing while working on the REST provider for NEWS.ARTICLES.  If you want to provide the capability to an article author to layout an HTML div and specify replacements from a REST service then you need some standard declarative expression to say "put THAT piece from the REST service results HERE!". And it would be nice to make the replacement expressions familiar and consistent with some larger standard.




The REST.NEWS news provider subroutine simply calls out to JPATH to extract out the pertinent data.

 *
2110* Replace dictionary references with values
 *     
     VAR.CNT = COUNT(LINE, "&")/2
     FOR VAR.IDX = 1 TO VAR.CNT
        VAR.IDX = VAR.IDX ;* Audits!
        VAR.NAME = FIELD(LINE, "&", 2, 1)
        TARGET.NAME = VAR.NAME
        TARGET.VALUE =  JPATH(udoRESTData, TARGET.NAME )





JPATH is not yet a W3C standard.  There is an IETF working group developing a standards-track JSONPath specification based on work by Stefan Goessnerwhich.  So while not set in stone there is general consensus on what a JPATH expression ought to look like and how it ought to function.

There are no JPATH features in the Rocket UDO functionality currently. However, the primitives are there for building a JPATH function.  And that is what I have started. It is available as a patch to Manage 2000 8.1 sp5.  And I would lead with "not complete yet".  But it provides the basic functionality which allows expressions in NEWS.ARTICLES like "&$.Customers[1].OutputEmailAddresses.SaleseQuoteEmail&" and since "$" is optional and array slice filter defaults we can write more concisely &Customers.OutputEmailAddresses.SalesQuoteEmail&.  

Why "not complete yet"?  Well it will do basic array slicing expressions, but a lot of work remains to implement all the possible filter expression and array slices within array slices and so forth.  




Thursday, March 31, 2022

Manage 2000 Release 8.1 Service Pack 5 Now Available

Just in case you missed the official announcement:

 "We are pleased to announce that Release 8.1 Service Pack 5 was released today, March 23th, 2022 and is now available for upgrades."

The surprise in the official announcement is the limited support for LINUX.  We still have the vsi-fax caveat, faxing out of Manage 2000 on LINUX is NOT there yet. But if you want to run Manage 2000 8.1 sp5 on rhe LINUX 8 and do not need faxing then we are ready to support you in that. 

Bud and I continue digging through the options trying to find the best path to get faxing support on LINUX, without ESKER directly supporting vfx... on rhe LINUX 8.  You'll probably hear us shout when we finally find the right path.

Customer enthusiasm for moving forward on Manage 2000 has been gratifying to see with four 8.1 sp5 upgrade orders already in the first week of GA.

So what will we imagine for service pack 6?  

My journey this last year has included the opportunity to explore what other software teams are doing with REST API development.  While 8.1 sp5 includes a nice REST API platform, it is mostly 'toolsey' stuff that you can use to build your own, but does not provide the full manufacturing application provider API that I am seeing other software teams working on.  So one of my research and development projects is imagining how we can take the REST API platform and build out an API to specific sales and manufacturing processes.

The current leg of my continuing journey has me exploring POSTMAN and using it to test and document existing REST services:

Manage 2000 JSON Services

A little quicker and easier than running JSONServices, viewing source, and reverse engineering :-)

Tuesday, February 1, 2022

Manage 2000 on LINUX Anyone?

The Manage 2000 8.1 sp5 cutoff went off on scheduler last Friday.  Now Lane has doffed his Release Control hat, and I am setting up work space for Manage 2000 8.1 service pack 6 development.

In other news... "Support for HPE's Itanium-powered Integrity servers, and HP-UX 11i v3, will come to an end on December 31, 2025".  So what does that mean for the 20 or so Manage 2000 sites running on HP?

Well, we on the Manage 2000 development team have taken notice.  Lane has Manage 2000 8.1 sp4 running on a LINUX RHE machine and the rest of us are banging away on it.  VSI-Fax is one of our last major hurdles to supporting Manage 2000 on LINUX.  Esker will not support the traditional local Vsi-Fax install on RHE 8.  That pretty much strands Manage 2000 FXJ capabilities.   I will be trying to build a bridge to the Esker 'On-Demand' web service API.  And Bud is looking into another option hosting Vsi-Fax on Windows and accessing the database from a LINUX machine. One way or another we'll get there.

RHE is the Red Hat Enterprise flavor of LINUX.  It has the chops to become the foundation for larger Manage 2000 sites going forward.  I am expecting this to be mostly Itanium sites needing to move to a supported platform by the end of 2025.  But, I will not be surprised if some larger Windows Server sites eye the LINUX option favorably, if for no other reason than 85% of ransomware attacks still target Windows systems.  

Yep, just gets interesting-er and interesting-er.

Saturday, January 1, 2022

Manage 2000 8.1 service pack 5 - sneak peek

Final touches are going into service pack 5 of Manage 2000 release 8.1. Tees are getting dotted and eyes are getting crossed.

Another year of development items are releasing in this service pack along with the year's supply of bug fixes.  There are a number of new features I am excited about, along with a couple more upgrade challenges than usual for a service pack:

  • The website has been upgraded to ASP.NET 4.8
  • The JavaScheduler has been upgraded to version 5.3.1.
This means a little extra installation work during the service pack upgrade.

The upgrade to ASP.NET 4.8 was necessary to work with the new  5.3.1 version of the JavaScheduler. The new version of the JavaScheduler is faster in our testing than the old version, and it is built with the Open Java SDK eliminating any licensing controversy.

So what other new things can you do with Manage 2000 service pack 5?

  • Access documentation and training material more easily
    • Cross browser compatible Help and Documentation make these items available from outside the EOT Viewer web view, using any browser.
    • See Also documentation access from portal menus - pertinent documentation links on local portal menus keep overviews, courses, and HowTos at your user's fingertips.
  • Text from Manage 2000 to your phone, your user's phone, your customer's phone, your sales rep's phone...
    • Receive text messages from the Manage 2000 Event Condition Action system. The text message may contain only the ECAs Title or the Title and Body based on the CONTACTS  ECA TextMsg option for Notify events
    • Administrators! Receive text messages from Master Agent notifications
    • Configure plug-able interfaces with Twilio, Nexmo, and other texting services using TEXTING.SERVICES.
    • Specify carrier gateway conversion sites in PHONE.CARRIERS.
    • Send text messages from UniBasic using SUB.TEXT.OUTPUT.
    • Send quick text messages from the command line using TXT and TID.
    • Use UserPreferences Contact Information page to maintain your cell phone carrier. This enables carrier gateway text messaging.
  • Share data through REST APIs
    • REST Consumer API
      • Configure access to RESTful service endpoints through the REST.SERVICES table.
      • Display RESTful data in ANY Manage 2000 function using Manage 2000 Software Objects. Configure in MSO.BUILD using subroutine REST.MSO which will access RESTful services and display results in Manage 2000 functions.
      • Read REST sourced news articles in Newsreader.
      • Display REST sourced news articles in Portal news panels.
      • Call RESTful services from UniBasic using new tools subroutine REST.SERVICE.
    • REST Provider API introduced in 7.3 and expanded in 8.0 and 8.1
      • Access packages of UniData database information from Power BI or Excel. Use REST endpoint /mt/jsonservices/getdata from Microsoft's GetData wizard. Specify the package contents like a UniQuery request in JSON.PACKAGE.MAINT.
        • Use the new preselect to optimize access
        • Use the new postselect to reprocess/reformat the results
      • Obtain single source validation information from Manage 2000. Use REST endpoint /mt/jsonservices/gettmtable to access TM tables as JSON arrays. Use REST endpoint /mt/jsonservices/validateitemservice to validate inventory part numbers, sales order numbers and more.
      • Call UniBasic subroutines from web browsers.  Use REST endpoint /mt/jsonservices/calludtsub to call backend UniBasic subroutines.  Call GetItemsAsJSON to pickup UniData database information in JSON format.
      • Manage 2000 JSON Services

  • Configure Manage 2000 to use the VERTEX O-Series Tax Calculation service
  • Have CUSTOMERS verify addresses using the US Postal Service Web API Interface for Zip+4. It will even add the 4 digit zip code suffix to improve delivery accuracy.
  • Cleanly install new custom development in one step using ARCHIVER REPLACE
  • Validate user input based on prompt definitions using the same validation logic used in SCREEN.IP by calling SIP.VALIDATE.
  • Collapsible Panel Memory - okay maybe this is more a bug fix than a new feature, but finally the collapsible panels work the way I want them to on my phone and my desktop, right out of the box!
  • See the resulting displays of I-Descriptors already available on a file using new phrase records I, I2,I3… built by DICT.INIT.ALPHA.  
  • Stop worrying about JAVA licensing controversies.  The new JavaScheduler is 100% OPEN JDK.
  • See inquiry function results in your browser. 
    • EOTViewer is a web client prototype of an alternative to the Greenbar Browser. A number of people have been asking for this, so I thought I'd give it a shot.  It is still develop-mental,  but if you are daring, give it a try using USER.OPTIONS screen 2 prompt 24 and 25.  Then give me some feedback (aka encouragement to take it to the next level:-).

I don't have a hard date to give you just yet for availability.  We need to support you all through year end. Then, hopefully, we will still have enough time in January for the development cutoff.  Release Management will need Feb-Mar to clean the release, create media, test installs... So stay tuned for an announcement of general availability in the March - April timeframe.

Wednesday, December 1, 2021

Application Specific Development of REST Provider Service Based Features

Adding information displays for users in Manage 2000 from REST providers is all well and good, but how can we use the Manage 2000 REST.SERVICES connections to do other more interesting and specific things?

What if the RESTful service lets us POST information back to the provider system?  

What if we want to develop integrations with FEDEX and UPS RESTful service APIs which supply not only tracking services, but Rates, Time in Transit, Dangerous Goods, Global Trade Documents and more?

Back in March I wrote about manually coding REST HTTP Post method calls in UniBasic. But it is not necessary to drop down to this level. REST.MSO and REST.NEWS rely on a new Tools subroutine named  REST.SERVICE to carry out the actual conversation with the REST provider system. 

Application code can declare the parameters for the REST exchange and then delegate the implementation to REST.SERVICE:

     $INCLUDE COM.RS FROM COPY.TOOLS.BP
     $INCLUDE TM_328 FROM TOOLS.LAYOUTS
     ...
     READ TM_328.REC FROM TM, '328*':SERVICE.ID
     ...
     RS.Endpoint               = TM_328.Endpoint
     RS.Protocol               = TM_328.Protocol
     RS.Security_Version       = TM_328.Security_Ver
     RS.HTTP_Version           = TM_328.Http_Version
     RS.Auth_Token             = TM_328.Auth_Token
     RS.Method                 = TM_328.Method
     RS.Content_Type           = TM_328.Content_Type
     RS.Parameter_Names        = TM_328.Parameter_Names
     RS.Parameter_Values       = TM_328.Param_Values
     RS.Parameter_Types        = TM_328.Param_Types
     RS.Body                   = TM_328.Body
     RS.Timeout                = TM_328.Timeout
 *
     CALL REST.SERVICE
     IF RS.Status # "" THEN CALL SCREEN.MSG("RS.Status - ":RS.Status<1,1>:" ] ":RS.Status<1,2>:";VT;#M260618")
     IF RS.Headers # "" THEN CALL SCREEN.MSG("RS.Headers - ":RS.Headers:";VT;#M260619")
     IF RS.Data # "" THEN
        SWAP @AM WITH @VM IN RS.Data        
        RS.Data = CONVERT(FILTER.CHARS, "", RS.Data)
        CALL SCREEN.MSG("RS.Data - ":RS.Data:";VT;#M260620")
     END 
     IF RS.Error # "" THEN  CALL SCREEN.MSG("RS.Error - ":RS.Error:";VT;#M260621")
     RETURN

Parameters may be loaded from the REST.SERVICES table as in this example or created on the fly, or some combination of the two. You might, for instance, want to post a bunch of FORM variables based on a work order or sales order into some RESTful provider endpoint defined in REST.SERVICES, and perhaps receive back some confirmation number or message.

REST services may accept inputs on the querystring or as part of the URL route path when using an HTTP GET method, or the service may accept inputs as form variables or as JSON or XML strings in the HTML Body element when using an HTTP POST method.  The REST.SERVICE subroutine supports all of these approaches to REST parameter passing.

Parameters are placed in the appropriate property in a named common block, then your program executes CALL REST.SERVICE, and then interrogates the result values which are also stored as properties in the common block. If the call is successful then RS.Data will contain the resulting JSON string.  All of the UniBasic Extensions' HTTP plumbing is taken care of by REST.SERVICE.

As always tools subroutine documentation is available from HELP:


     HELP REST.SERVICE

Monday, November 1, 2021

Templated Rendering of REST Provider's JSON Responses in Manage 2000

REST.MSO CustomFormatter subroutines are great for Unibasic programmers who don't mind familiarizing themselves with UDO JSON parsing and building text and HTML displays.

But what can you do without getting into programming?

There is another REST JSON formatter named REST.NEWS. Its purpose is to support writing NEWS.ARTICLES with content from REST providers.  It works similarly to the MCD_DATA.NEWS AR/SO dashboard code behind subroutine in that it lets you layout a template in the news article body with &var& type replacement variables. 


Use the new News Source REST in place of CUSTOM to save yourself some typing.

REST.NEWS will run the REST service specified and then look for expressions in the body like &propertyname& and replace them with the corresponding value from the web service JSON response. It will also check for expressions matching variables sent to the web service like CITY in this example.

So we can hit the same REST provider as our previous MSO and see the results laid out nicely, all without doing any actual programming:


There is an important distinction between MSOs and NEWS.ARTICLES in their scope.

At release 8.1 sp5 MSOs can be configured to be available in any PWS or web function throughout Manage 2000. 

The scope of news articles is a little different:

In terms of Manage 2000 functions, you only see them in NewsReader and the News panels of the 16 or so web functions in the ROIPortals directory. 

However, news articles are NOT limited to viewing in Manage 2000 functions. Manage 2000 news feeds can be viewed from any RSS client. This includes Outlook, Sharepoint, Lotus, the built-in IE newsreader, browser add-ons like Sage for FireFox and SlickRSS for Chrome, standalone readers like RSSOwl, and others.

There is also an interesting reciprocity between the two: MSOs can be used as the source for NEWS.ARTICLES, and since Newsreader is a Manage 2000 function an MSO can wrapper a display of articles in Newsreader.

In this sense the news article scope is actually wider than the MSO scope.  One could even use the auto-start feature of MSOs to fire off a Newsreader display based upon the user entering any particular PWS function or prompt.