WebCenter 14.2.1 release notes

Additions from 14.2.0 to 14.2.1

Application

  • Navigation buttons can now be added to the top of the application.
  • Contact Messages are now created for some of the questions on the personal info page that are not displayed in Enterprise.

WebCenter

  • Updated Telerik controls to the latest version.
  • The "My Settings" and "Logout" buttons have been moved to the top of the pages.
  • The timecard approval page will now save which rows the user has expanded.
  • Email notifications that had been going out to servicereps are now alerts in Enterprise.
  • There is a new reapply washed status and role in webcenter for companies that need their employees to reapply to the application.

Bug Fixes from 14.2.0 to 14.2.1

Application

  • Fixed validation and default dates for date text boxes on the application.
  • Shift availability is now saved to the database.

WebCenter

  • Fix a bug with generating pdf files for W2's.
Fix a bug when viewing timecards by a particular contact id. It will now only pull timecards for the week that was selected on the calendar.

WebCenter 14.2.0 release notes

Additions from 12.8.1 to 14.2.0 (Version number now inline with database version)

WebCenter

  • Add new user config to enable and disable the order candidate reviews.
  • Change order candidate reviews to not show candidates with a ‘WCandidate’ status.

Bug Fixes from 12.8.1 to 14.2.0

Application

  • Updated the education, work experience and skills pages to work with the new 14r table schemas.

WebCenter

  • Updated some of the vendor procedures to work with the new 14r table schemas
  • Fixed some of the error messages to have the appropriate color.
  • Updated the label of the delete timecard button on the time entry page.
  • Updated our W2optin page to work with new tables.

WebCenter 12.8.1 release notes

Additions from 12.8.0 to 12.8.1

WebCenter

  • Added a new Order Request Workflow system for customers that need to have order requests approved by other contacts before the order can be filled.
  • New user configs have been added to work with the new order request workflows.
  • New notifications have been added to work with the new order request workflows.
  • Order request reviewer statuses and order request event history have been added to the Order Details page.
  • Added links to the task page on the customer Order Search and Timecard Dashboard pages to notify contacts if they have any pending reviews.
  • Added functionality to the Candidate Details page that will bring you right to the download manager if the employee only has one resume.

Bug Fixes from 12.8.0 to 12.8.1

Application

  • Fixed the work locations list box so it will not duplicate items in the list.
  • Fixed which notification gets sent out when an applicant is rejected.
  • Fixed a bug when gathering the last four digits of and SSN.
  • Fixed a bug when gathering the question id's of wrong answers on the questionnaire.

WebCenter

  • Fixed a JavaScript bug on the Payroll History page.
  • Fixed a bug in the timecard template config page that was causing the cost code to always show in the preview window once you have viewed a timecard template that had shown the cost code.

Bridging Java to .NET or how to lose several days of your life

I’ve been spending time for the past three weeks on and off trying to figure out how to use old Java code in one of our .NET projects. A goal for a couple of upcoming clients is to better facilitate the generation of tax and various government forms. With the many thousands of forms we need to support we didn’t want to design and maintain these forms in-house. For a solution we turned to our primary dead tree form provider Nelco.

Nelco provides a PDF form package but unfortunately the PDFs are not AcroForm compatible. You have to use their XML/PDF form merging software solution. More unfortunately their solution is a 10 year old Java package SDK with no source code. I have nothing against Java but here at TempWorks we settled on .NET many years ago and I am not a fan of mixing development platforms. For the past 9 years .NET has provided everything I need to get my job done. So here is my problem, how to get this Java package to work with our .NET code without any weird hacks and make it easy for future TempWorks .NET developers to maintain.

I spent a few days trying various packages without much luck. A few worked fine but they were expensive from a royalty perspective or were more cumbersome then just using Java and writing a web service for communication. Finally I came across an open source solution called IKVM.NET. The cool thing with this solution is you can use IKVM to convert compiled Java code (classes or jar files) and convert it to .NET compiled assemblies. After a few days trying to find the magic IKVM’s command line recipe and fighting with Java class paths, success!

Example Java code from Nelco’s SDK

