Examples: Simple Table / Advanced Table / Forms / Calendar / Mapping / Graphs
    Examples:


Well, a slightly odd name that started off as a joke and stuck.

Snug IT is me, Jeremy Branscombe, and I've been developing and programming in Business Information Server (BIS) for more years than I care to remember.

I've also spent a lot of time programming in ASP, C# and .NET in industries as diverse as Defence, Banking and Manufacturing but I've always come back to BIS as a favourite.

Recent years have been dominated by The Web and I've specialised in CoolICE, the Web development extension to BIS.

However, CoolICE is badly in need of a makeover to make it fit for the future. In this website I seek to explain why that is the case and explain how you can re-structure development in BIS/CoolICE, with my help, to make it a really great environment for web development.

Microsoft .NET can seem a daunting prospect for the uninitiated but it doesn't have to be.

This approach allows for maximium benefit with minimal .NET know how.

BIS.NET is the perfect fusion of technologies to produce stable, scalleable applications.


I set up Snug IT a few years ago as a BIS Consultancy company and whilst it's just me, if I need additional resources or expertise I have a number of associates to call on. That said I'm not in the market for large scale developments, experience over the years suggests that people have their own way of doing things and this is all about enabling people to do it better.

What I want to do is promote a flexible, alternative, approach to conventional CoolICE development. This isn't about dictating how you should work it's about promoting a better framework for future development. I've been involved in the development of two rapid application development tool sets for BIS, Mapper Work Bench in the 90's and iceStudio in the 2000's. Both had their good points but, inevitably, restricted the developer to a set approach. When I came to update iceStudio in 2012 I realised that things had moved on, it was designed to assist web development in CoolICE in the ASP era and the web was a very different place from what it had been ten years before. HTML5 made a lot of significant changes and modern web pages make extensive use of JavaScript libraries to provide dynamic functionality.

Rather than provide a RAD (Rapid Application Development) or IDE (Integrated Development Environment) I realised that what was needed was to enable developers to use the tools that were already there and that they were familiar with. I set out to provide a set of interfaces that would enable developers, using modern tool sets, to interact with BIS in a familiar fashion. My aim was:


The Snug Interface sits between a standard Microsoft .NET web development environment (Visual Studio and IIS) and the conventional CoolICE gateway. It provides a set of simple APIs that allow any competent .NET developer to access BIS data in a manner with which they are familiar.

The interface can return data in the form of a .NET DataTable, DataSet or a variety of JSON/JavaScript formats. It will also return conventional CoolICE pages for compatability with existing applications. This allows a .NET developer to start being productive immediately and also allows the limited amount of BIS Script writers to spend their time more effecianetly. Eveyone is doing what they are good at which makes for a happier and more productive team.

Because the user interface is kept distinct from the data it is easier, should it become necessary, to migrate the data to an alternative without having to abandon the investment in the user interface and start again.

BIS/CoolICE Limitations

CoolICE has served us well for over 2 decades but the limitations of the approach are starting to show.

The underlying infrastructure for CoolICE in Windows is Active Server Pages (ASP) which has been around for over 20 years. Microsoft will support it for a while yet, so there is no immediate need for concern on that score, but it is a legacy framework that hasn't been developed since it was replaced by ASP.NET and the last major release was version 3 in the year 2000

Current CoolICE configuration

Is that a problem? Well, yes it is! If a company wants to invest in a big new infrastructure project and you suggest you are going to do it with an ASP backbone your not going to be very credible.

Microsofts flagship development frameworks, ASPX and MVC are based on .NET and .NET is "managed" code. ASP is not "managed code" which means it is handled by the operating system in a fundamentally different way. This makes interfacing with it awkward and integration with it all but impossible.

More importantly the design and development platforms for web applications have moved on, as has HTML. Trying to write code in a modern IDE and maintain it in CoolICE is increasingly impracticle and the alternative, writing the web pages in ASP, is no longer a viable option.

