Personal Blog of Thomas Hampel - Creative Mythbusting in Development and Collaboration

Who am I?

Feeds

Archives

April 2025 (1)
January 2025 (1)
December 2024 (1)
November 2024 (2)
October 2024 (2)
September 2024 (1)
July 2024 (1)
May 2024 (2)
April 2024 (3)
March 2024 (1)
February 2024 (2)
January 2024 (5)
December 2023 (3)
November 2023 (2)
October 2023 (1)
September 2023 (4)
June 2023 (1)
April 2023 (3)
March 2023 (1)
February 2023 (1)
July 2022 (1)
September 2021 (1)
August 2021 (2)
May 2021 (1)
February 2021 (3)
January 2021 (1)
November 2020 (1)
October 2020 (2)
September 2020 (2)
March 2020 (1)
November 2019 (1)
August 2019 (1)
July 2019 (1)
March 2019 (1)
December 2018 (1)
November 2018 (1)
October 2018 (1)
September 2018 (1)
May 2018 (1)
January 2018 (1)
December 2017 (1)
November 2017 (1)
September 2017 (1)
March 2017 (2)
February 2017 (5)
November 2016 (1)
September 2016 (4)
April 2016 (1)
March 2016 (7)
January 2016 (1)
December 2015 (1)
November 2015 (3)
August 2015 (1)
July 2015 (2)
June 2015 (5)
May 2015 (5)
March 2015 (3)
February 2015 (2)
January 2015 (4)
December 2014 (3)
November 2014 (1)
September 2014 (4)
August 2014 (1)
May 2014 (4)
April 2014 (1)
March 2014 (2)
February 2014 (3)
January 2014 (2)
October 2013 (1)
September 2013 (1)
August 2013 (2)
July 2013 (2)
March 2013 (2)
February 2013 (4)
January 2013 (3)
December 2012 (2)
November 2012 (1)
October 2012 (2)
September 2012 (4)
August 2012 (3)
July 2012 (1)
June 2012 (6)
May 2012 (1)
February 2012 (2)
January 2012 (1)
December 2011 (4)
November 2011 (2)
September 2011 (1)
May 2011 (2)
March 2011 (1)
January 2011 (1)
November 2010 (5)
October 2010 (2)
September 2010 (2)
August 2010 (1)
July 2010 (3)
June 2010 (1)

Delete Workstation ECL

Thomas Hampel
 17 November 2011

Recently I came across a situation where multiple workstations had a corrupted local ECL. The document itself was corrupted that it was not possible to edit nor refresh it automatically. The only chance was to rebuild the ECL completely by creating a new NAB, which of course is not what users want to do. With some little reverse engineering and the help of some friends, I've figured out how to use an (undocumented) Notes API call to delete the workstation ECL directly.
For those who want to do something similar, here is the sourcecode:


%REM

      Agent DeleteECL

%END REM

Option
Public
Option
Declare

Const
ERR_MASK = &H3fff
Const
PKG_MASK = &H3f00
Const
ERRNUM_MASK = &H00ff

Declare
Function NSFDbOpen Lib "nnotes.dll" (ByVal PathName As String, rethDB As Long) As Integer
Declare
Function NSFDbClose Lib "nnotes.dll" (ByVal hDB As Long) As Integer
Declare
Function NSFDbDeleteECL Lib "nnotes.dll" (ByVal hDB As Long, ByVal UserName As String, ByVal UserNameLen As Integer, ByVal ECLType As Integer) As Integer
Declare
Function OSLoadString Lib "nnotes.dll" (ByVal hModule As Long, ByVal stringCode As Integer, _
ByVal
retBuffer As String, ByVal bufferLength As Integer) As Integer

Sub
DeleteECL(Source As Button)
     
Dim rc%, build&, filename$
     
Dim hDB&
     
Dim s As New NotesSession
     
      build& =  s.NotesBuildVersion        

     
If build& <= 190 Then filename$ = "desktop5.dsk" Else filename$ = "names.nsf"
     
     
Print "Using desktop file : " & filename$
     
      rc% = NSFDbOpen (filename$, hDB&)

     
If rc% <> 0 Then
             
Print "Unable to open " & filename$
             
End
     
End If
     
      rc% = NSFDbDeleteECL  (hdb&, s.UserName,
Len (s.UserName), 1)
     
If rc% = 0 Then
             
Print "Successfully deleted local Workstation-ECL in file " & filename$ & " for user " & s.UserName
     
Else
             
Print "Not successful, returncode = " & rc%
             
Print GetAPIError  (rc%)
     
End If
     
      rc% = NSFDbDeleteECL  (hdb&, s.UserName,
Len (s.UserName), 2)
     
If rc% = 0 Then
             
Print "Successfully deleted local Applet-ECL in file " & filename$ & " for user " & s.UserName
     
Else
             
Print "Not successful, returncode = " & rc%
             
Print GetAPIError  (rc%)
     
End If
     
      rc% = NSFDbDeleteECL  (hdb&, s.UserName,
Len (s.UserName), 3)
     
If rc% = 0 Then
             
Print "Successfully deleted local JavaScript-ECL in file " & filename$ & " for user " & s.UserName
     
Else
             
Print "Not successful, returncode = " & rc%
             
Print GetAPIError  (rc%)
     
End If
      rc% = NSFDbClose (hDB&)

     

End
Sub
Function
GetAPIError (errorCode As Integer) As String
     
'** this function translates Notes API error codes into their
     
'** corresponding error strings
     
Dim errorString As String*256
     
Dim returnErrorString As String
     
Dim resultStringLength As Long
     
Dim errorCodeTranslated As Integer
     
     
'** mask off the top 2 bits of the errorCode that was returned; this is
     
'** what the ERR macro in the API does
      errorCodeTranslated = (errorCode
And ERR_MASK)
     
     
'** get the error code translation using the OSLoadString API function
      resultStringLength = OSLoadString(
0, errorCodeTranslated, errorString, Len(errorString) - 1)
     
     
'** strip off the null-termination on the string before you return it
     
If (InStr(errorString, Chr(0)) > 0) Then
              returnErrorString =
Left$(errorString, InStr(errorString, Chr(0)) - 1)
     
Else
              returnErrorString = errorString

     
End If
     
      GetAPIError = returnErrorString

     

End
Function
Comments [0]
Tagged with: Development
Go ElsewhereSubscribe to RSSAboutStay ConnectedAnd More
Thomas Hampel, All rights reserved.