// This code does the merging of an xml file and a pdf file.  The fields 
// are loaded from the Xml document by the FormBean "utility" into the 
// FormFields object named "inputFields".  The fields are merged into an 
// existing pdf file specified by the variable "pdfFile" by the PDFMerge 
// object named "pd".  The resulting pdf object with the merged xml fields 
// is the Pdf object named "pdf".  An new FileOutputStream is created 
// using the output pdf name and then the function writeToStream is called 
// to write the merged pdf document to disk.
public Pdf PdfFileMergeXmlFile(String xmlInputFile, String pdfFile) {
  // The following code just tweaks the necessary file names.
  xmlInputFile = xmlInputFile + ".xml";
  String pdfOutputFile = pdfFile + "_1_OUT.pdf";
  pdfFile = pdfFile + ".pdf";
  // Now create the necessary Pdf and FormFields objects.
  Pdf pdf = null;
  FormFields inputFields = null;
  // The following string and object are used to read the XML and
  // create a FormField object.
  String xmlbuf = null;
  FormBean utility = new FormBean();
  // for purposes of this example, default data is read from a file (xmlInputFile)
  // and merged with the PDF represented by pdfFile.
  try {
    // The following block of code reads the input data/fields from the XML
    // data file stored on disk.
    xmlbuf = utility.getXML(new File(xmlInputFile));
    utility.setInputFieldsXML(xmlbuf);
    inputFields = utility.getFormFieldsInput();
    System.out.println("- Loaded input data from: " + xmlInputFile);
    // We use the PDFMerge object to merge a FormFields object and a Pdf object.
    PDFMerge pd = new PDFMerge();
    // So, here we are making the call to do the merge.
    pdf = pd.merge(pdfFile, inputFields);
    System.out.println("- Data successfully merged with " + pdfFile);
    // Here we are writing the PDF file out to disk.  First, we get a new
    // FileOutputStream with the desired file name.  Next, we call the Pdf's
    // writeToStream method to write out the Pdf.
    FileOutputStream fos = new FileOutputStream(pdfOutputFile);    
    pdf.writeToStream(fos);
    System.out.println("- Wrote new PDF file " + pdfOutputFile + " successfully");
  } catch (Exception ex) {
    ex.printStackTrace();
  }
  return pdf;
}


The resulting .NET assembly generated by IKVM in Reflector.

image



My C# console application using the above Java example code.

using System;
using com.etymon.pj;
using com.nelco.form;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlInputFile = @"E:\Temp\Nelco\pdfdemo\79411.xml";
            string pdfFile = @"E:\Temp\Nelco\pdfdemo\79411.pdf";
            string pdfOutputFile = @"e:\temp\79411_OUT.pdf";
            var pdf = PdfFileMergeXmlFile(xmlInputFile, pdfFile, pdfOutputFile);
            Console.ReadLine();
        }
        private static Pdf PdfFileMergeXmlFile(String xmlInputFile, String pdfFile, String pdfOutputFile)
        {
            Pdf pdf = null;
            FormFields inputFields = null;
            string xmlbuf = null;
            FormBean utility = new FormBean();
            xmlbuf = utility.getXML(new java.io.File(xmlInputFile));
            utility.setInputFieldsXML(xmlbuf);
            inputFields = utility.getFormFieldsInput();
            Console.WriteLine("- Loaded input data from: " + xmlInputFile);
            PDFMerge pd = new PDFMerge();
            java.io.FileOutputStream fos = new java.io.FileOutputStream(pdfOutputFile);
            pd.merge(pdfFile, inputFields, fos);
            Console.WriteLine("- Wrote new PDF file = " + pdfOutputFile + " successfully");
            return pdf;
        }
    }
}


WOOT!

image



Kudos to the main guy behind IKVM.NET, you saved me a bunch of work.

Prototyping the next generation mobile web application

For many years TempWorks has been selling our TempWorks Mobile product. It has been very successful with people on the go who want quick access to their TempWorks data. The product has gone thru many versions but never has kept up with the capabilities of today’s mobile phone. With the arrival of the iPhone, HTC handsets, Android, and Palm Pre phones you can do so much more than ever before.

I’ve been wanting for almost a year to revamp TempWorks Mobile and update it for the newer phones. Unfortunately large blocks spare time for development is a luxury I don’t have very often. Although about a month ago I decided to move some of my projects around to start prototyping the next generation of Mobile. A couple of reasons I did this, first I wanted to get it done because honestly I am tired of looking at an user interface that is ancient compared to mobile web-app standards today and I wanted to get my hands dirty with technology I haven't used before.

During the lifetime of Mobile I noticed a lot of people liked to use it on their desktop for quick access. I think that is a great idea because sometimes you need a quick number or bit of info. The only downside to old Mobile is that it didn't adapt to its environment. You saw the exact same web pages on your desktop as you did on your mobile phone. What a waste of real estate. Then on flip side you add more features to use the real estate but then it is overwhelming on the mobile phone. With this dilemma as one of primary development points I went to work. I chose to use ASP.NET MVC because its basic architecture solves one of my primary development points and I haven't used it before.

ASP.NET MVC is based on the MVC (Model-View-Controller) paradigm that was popularized by Ruby on Rails. I took advantage of ASP.NET MVC’s ability to have more than one view for an URL or route. I modified the routing engine to inspect the incoming request and determine if it is a mobile device and what kind of device or a desktop browser and route the request to the appropriate view. Here is where the development time savings comes into play. Even though I have many views, they basically use the same back-end logic to feed data to the views. So for an example when you search for a contact I have written the contact search logic within my controller. I only have one controller for my mobile and desktop views so I only write the logic once and am able to support many different views.