Additionally modern web pages rely heavily on javascript for dynamic effects and validation etc. Writing HTML, Javascript and BIS Script in the same rid is very messy and therfore prone to errors. Mixing scripts is not good practise as Microsoft realised with ASP, their replacement ASPX used seperate pages for C# code and HTML.

The three pillars of website construction are CSS, JavaScript and HTML and, so far as possible, you need to keep these scripts seperate and distinct and, preferably, not in the Unisys Graphical Interface!

The case for an alternative approach is compeling.

Design

First off let me say that I'm not a Web Designer. Never will be. I've learnt over the years that my colour sense, apart from anything else, sucks. I couldn't choose a shirt to match my trousers (as my wife often remarks).

So what I've learnt is if I want something designed well, I get a designer to do it. Like going to a doctor for medicine or a plumber for plumbing. I don't then specify which tool set they have to use so, if I want a modern web design, I don't tell my designer that they have to use MapConKiss (old text based Mapper design tool). It was good in it's day but its day has long passed.

To design a modern website you use modern design tools and then implement that design and this is where the old dynamic in CoolICE lets us down since there is no good, easy way to maintain HTML in CoolICE. There are approaches you can use to alleiviate the problem but not to erradicate it.

The thing is, if you want to design something that takes advantage of all the web can offer you have to think big, out of the box, blue sky, broad horizon etc Once you have the concept you might have to pare it back to fit budget, timelines or technology but that's not where you start. You don't start with an old Graphical Interface and web enable it, that's the tail wagging the dog.

Design what you want first and take it from there.

Development

I chose to use Visual Studio for development but other IDE's are available. The same principle applies if you are using a linux OS with Apache web server, you still want to use an integrated design tool. Recent updates to VS2022 have made it easier to develop and deploy to Apache. Note

BIS has made many improvements over the years and the BIS developer workshop is now a very handy tool but it cannot compare to the comprehensive facilities available in Visual Studio for intelisense, pattern matching, autocomplete in HTML and JavaScript, syntax checking etc etc This comes as no surprise, the Unisys team that developed the workshop are very capable but they cannot compete in terms of resources with Microsoft. Visual Studio has had hundreds of man years of development time and Microsoft will continue to invest heavily in keeping it up to date and enhancing it. So use it!

The interface comes in two forms, you can use it on a work station with BIS installed for individual development or you can deploy it in its networked form to allow development teams to coordinate.

Microsofts Windows Communication Foundation (WCF) Framework allows a whole .NET team to develop, execute and debug code on their individual workstations whilst using a single BIS instance. This keeps down the cost of the development team since multiple BIS licenses are expensive and means that the BIS developers don't have to update multiple sites when they have updates to install.

Deployment

One of the issues with BIS is the difficulty in packaging a software release. Identifying each item and maintaining a full history of each element is problematical, maintaining multiple code streams (Live, Development, Prototype etc) is not easy whereas the many code libraries integrated with Visual Studio make this process very much more convenient. Microsofts Team Foundation Server is comprehensive but for those with shallower pockets a number of very good, free, offerings are available. I use SVN server. Being able to cleanly identify each and every component of a release is a vital element in a comprehensive quality control process (Development-> module testing -> system testing -> user acceptance testing -> Release).

Most publically accessible websites are deployed either in cloud servers or within a corporate protected network (DMZ). This can be achieved with BIS by using the fast and efficient remote site capability but that necessitates having at least two BIS sites, one as the front end and one as the application server. This pushes up the cost of implementation dramatically and unduly complicates the overall system structure.

Using the capability of the Windows Communication Foundation (WCF) framework from Microsoft the website can be deployed remotely without the necessity for multiple BIS Sites.

The Snug Client that implements the remote connection to the Snug Host is completely compatable with the Snug interface. Websites can be developed locally and deployed remotely without any code changes whatsoever.

This also allows for standard website deployment to cloud servers. The server can be an "off the shelf" standard windows server, nothing else required in the way of SQL or additional software so minimal time required, minimal investment and minimal risk. The WCF pipeline can also be encrypted for security.

