While Daniel Wroblewski has published a blog about B1HM Tool Lets You Add Custom Help, I’d like to provide some background information about the history and the demand for functionality that the add-on is intended to address. I also will discuss how the source code has been implemented, and why we implemented the source code the way we did.
You are most welcome to give us your feedback about the add-on in the comments section at the end of this blog.
Some years ago - actually, it was back in 2004 - software solution partners were starting to ask for an option to modify the SAP Business One help information to reflect the changes and enhancements the partners were supplying with their solutions. Initially, the idea was that partners should be able to change the SAP Business One help files to ensure that their customers would find the custom information seamlessly integrated with the latest SAP Business One help.
Several potential help editing tools were considered as well as at which stage in the release cycle to make the SAP help available for partner changes. Because for legal reasons SAP documentation has to be visible to customers "at any time," none of the options turned out to be viable.
How Custom Help Mapping Started
In 2007, the SAP Business One Product Definition team defined a concept that included the capability to change (that is, override) or add to the standard SAP Business One application help. Feedback on the concept was collected from a number of partners and customers.
The concept was named Custom Help Mapping (or B1HM for short) and the original idea was to include the functionality within the SAP Business One core since it was clear that, though not critical, this function was really needed and definitely helpful.
Unfortunately, development capabilities for the next release (SAP Business One 8.8) were fully booked, so a decision had to be taken either to postpone implementation to the next version or to develop the concept as an add-on. To avoid delaying the implementation any further, the decision was taken to develop an add-on and to publish it on SDN / SCN without support, but to include the source code.
After some discussions, the Solution Architects team agreed to design and implement the add-on. I did some effort estimation, a first draft design, a feasibility study, and so on while Aravind Gadagottu from our team designed and implemented the major part of what is available now. As I discuss below, the "final" implementation turned out to be a bit trickier and more complicated than expected.
Design and Implementation
It soon became clear that some compromises and decisions would be necessary, since resources in the Solution Architects team were limited and (not surprisingly) it made a big difference whether the functionality was implemented into the core application or as an add-on.
In general, the B1HM source code might leave you wondering why some things have been implemented as they have been. Often the reason may be connected to the fact that the add-on is trying to replace standard SAP Business One functionality in a manner that the SAP Business One SDK’s UI API was not initially designed for.
The Custom Help Mapping add-on implementation tasks turned out to be more complex than imagined, and we had to use many workarounds and make compromises to complete the overall functionality as designed.
Several times we had to limit our implementation efforts to basic functionality due to time and resource constraints. An example of this is the fact that the add-on doesn’t provide any caching or pre-loading of mappings. The add-on just loads the information when required (when the end user does a right-click or presses F1 or Shift + F1). Another example is that we could have provided even more capabilities for administrators: to display where help is already attached and to facilitate adding new mappings.
Another decision we took was to use our B1DE toolset to develop the add-on, which had its pros and cons and resulted in an update for B1DE. Since we needed some additional B1DE features, such as listening to events without filtering for specific form types, we added them!
We also used UDO functionality to make sure that the mapping tables are not visible in the list of UDTs and to facilitate loading and saving the data. At some point, it seemed possible to live without DI API. Obviously, the decision to use UDO functionality had some disadvantages as UDO data support is still not included in the generally available DI API. So we had to resort to further workarounds for that purpose.
After a pilot phase with four partners who were also engaged in other initiatives relating to knowledge transfer, we were getting closer to publishing the add-on on SCN. It was at this point that we realized we needed to facilitate the translation of the add-on’s UI and system messages to other languages, and it is now possible to translate messages to other languages by creating a localization file in version 1.1 of B1HM without the need to change the source code (In version 1.0 however, it was possible only by changing one source code file (UIStrings.cs)). The only place that the end user is likely to see the UI is in certain error messages and the right-click menu and all of these are localizable via a configuration file. The rest of the add-on’s UI is provided as XML files.
Please keep these things in mind when you dive into the code.
First-Time Start Problem
Using UDO led to another last-minute problem: The add-on installer comes with its own help information (field-level help and form-level help). This information is supposed to be imported when the add-on is first started, after UDTs and the UDO have been defined. As you probably know, SAP Business One only "knows" about these definitions after it has loaded them from the database - which only happens after the dialog talking about a change in the database structure has occurred. Since we used workarounds for the import (to avoid direct DB access as much as possible), the help import may fail during the first start. When the add-on is started for a second time, the import works. Of course we intend to fix this, but we also wanted to give you the chance to explore the features as soon as possible. …and actually one of the pilot partners plans to deploy the add-on to a new customer who is going live very soon.
The future of this add-on will depend partly on you. Please add your comments to this blog so that we can learn about how you are using the software and whether you would like to see extra features in the future.