Capture2 In this picture you can see that I have one ContactController and currently eight views using it for logic, four mobile views and four desktop views.

Now on to some glamour shots… Currently in my prototype I am focusing on mobile WebKit based mobile browsers currently used the iPhone, Android, and Palm Pre phones. I plan to create more mobile views for Blackberry and Windows Mobile 6.5 browsers and a fall-back mobile view that will be for everything else.

Capture4 Capture5 Capture6
iPhone Android Palm Pre

On the desktop I am developing for the three major browsers, IE 7 and later, Firefox, and Webkit (Safari and Chrome).

Capture1

For iPhone users you get the ability to use TempWorks Mobile as a full screen application and have the ability to launch from your home screen.

Capture7 Capture3
Mobile icon on the home page Notice no address or status bars

Overall I have been impressed with the technical ability of ASP.NET MVC. It does have one downfall for me; the introduction of spaghetti code back into your HTML pages. You old school ASP folks and PHP developers probably don't mind that but after using WebForms for almost 10 years it takes a bit of getting used to again. Although I will admit it's nice getting back to HTTP bare metal again and not dealing with WebForm's idiosyncrasies.

WebCenter 12.8.0 Release Notes

Additions from 5.2.13 to 12.8.0 (Adopted TempWorks database version numbering system)

Application

  • New data access layer.
  • The preferred work locations field on the personalinfo page can now be either a text box or a list box.

JobBoard

  • New data access layer.

WebCenter

  • New data access layer.
  • Added a new sitesettings configuration for setting the preferred work locations field type on the personalinfo page.
  • Updated our customer invoice details page to work with Enterprise’s new timecard document image linking.

Bug Fixes from 5.2.13 to 12.8.0

JobBoard

  • Fixed a bug in the RSS feed with orders having an ‘&’ in the job description field.

WebCenter

  • Corrected grammar in the w2 opt in disclosure.

Deployment scenarios for Enterprise

Today we have a few choices to get business software on someone’s computer. There are web applications like Google Gmail, Rich Internet Applications (RIA) that use Flash or Silverlight and there are Windows applications like Microsoft Outlook. We determined years ago that a Web 2.0 like web application wasn’t going to cut it. We spent a few years working on a “WebClient” for TempWorks and decided that there were too many roadblocks to achieve the vision we had for a client. Those were the days of early AJAX, the browser wars became stagnant and everyone was running IE6. We also passed on RIAs later on because their browser sandbox introduced a lot of the same roadblocks we had during our WebClient development. That meant a Windows application but we liked the easy deployment of a web application. We could of fell back into easy mode and required Windows Terminal Services (TS) or Citrix for all our remote installations but that opens another can of issues. If you’re a sysadmin I don’t have to list them, you all know them well. For others not familiar here are the nightmares of any TS/Citrix administrator; printing, local drive access, and more recently USB devices. There is a rich third party market to compensate for these shortcomings but they drive up the cost of already expensive TS/Citrix licenses and that make our product more expensive to the customer.

Yes, Virginia, there is another way. I had been long aware of a technology from Microsoft called remoting. It was kind of a sibling to web services, which was another possible choice to use. Remoting was lighter weight but used non-standard TCP protocols. I’d played with it and liked it but was very finicky to get it to work “right”. Web services offered standard HTTP/S protocols but was bloated. We needed something that was lightweight and fast like remoting but used standard protocols so we could cross firewalls without special configurations. Enter WCF. I first saw WCF at Microsoft’s PDC show in 2005 and loved it instantly. It offered exactly what I was looking for, lightweight and firewall friendly.

With WCF in our toolkit we had a way for our application to communicate across the Internet. Now I needed a way to deploy our application without too much hassle for the end-user. Microsoft had that answered for us as well. ClickOnce was a technology that allows .NET developed applications to be installed by a non-administrative user just by clicking on a web link (anchor tag for you web folks). Users just visit a web page and click a regular web link and ClickOnce installs all the files it needs, creates the shortcuts for the user and launches the application. It also allows in-place upgrading so when new versions of the application come out it will automatically download and install the update.

So today we have a Windows application that has many more features then any web application will ever have like USB access (think scanners and other capture devices) and local program access (think MS Outlook syncing) but can be installed locally with very little effort and work effortlessly across the Internet. There is a downside to all greatness. We use a lot of cutting-edge technology and unfortunately a lot of business computers are not the latest generation hardware or the end-user has poor Internet speeds. In these special cases we fall back to using Windows Terminal Services. I foresee in a few more years the hardware cycle will catch up with our technology as will broadband speeds. When this happens the less we have to fallback to TS and for me, that is something I look forward to.

If you want to try out our latest and greatest technology, visit our free download center here.

-Paul