Resources

BIS is sadly, for all its excellent qualitites, not a mainstream environment. It follows that the number of professionals deeply familiar with its minutae are correspondingly few and, as with all limited resources, they are often somewhat more expensive. It's simple economics and the law of supply and demand.

This has several undesirable side effects related to cost of development, system maintainability and general development timescales. What is needed is to be able to spread that development load across a greater number of multi-skilled professionals and that is precisly what this approach allows the development manager to do. Using Visual Studio creates a clear and distinct division between the BIS Professional providing data and the web design, development team.

Business requirements are always subject to change and sudden emergencies to cope with new demands and evolving situations. This inevitably leads to massive changes in workload for the IT community. Being able to ramp up resources quickly to respond to demand is essential but difficult in a conventional BIS implementation. There simply are not enough BIS professionals to go round. Being in a position to use existing .NET/web programmers and incorporate quickly and productively into existing teams neatly gets round that limitation.

Databases

All applications feed on data and historically, one of BIS's strengths has been access to data from many databases. But times are changing, there has been a move away from traditional relational databases and many smaller apps have their own databases with their own API's. The biggest drivers for this are cost, speed and resources, modern Microsoft SQL has a big footprint and is hungry for server resource.

This has lead to a proliferation of databases that it is simply impossible for BIS to keep up with however, many of these databases come with APIs that can be used from .NET so using .NET as the base layer to comunicate with BIS opens up a whole new range of options for data access.

Migration

Now, I like BIS, its been my favourite environment for many years but any IT director has to ask the big "What if?" questions.

BIS is a unique programming environment but that has proved a double edged thing, because BIS is unlike anything else. It has proved particularly difficult and expensive to migrate away from, so much so that it has actually inhibited companies from further investment in BIS applications. If you are faced with a worst case scenario of re-writting applications from scratch because migration is so hard you may not be able to justify further BIS development.

Using .NET offers a viable, practicle and cost effective solution to this dilema. Most of the investment in a .NET web application is in designing and developing the user interface, doing this in .NET, with proper abstraction of data access, means that a large percentage of the investment is reusable. You can migrate to your database of choice, pick from the miriad of databases accesible from .NET. I'm not going to try to pursuade you that it will be a simple task! It's not going to be quick, trivial or easy but it is a viable option, much more so than with conventional CoolICE development.

With that safeguard in place you are free to continue to develop cost effective applications in BIS.

Future Proofing
Future proofing investment has many facets, some of them have been covered in the "Migration" topic above but there are others to consider.
Technical Note

Business Information Server

This site is running on a "vanilla" install of BIS 13.1 loaded onto a Windows 2012 R2 Standard edition virtual server with 1Gb of RAM and 26Gb disk. The gateway configuration is the standard "ICE" gateway installed at set up. The Snug interface invokes CISERVERLib.dll for access. This dll is provided by Unisys and installed in the GAC during the application installation.

Security

The gateway used for access to BIS in these examples is "ICE" although I have removed the "ICE" virtual directory reference from IIS. The Snug interface references the gateway internally so the virtual directory is not used and may be deleted as a security risk. This means that whilst I can freely utilise a unsecured gateway on the server it is not open in any way to the public. The website can be used entirely under HTTPS, as you can see and as you would expect, and if you are using the Snug Client / Host configuration the interaction can be encrypted using standard WCF configuration. BIS is inherently resistant to internet based attacks and this method of encapsulating access to the BIS site further increases security.

Performance

Performance is a very difficult thing to be definitive about due to differences in server, memory, caching and configuration. My own bench mark tests indicate that access to BIS data using the Snug Interface is certainly comparable to Microsoft SQL server and sometimes better. BIS has a relatively small footprint and whilst this web server is a minimal configuration virtual server it still runs BIS well but would struggle with SQL server.

.NET

