I made that little set of steps so my daughter could get her own cereal bowl from the upper cabinets when she was little girl. The walnut inlays accenting each step, are actually the result of a mistake. I accidentally cut the dadoes for the steps on the wrong side of one of the stringers, so I cut both slots in both stringers and called it a “design element”. In over 40 years of woodworking, I have many such stories. Of course, the same applies to systems development, and this week it applies to SharePoint.
Our “system” for supporting the development, storage and disposition of engineering inspection reports hit a major snag last week. When we move the final PDF report into a Records Library, we wanted to include the managed metadata columns identifying the insured site, operating company, engineer, etc. Unfortunately, we could not find a way to set the managed metadata columns in the record library from a workflow running in the document library where the reports are developed. As we thought about the problem, we realized we might be dealing with an ERM paradox – if these are “Records”, do we really want the metadata columns to change? See my AIIM blog for a better treatment of that question. The short answer is that we were happy with not having managed metadata in the record library, but we still needed a way to make sure that we could always find all the reports for any facility, even if its name or ownership changes over time. Remember, the facilities we insure may be in operation for 40-60-n years. It turned out, the answer was right in front of us.
In order to control certain decisions within the workflows that support the report development, we rely on a custom list to store some parameters. For example, reports written for some locations have to go through a review process. Rather than try to build complex logic into a SharePoint Designer workflow, we simply turn a switch on in the facility list. The ability to do this, to tap into the relational database nature of SharePoint, is one of the product’s major strengths, and it makes it easy to control very complex processes. This lookup list includes the managed metadata columns, so the list can adapt as attributes change over time, and so we can search the list using the myriad aliases we established in the Term Store. My favorite example is “Cook” “DC Cook” “D.C. Cook” and of course “Donald C. Cook”. Entering any of those, or the operating utility, or the policy number, will lead you to the right facility. We realized that since this list stays in sync with the changing data describing our insured facilities, it could also keep track of the reports.
We added a multiline rich-text column to this list to store links to all the reports written for each facility. Each time a final PDF is added to the record library, a workflow in that library runs and performs two actions. First, it designates the report as a record. Second, it adds a link to itself in the facility list. When we first tried this, we ran into what we thought was another problem with SharePoint. We were trying to use the report name as the link value, but if the name had spaces in it, the entire name didn’t show up as a link, only the initial contiguous characters. Then we decided to use the Document ID as the link. Once again, covering a deficiency left us with a much better solution – Document IDs stay relevant even if the Record Library (or for some reason the records in it) gets moved. Of course, there is an additional benefit that we haven’t tapped yet. The facility list could become a container for links to all official engineering records related to a single facility, since we could update this list in a similar fashion from other libraries.
By now, many of you might be thinking: “doesn’t search make all of this linking and listing unnecessary?” No. Search is a wonderful feature, but search is an inexact technology. The quality of our search results is dependent on the quality of our search. Our search terms, the search scope we choose and our use of those well understood Boolean operators, all influence our search results. We want to be able to say with authority that “these are all the records related to this facility.” I would much rather rely on a workflow running at the time the records are created than the ability of my future self to find those records.