Wednesday, December 14, 2016

Manage 2000 Release 8.1 GA

Manage 2000 release 8.1 is now officially available for ordering and shipment.

Allan started shipping out copies  Dec 09, 2016

Doug and I performed live on WebEx earlier in the week.  Check at the EpicWeb site to stream down our mellifluous voices as we banter about and demo some of the cool new features built in to the 8.1 release:
  • Integrated PDF Output 
  • Geographic Mapping 
  • Photo Support 
  • Web Attachment and Export Changes 
  • On-site Newsreader 
  • Infrastructure Updates 
  • Many Application Enhancements
Get excited!

Upgrade!

Monday, October 31, 2016

The Value of Coming Together

The 2016 NovoRoiSystem’s User Group Meeting was another great success drawing 47 attendees from 29 companies. Customers left with lots of things to think about, and so did those of us on the Manage 2000 development team.

By the time I got back into the office I had a list of 17 new ideas to consider for future Manage 2000 development.  One of them came directly out of customer questions about the new mapping capabilities in release 8.1; “Hey what about truck scheduling maps?”  

The timing couldn’t have been better. So the GA release will include a new Manage 2000 web mapping function for the TSCH module: TruckRoute


This new web function displays maps of truck scheduling routes as defined in ROUTE.MASTER.MAINT. Each route stop is marked with a numbered pushpin. 



Clicking on a marker brings up an information window with the Route Nbr, customer or facility name, phone, and address. 


Each stop except the last displays a link for Directions to next stop. Clicking on the Directions to next stop link will provide driving turn by turn directions and draw the route on the map.

Thank you NovoRoiSystems for creating the event that draws us all together and allows our ideas to mix and germinate and blossom into creative new software and solutions.

Wednesday, October 12, 2016

NUGM 2016

It has been a great conference here in Minneapolis this week;
 informative sessions

great meals, 


, and ghost stories (or not) around the fire pit in the brisk autumn air.



It really has felt like the best one yet, with warm smiles and hand shakes and embraces reminding each other of the journey we have been on together through the decades.

For Joanne and Anne the examples I used in the sessions are waiting for you in the Archiver Packages section on the right.


Monday, March 28, 2016

Manage 2000 8.1 Crystallizing

As Manage 2000 evolves and adapts to the changing world around it there are moments when you can watch the snow flakes form.  One place the formation of these snow flakes becomes visible is the moment we change a string name for some relationship into a validated entry.

For instance since the 7.1 release the WEB.CONSTANTS screen has had a simple unvalidated, mostly unedited string entry indicating where the web server can be found.


Starting in Manage 2000 8.1 this entry will be validated to the WEB.SITES table, which in-turn will validate the actual IP Address, or Domain Name to the WEB.SERVER.DOMAINS table.



This will formalize the relationship between the Manage 2000 Unidata computer system and one or more Manage 2000 web server computer systems and those web server's IIS applications.

Creating this formal snow flake means we will be able to validate and cross reference in WEB.CONSTANTS, and SYS.USERS, and CNT.SYSTEM.REFS, and CONTACTS.




It also means we will be able to create a VIRTUAL.DIRECTORIES table with validation and cross referencing to define how one might reach a specific UNC document store through a virtual directory.



And what may not be obvious about these snow flakes is that they can clump together to produce a rich attachment configuration snowball supporting many different attachment UNC document stores that can be accessed by virtual directory path and made available from any browser, say from the Attachments menu on Manage 2000 Portal pages.

And how better to fill up these UNC document stores than automatically generating PDF documents out Manage 2000 8.1 MASTER.AGENT tasks running print processing to a PDF queue. :-)

Monday, January 4, 2016

Adding roiTextbox cross referencing and validations inside GridView inside UpdatePanel

GridView provides a nice web standard interface for scrolled set entry.  However the large overhead of full page postbacks in Manage 2000 web functions creates a poor user experience. To mitigate this you can place the GridView inside an UpdatePanel. Everything goes along great with bound columns in GridView.  But trouble sets in when you try to get nice data entry validation and cross referencing by converting columns to templated columns and using the roiTextbox for editing mode.