This is a .NET 4.6 compile using an ASPX framework rather than MVC (Whilst everything functions with MVC I still prefer ASPX). The pages are developed using almost exclusively standard HTML rather than ASP:controls or Razor pages. In order to make this approach as accesible and as portable as possible I have adopted a minimal amount of ASPX and C# coding. The AJAX call backs are handled by both an ASMX web service and a .svc WCF RESTfull service.

Endorsements

I've done a vast amount of work with BIS in many different ways but these are a few recomendations from people who are using the BIS.NET approach.

Thom Sanderson - IT manager at New York City
In combination with SNUG, we came up with a solution that allows .NET to communicate via the existing CoolICE object as-is, to get data in and out of MAPPER at a rate that actually exceeds similar transactions to/from MS-SQL and that allows our MAPPER developers to do what they do best: write MAPPER code that encapsulates business needs and that allows .NET coders to do what they do best: write slick front-ends with all the widgets and gadgets that modern users love and upon which they now rely.

Download this document for a more detailed explanation of the project. New BIS Architecture

Anthony Carvelli - Commissioner for finance at the County of Oneida, New York.
We’ve been using SNUG Information Technology since 2017, and have to say they have changed the way we do business. Our quandary was to find a way to integrate modern web based applications into our current BIS environment. SNUG IT did just that! With just one new application we were able to provide taxpayers with an online payment option offering convenience and ease of use, while saving time and money. If you’re looking for someone you can trust to offer cost effective solutions, and deliver on-time & within budget give Jeremy a call. You won’t be disappointed!

Jim Mack - IT Director at Mohawk Valley Water Authority
I’ve worked with Jeremy for nearly 20 years now and he’s the most versatile systems developer I’ve ever known. We started with CoolICE back then but when we needed to develop our own public website for customers we needed something more. BIS.NET was the answer we were looking for and we haven’t looked back. I’ve recently taken on a web developer to help with the website and with Jeremy’s guidance she now does all the day to day updates without knowing or touching Mapper at all.

I’ve had a lot of pressure to move away from BIS over the years but Snug ITs approach has given me compelling arguments to stay.
Proposition

The key behind this approach is not that you have to do things my way. What you want to do and how you do it is your business. What you get from me is an interface that enables you to use .NET and consultancy and training to get you up and running.

I am not looking to tie anyone up with annual support agreements although if you want one I am happy to supply one.

My proposition is for 5 days consultancy and training, preferably on-site, which I find is much more effective.

The cost of BIS.NET including the initial training and consultancy is just £5000 plus travel expenses and for that you get the interfaces complete with source code (subject to non-disclosure agreeement) and you will be up and running. Contact me for more details.

Contact

You can contact me with my email address Jeremy.Branscombe@SnugIT.eu (.eu as a proud European despite being British).

Please let me know if you have any questions about the website or if you would like to see anything else here.

Most of all, obviously, I would like to know if you are interested in using this approach and feel you could benefit from my expertise to help.

Thanks for visiting my website.

Please call again.

Example 1 - Simple Table
One of the most common requirements in web applications is being able to quickly, reliably and flexibly list information. There are many JavaScript libraries that help you to do this but I use DataTables because it's comprehensive and free. This is a very simple (zero configuration) list based on the contents of 1f0. The data is retrieved using AJAX when the tab is first clicked.

DataTables adds "free" functionality for searching the data, paging and sorting. This is where the benefit of using existing libraries like jQuery and DataTables really pays off in speeding up development.

ItemQuantityTypeGenderSizeColorUnit Cost

The important thing with this approach is how simple the interaction with BIS is. This web page uses jQuery to dynamically call the server for the data when the "Simple Table" tab is clicked. The service then opens a conection to BIS using the code.
  var BIS = new ICE();
  return BIS.ICEJsonService("SnugIT","simpleTable", "").ToString();
        
This code first initiates a connection to BIS/ICE and then runs the category "SnugIT" and service "simpleTable". The BIS service is also simple and effecient.
  .Simple Table                                 
  *===================================================
  @0001:() .                                          
  @     Rsl,0,f,1 .                                   
  @     Ln+,-0,1,2 .                                  
  @     Wrl,-0,2,Y 2-80 .,'Content-Type: BIS/report' .
  @     Wrl,-0,3,Y 2-80 *,'========================' .
  @     Return .                                      
        

