“Sometimes when you innovate, you make mistakes. It is best to admit them quickly and get on with improving your other innovations.”
— Steve Jobs
Last time, we put out a new version of the Scoped Application Update Set that addressed a few of the reported issues. There are still a few unresolved issues, however, and some that have not even been discussed as yet. One that was reported last time, which I have been able to replicate, is a Commit failure of an attempted insert on the sys_scope_privilege table.
Duplicate entry ‘5b9c19242f6030104425fcecf699b6ec-global-sys_app_module-sys_db…’ for key ‘source_scope_2’
This causes the Update Set commit to be reported as a failure, even though everything else was installed without issue and everything works just fine despite this particular problem. I searched through the Update Set hoping to find an update that was in there twice for this item, but it only appears once, so I am not sure why we would be getting a duplicate entry error. The entry says ‘INSERT OR UPDATE’, so you would think that it would know if it was already there and do an UPDATE instead of an INSERT, but that’s obviously not what is happening. I’m going to have to do a little more research to see if I can find the cause of this one. Even though it doesn’t seem to hurt anything, I don’t like it and I would like to figure out how to prevent that from happening.
The other thing that seems to happen to folks during the Preview phase is that they run into a number of issues that need to be addressed and the Preview never runs clean. Up to this point, my recommendation has been to just accept all remote updates and then do the Commit. There are two areas, though, where I now believe that it would be better to skip the updates rather than accept them. One is any update related to System Properties and the other is any update related to the left navigation menu items. Once you have gone through the set-up process, the property values have all been establish based on the information entered during set-up. You do not want to overlay those with an Update Set or you will have to go through the set-up process all over again. Also, once you complete the set-up process, the set-up menu item is deactivated and all of the other menu items are revealed. You don’t want that to be reverted either, so if you are installing an update over an existing installation that has already been set up, you should skip any update related to these two items. All of the rest, you should still go ahead and accept. I don’t like having to have these kinds of specialized instructions, though, so I am going to be looking at ways to restructure things so that this is not an issue. The goal would be to always have a clean Preview and a clean Commit, regardless of whether it was a fresh install or an update of an existing install.
One issue that I did attempt to correct in the most recent version was the attachment copy problem, a problem that resulted in the attachment of the wrong file to the version record. It turns out that this bad code was replicated a number of times and was only fixed in one place. To correct that problem, and to make future maintenance a little easier, I built a common attachment copy function that contained the corrected code, and then called that function from every place that previously had a copy of the incorrect logic.
copyAttachment: function(fromTable, fromId, toTable, toId, attachmentId) {
var response = {success: false};
var gsa = new GlideSysAttachment();
var values = gsa.copy(fromTable, fromId, toId, toId);
if (values.length > 0) {
for (var i=0; i<values.length; i++) {
var ids = values[i].split(',');
if (ids[0] == attachmentId) {
response.success = true;
response.newId = ids[1];
gsa.deleteAttachment(attachmentId);
} else {
gsa.deleteAttachment(ids[1]);
}
}
} else {
response.error = 'Unrecognized response from attachment copy: ' + JSON.stringify(values) + '\nFrom table: ' + fromTable +'; From ID: ' + fromId + '; To table: ' + toTable +'; To ID: ' + toId + '; Sys ID: ' + attachmentId;
}
return response;
}
Once that was in place, I updated the functions that previously included that code to just call that function and evaluate the results.
processPhase4: function(answer) {
var response = this.CSU.copyAttachment('sys_app', answer.appSysId, 'x_11556_col_store_member_application_version', answer.versionId, answer.attachmentId);
if (response.success) {
answer.attachmentId = response.newId;
} else {
answer = this.processError(answer, 'Copy of Update Set XML file failed - ' + response.error);
}
return answer;
}
This code works for both Update Set XML files as well as logo image files.
copyLogoImage: function(sysAppGR, applicationGR) {
var logoId = '';
var csu = new CollaborationStoreUtils();
var response = csu.copyAttachment('ZZ_YYx_11556_col_store_member_application', applicationGR.getUniqueValue(), 'ZZ_YYsys_app', sysAppGR.getUniqueValue(), applicationGR.getValue('logo'));
if (response.success) {
logoId = response.newId;
} else {
gs.error('Copy of application logo image failed - ' + response.error);
}
return logoId;
}
Speaking of logo image files, when I updated everything to include logo images for each instance, I neglected to add an image upload function to the initial set-up process. Since the Host’s data for each Client instance is collected during the set-up process, no Client instances will have logo images on the Host, which means no logo images will ever be shared with other Clients. I need to fix that, and then release yet another bug-fix Update Set that will address as many of these issues as possible. Adding the image upload to the set-up process may get a little involved, so let’s save that for our next installment.
Joe Blogs says:
M. Hackery,
I attempted twice to install collaboration_store_v0.7.2. The first time I tried to follow your instructions where you said to skip some updates. That resulted in the reported version to be v0.7.1. The second time I reloaded the 7.2 update and accepted all updates and it still reported v0.7.1. So I deleted the app from our 3 pdi’s. I will work on re-installing it tomorrow.
snhackery says:
You might want to check the name of the Update Set XML file that you are using and make sure that it is actually version 0.7.2 (the version should be part of the file name). Regardless, there is a newer version out now (v0.7.3), and that is the one that you are going to want to be testing with, so I would pull that one down and reinstall using that file and not any of the earlier versions. Thanks again for your help in testing. Your detailed feedback has been quite helpful in identifying a number of issues. Hopefully, this newer version will address some of the issues that you have reported.