Clicking “Mark as Complete” does not update the status in the Software Update and Upgrade Checklists

 

Overview:

There are a few blogs around detailing some issues with checklist items not getting set to status completed, but this issue has recently come up in a few cases and doesn’t seem to have been documented before. As those who have researched these problems would know, the status of the checklist items is stored in the SysSetupLog table.

 

The Problem:

There was a customisation in method ApplicationVersion::buildNo that added an additional string to the default build number, in this case it was the customer’s internal build details. Within the SysSetupLog table there is a field AppBuild which is 30 chars long. Now, when you click on “Mark as Complete” we are adding records for each item to the SysSetupLog with some details, including the build number that is populated into the AppBuild field. For this issue the build number returned by the method was greater than 30 characters, but when the record was written in the table, the build number was truncated to 30 characters.

It is during the rendering of the HTML page for the checklist we check the item’s status. Within the code we are using the method call SysSetupLog::findEx to find the record for the item, however this wasn’t returning anything. Within this method we try to fetch the checklist item record by matching on some passed-through parameters, but the app build is matched based on the returned value from ApplicationVersion::buildNo, see below:

static SysSetupLog findEx(identifierName   _name,

                          ClassDescription _description,

                          SysVersion       _version       = xInfo::releaseVersion(),

                          boolean          _forUpdate     = false)

{

    SysSetupLog sysSetupLog;

    ;

 

    if (_name) //description can be empty…

    {

        sysSetupLog.selectForUpdate(_forUpdate);

 

        select firstonly sysSetupLog

            where sysSetupLog.Version     == _version       &&

                  sysSetupLog.AppBuild  == ApplicationVersion::buildNo() &&

                  sysSetupLog.Name        == _name          &&

                  sysSetupLog.Description == _description;

    }

    return sysSetupLog;

}

The reason that no record was returned, was that that the build stored in the AppBuild field had been truncated, and therefore did not match the build number returned by the buildNo method.

 

Solution:

Ensure that the string returned by method ApplicationVersion::buildNo does not exceed 30 characters.