Because we are using completely standard CoolICE here we need to add an asterisk line to preserve the header lines in the data. Other than that there is no intervention required. The interface handles the conversion of the BIS data into JSON which can be easily processed by javascript on the web page. The conversion process is highly optimised and can process large volumes of data in real time.

The key thing to recognise is that the ICE service is only dealing with data, which is what BIS is good at, and is easily programmed by anyone familiar with BIS script. Likewise the handling of the data in .NET is very simple c# code and the javascript on the web page is similarly isolated from the other environments. Everything is in its place and familiar to those who job it is to write and maintain the code.

Thanks to the guys at DataTables for this functional and versatile library.

Example 2 - Advanced Table
Order Id Required Date Shipped Date Ship Country Unit Price Quantity Discount %

Here is a somewhat more configured table view. The data is served from BIS as part of the web page which means one less visit to the server to collect the data resulting in faster service to the user and lower impact on the server. If you "View source" on this web page and scroll to the bottom you will see where the data has been inserted into the web page. The c# code for this is refreshingly simple
  var BIS = new ICE();
  string json = "data=" + BIS.ICEJsonService("SnugIT", "advancedTable", "").ToString();
  ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "dataload", json, true);
        

The BIS Script is just returning a rid, no maniplulation involved to make it into an HTML table, the conversion to JSON is handled by the Snug Interface.

This table provides a much more formated output complete with export to Excel and the facility for the user to show and hide data columns. The export to Excel preserves the formatting of the data which makes it much easier for users to process. There is also the ability to search for ranges of data and search and sort by date.

The intention here is to demonstrate how modern functionality can be applied to a CoolICE application. The data retrieval in this case is trivial, all the development effort is in producing a dynamic, functionaly rich user interface. I'm using jQuery but any JavaScript library could be used and anyone familiar with JavaScript can develop the page with no knowledge of BIS, the origin of the data is transparent to the developer.

