I upgraded one of our databases overseas and was puzzled when they reported that they suddenly could no longer see the attachments to their purchase orders. Actually, when I heard it, it was just for a single purchase order.
You see, we’ve got our attachments all stored in a separate database for each project. This is nice because it reduces the risk of truncations, moves the big data out of the main database and generally calms down the Notes admin team. However, it does require that there is a solid link between the main document and any attachment documents. Our main link is a transactionKey field, which identifies not only which main document the attachment belongs to, but also where that attachment is displayed on the main document’s XPage.
I had a custom control that handled one of those display areas as a tab in a tabbed panel. We had decided to add a new document type (release orders, to go with purchase orders), so I wanted my custom control to be more generic, to handle multiple document types. There are a few values that were based on the document type. Rather than passing 4 or 5 properties, I decided to pass in 1 and compute the others. Brilliant, except, I forgot how Javascript works.
My “brilliant” code….
<xp:scriptBlock id="scriptBlock1"> <xp:this.value><![CDATA[#{javascript:switch ( compositeData.mainDocumentType ) { case "Purchase Order": viewScope.signedDocumentTypes = "Purchase Order or subcontract"; viewScope.transactionType = "PurchaseRecord"; viewScope.transactionTag = "po"; viewScope.additionalDirections = " and all invoices and goods delivery receipts"; break; case "Release Order": viewScope.signedDocumentTypes = "Release Order"; viewScope.transactionType = "ReleaseOrder"; viewScope.transactionTag = "rel"; viewScope.additionalDirections = ""; break; default: // thus far, BPA only, but could be any mainDocumentType with no spaces in the name viewScope.signedDocumentTypes = compositeData.mainDocumentType; viewScope.transactionType = compositeData.mainDocumentType; viewScope.transactionTag = @LowerCase(compositeData.mainDocumentType); viewScope.additionalDirections = ""; };}]]></xp:this.value> </xp:scriptBlock>
So, every Purchase Order attachment got the signedDocumentTypes ‘Purchase Order’, the type ‘Purchase Order’, the tag ‘purchase order’ and no additional directions. Only took about 4 hours of looking at data, chasing the various design changes and reading code before I looked at that piece of code and realized my obvious mistake.
Sometimes, you just need a break;