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.
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 configurationIs 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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
SecurityThe 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.
PerformancePerformance 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.
.NETThis 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.
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 CityThe 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.
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.
Item | Quantity | Type | Gender | Size | Color | Unit Cost |
---|
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.
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.
Latitude | Longitude | Date/Time Added | Nearest Address |
---|
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.