Example 3 - Simple form
jQuery is probably the most propular javascript library, it's used extensively and offers many usefull features to enhance portability and speed up development.
This highlights some simple utilities (widgets) using jQuery and some of the more recent HTML5 field types (these work better if you don't use internet explorer).
  • The Date of Birth field has a date picker
  • The city field has an autocomplete after you type two characters
  • Performance is a range type
  • Years service is a number type
  • On submit the First and Last names are required and the date of birth must be valid and in the past



Click in here for date picker



Address


Enter two characters
Zip Code

Details






You are free to program any form of validation that you choose. It's one of those areas where there is a lot of variation and whilst ASPX or MVC have a number of approaches I'm not really a fan of any of them. For portability and readability this Form is in HTML rather than ASP or Razor and for that reason I've chosen to validate using an AJAX post with a json response. All the validation is done in BIS using the conventional Category and Service (which identifies a rid with a 001 label) but instead of returning HTML it returns a table of errors something like this

  *Key                  Value                                                       
  *====================.==========================================================  
  |firstname           |First Name must be entered                                  
  |lastname            |Last Name must be entered                                   
  |dob                 |This date must be in MMDDYYYY format                              
  

which is converted to json in the interface and passed back to the page to be handled by JavaScript. Conventionally in ASPX you would handle this in the code behind page but this is a single page website and I didn't want to rebuild the page so a lighter touch using an AJAX post was a better solution in this case.

Example 4 - Calendar

The appointments for this calendar are populated from BIS when you click on the calendar tab. Appointments are color coded depending on who they are assigned to and the details can be seen if you mouse over an appointment. You can reschedule appointments by dragging and dropping an appointment onto a new day in the Month view or a new time in the day view and you can change the duration by dragging from the bottom of an appointment.

Everytime you update an appointment BIS is dynamically updated and table below will display the change.

Id Name Appointment Start Date and Time End Date and Time Last Updated

Again, the amount of BIS code used to support all of this interaction is astonishingly simple. The code below is used to provide the data for the calendar, the table and to update the appointments RID. All the "clever" stuff is done in the browser using JavaScript and the excellent "FullCalendar" library.

  .Events                                         Snug Information Technology          
  *                                                                                    
  *                                                                                    
  *====================================================================================
  @001:() .                                                                            
  @    Rnm -8 .                                                                        
  @    Rsr,-8 001 .                                                                    
  @    If <service> Eq 'eventupdate',(100) . ; .                                       
  @.                                                                                   
  @010:Rsl,ecab$,i,7 .                                                                 
  @    Wrl,-0,2,Y 2-80 .,'Content-Type: BIS/report' .                                  
  @    Ln+,-0,2,1,,'*========================' .                                       
  @    Return .                                                                        
                                                                                     
  @100:Lok,ecab$,i,7 .                                                                 
  @    Fnd,ecab$,i,7,,199 '' 'id' 	,<id> ,<ln>i6 .                                     
  @    Wrl,-0,<ln> 'start','end','updated' |,<start>(1-16),<end>(1-16),date2$'@'time$ .
  @    Ulk .                                                                           
  @    Gto 010 .                                                                       
                                                                                     
  @199:Brk .                                                                           
  Error                                                                                
  @    Brk Return .                                                                    
      

Thanks to the guys at FullCalendar for this library. FullCaLendar is a richly functional library with many options.

Example 5 - Mapping
There are many mapping options around, Google, Bing and Esri to name 3. Which one you use is up to you, they all have javascript APIs which are readily accesible with a little JavaScript expertise. I like google because it's easy to use, economical and the UI is already familiar to many users.
This is a google map centered on Central Park, New York. Because I don't want people picking places world wide I have removed the pan option and limited the zoom. You can pick a position by right clicking on the map and selecting "Save". When you add a new marker to the map the location of that marker is looked up using the Google geocoding service and the location and address is saved to BIS and the list of map markers is updated. This is a trivial example but it shows how easy it is to combine great features provided by other entities and integrate them with BIS applications.
Latitude Longitude Date/Time Added Nearest Address

Google Loading
Example 6 - Graphs and Charts

BIS and CoolICE have had a number of very comprehensive graphing tools over the years but they all have one common limitation - they all produce graph images on the server that are then displayed on the browser to be viewed. Very nice they are too but the problem is that's all they are, static images and there is nothing the user can do with them except possibly click on them for more information.

There is so much more that you can do on a browser these days!

I spent some time trying to come up with a useful anonymous dataset and eventually decided to base the graph on my own heart rate recording from Fitbit. Click the button below to generate the graph. Fitbit logs more than 10,000 heart rate readings per day so the graph might take a few seconds to load. This is a simple example but you can zoom on to sections by clicking at the top left hand corner of an area and dragging to the bottom right and releasing. This ability to dynamically zoom on interesting data without having to go back and request another graph with different parameters makes analysis much faster and more flexible.


Thanks to the guys at jqPlot for this library which has many more interesting charts and a miriad of plot options.

Collecting Data
Jeremy Branscombe
About Me
Hi, I'm Jeremy Branscombe.

I graduated in Engineering at Liverpool University and started work in the 80's installing and implementing MRP systems and financials.

Whilst working with Unisys (Sperry) implimenting UNIS I got started on plugging some of the gaps using Mapper and I've been using it ever since.

We set up Independent Computer Systems in the mid 90's to develop and promote Mapper solutions and grew the business into a Microsoft solution provider using .NET in the 2000's.

ICS was bought in 2008 and I rejoined corporate IT but didn't find it suited me so I went solo in 2014. I lived in Switzerland for 4 years before moving to southern Portugal where I now live with my new wife in rural idyle surounded by orange groves.

I've found my extensive experience in .NET combined with many years of BIS development has put me into an ideal position to promote a fusion of the two, taking all the great features of BIS into a contemporary architecture.