• Dynamic hotspot

    By David Turner 9 years ago

    Similar to dynamic attachments. Users often request dynamic embedded images, buttons and hotspots.


    This request raised to track this potential future development effort.

    • Solution: Rewrite agent with DXL manipulation

      By David Turner 9 years ago

      I've been extensively looking into ways of adding or updating a Notes Hotspot or Button or Embedded Image into the generated emails. For all versions at least up to Notes 8.5.3, is NOT possible to achieve this in ordinary LotusScript (no native functions exist, and AppendRTItem behaviour is restrictive). Therefore, barring hacking into Notes using C++ and DLLs, the simplest solution will probably involve re-writing this agent to use DXL manipulation. I'll think about this as a major v1.5 enhancement.

      The problem with native LotusScript is the bug/restriction on the AppendRTItem function that can only append one rich-text item above or below an existing rt item; it is not possible to replace some text with richtext somewhere in the middle. See this issue with AppendRtItem: "Method not available" https://www-304.ibm.com/support/docview.wss?uid=swg21114718

      The solution is likely to involve converting the document into DXL and replacing using XML constructs. As offered here: http://www.cubetoon.com/2008/notes-rich-text-manipulation-using-dxl/


      http://ozinisle.blogspot.com.au/2010/11/lotusscript-code-to-append-hotspot-to.html suggests that DXL required is simply: (urllink showborder='false' href='mailto:|+url+|')(run)|+url+|(/run)(/urllink)    -- Replace () with <>.

      '** create a new doc using the DXL above
      Set db = session.CurrentDatabase
      Set importer = session.CreateDXLImporter(dxl, db)
      importer.ReplicaRequiredForReplaceOrUpdate = False
      importer.DocumentImportOption = DXLIMPORTOPTION_CREATE
      Call importer.Process

      '** get the button from the doc we just created and append it to
      '** the rich text item we were given
      Set doc = db.GetDocumentByID(importer.GetFirstImportedNoteId)
      Set body = doc.GetFirstItem("Body")
      Call rtitem.AppendRTItem(body)

      '** try to delete the temporary doc. In case we can't delete it for some
      '** reason, a scheduled agent should be written to globally delete
      '** docs that use the form name specified in the DXL above.
      On Error Resume Next
      Call doc.RemovePermanently(True)