The problem has to do with how the UpdatePanel blends the partial postback updates into the browser DOM.  HTML input controls get created for all of the roiTextbox controls, but UpdatePanel does not understand about the javascript event wiring that creates all the nice data entry features of the roiTextbox.

Fortunately you can ask the PageRequestManager to call your own routine when it is finished handling the partial postback request.



Then inside your function you can add the wiring for the 4 event handlers that roiMetaData emits for each roiTextbox.



You can get a little more elegant by making a list of textboxes to wire up.  Just remember the jQuery expressions in M2k web functions are $j and the events need to be registered through prototype $.observe.  So you get a subtle mix of jquery and prototype calls.






In order to make this work you need to fix the id assignment of the roiTextbox controls in the EditTemplate markup by setting the ClientIDMode attribute to "Static".



Since only one line is in edit mode at any given time there is not a conflict between the id assignments on multiple rows, like there is in the ItemTemplate.

There is one more hurdle to leveraging roiEditBox metadata based behaviors in GridViews inside of UpdatePanels.  Controls generated to implement the nice behaviors like roiCrossReference expect to find their target webcontrol on each postback and clientside in javascript land.  When none of the GridView lines are in edit mode then the roiTextboxes do not get created and the MetaDataControlExtender or an roiCrossReference control or ancestor logic in roiPopUp runs into the ditch.

To solve this final obstacle create a panel that is hidden and that is only visible when none of the gridview lines are in edit mode.  Then put a duplicate of each input roiTextbox on the panel so that it magically appears in a hidden panel when it does not appear in an editing template.

Thursday, May 28, 2015

Binding Entries Back From GridView to Dataset

The Manage 2000 DAC architecture relies on strongly typed datasets to manage the movement of business object data between UniData and ASP.NET webcontrols.  The table adapters generated for the datasets handle the binding of data from dataset to the webcontrols very nicely.  There are not, however, any generated methods for Update, Change or Delete operations.

It is possible without an awful lot of code to handle the gridview row events and utilizing the strongly typed dataset methods move the data back into the dataset from the UI.

Here is the SoWebShipments page converted to use GridView controls in place of UltraWebGrid controls:


To move the data back into the dataset we just need to handle the RowUpdating event to move the data and then handle the RowUpdated event to tell the grid the we handled the problem with the missing Update Method on our table adapter. In order to support deleting rows we do the same exercise in the RowDeleted and RowDeleting events handlers.



Monday, April 6, 2015

"And the beat goes on. And the beat goes on."

Yes Ma, I'm still here tinkerin with M2k.

One of the major tasks we are undertaking in developing the next release is to go through all the web pages that have grids on them and do a proper house cleaning.  Its like when you buy new appliances for the kitchen, you're gonna want scrub a little bit behind where the fridge and stove have been settled for the last decade or two. And you are probably going to find things that you wish you hadn't.  But a thorough cleaning every 10 or 20 years brings you closer to God.

So I have been becoming one with the Microsoft GridView component. To begin with I thought it was simple and a bit clumsy with the whole Templated Column approach for links and whatnot.  And there are times when the object model gets annoying as you try to get after some behavior programmatically.  But I have found it to be remarkably pliable.

One of the astonishing things I found was the ability to databind in the aspx file to a group of children of the current row.  Manage 2000 has always used strongly typed datasets in order to get nice design time support in Visual Studio.  But this also means that strongly typed datarows know how to get their children.

The unfortunate part is some rather scary looking casting in order to access the strongly typed datasets properties and methods.  And also the ever annoying IsxxxNull checks that are a must for optional fields.

But the amazing part is adding a templated column in the aspx and having a child set of sub-values or sub-sub-values unfurl before the user:


So the Planned Components are being bound directly in the aspx file from databinding references:

DataSource="<%# DirectCast(DirectCast(Container.DataItem, System.Data.DataRowView).Row, ROISystems.Components.dstItemOrderListing.MFGORDERRES_Order_DetailRow).GetMFGORDERRES_Order_ComponentsRows %>"