docs: public String getLink()
      {
          String strType = this.getField(Menus.TYPE).getString();
          String strLink = this.getField(Menus.PROGRAM).getString();
          if (strLink != null)
              if (strLink.length() > 1)
                  if (strLink.charAt(0) == '.')
                      strLink = DBConstants.ROOT_PACKAGE + strLink.substring(1);
          String strTitle = this.getField(Menus.NAME).getString();
          String strParams = Utility.addURLParam(null, strType, strLink); // Default command
          if ((strType.equalsIgnoreCase(DBParams.SCREEN))
                  || (strType.equalsIgnoreCase(DBParams.RECORD)))
          {
              strParams = Utility.addURLParam(null, strType, strLink);
          }
          else if ((strType.equalsIgnoreCase(MenuConstants.MENUREC)) 
                  || (strType.equalsIgnoreCase(MenuConstants.FORM))
                  || (strType.equalsIgnoreCase(MenuConstants.GRID)))
          {
              strParams = Utility.addURLParam(null, DBParams.RECORD, strLink);
              strParams = Utility.addURLParam(strParams, DBParams.COMMAND, strType);
          }
          else if (strType.equalsIgnoreCase(DBParams.MENU))
          { // Default is correct
              if ((strLink == null) || (strLink.length() == 0))
              {
                  strLink = this.getField(Menus.CODE).toString();
                  if ((strLink == null) || (strLink.length() == 0))
                      strLink = Converter.stripNonNumber(this.getField(Menus.ID).toString());
                  strParams = Utility.addURLParam(null, strType, strLink); // Default command
              }
          }
          else if (strType.equalsIgnoreCase(DBParams.XML))
          {
              strParams = Utility.addURLParam(strParams, "title", strTitle);
          }
          else if (strType.equalsIgnoreCase(DBParams.LINK))
          {
              strParams = strLink;
              if (((strLink.indexOf('.') < strLink.indexOf('/'))
                  && (strLink.indexOf('.') != -1))
                  || ((strLink.indexOf('/') == -1) && (strLink.indexOf(':') == -1)))
                      strParams = "http://" + strLink; // Default command - In the html implementation, this creates an href
          }
          else if (strType.equalsIgnoreCase(DBParams.MAIL))
          {
              strParams = strLink;
              if (strLink.indexOf("mailto:") != 0)
                  strParams = "mailto:" + strLink;
          }
          else if (strType.equalsIgnoreCase(DBParams.APPLET))
          { // Default is usually okay
              if ((strLink == null) || (strLink.length() == 0))
                  strParams = Utility.addURLParam(null, strType, DBParams.BASE_APPLET); // Default command
              if (strParams.indexOf(DBConstants.DEFAULT_SERVLET) == 0)
                  strParams = strParams.substring(DBConstants.DEFAULT_SERVLET.length());
          }
          else
          { // Default is okay
          }
          Map<String,Object> properties = ((PropertiesField)this.getField(Menus.PARAMS)).loadProperties();
          if (properties != null)
              if (DBConstants.BLANK.equalsIgnoreCase((String)properties.get(DBParams.USER_NAME)))
          {       // They want me to fill in the user name
              if (this.getTask() != null)
              {
                  if (this.getTask().getProperty(DBParams.USER_ID) != null)
                      properties.put(DBParams.USER_ID, this.getTask().getProperty(DBParams.USER_ID));
          // todo (don) For now, don't pass authentication to remote menu items
          //        if (this.getTask().getProperty(DBParams.AUTH_TOKEN) != null)    // This is used instead of a password to authenticate
          //            properties.put(DBParams.AUTH_TOKEN, this.getTask().getProperty(DBParams.AUTH_TOKEN));
                  properties.remove(DBParams.USER_NAME);
              }
          }
          if (properties != null)
              if (!strType.equalsIgnoreCase(DBParams.MENU))
                  strParams = Utility.propertiesToURL(strParams, properties);
          return strParams;
      }