Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Legolas am 03.04.17 - 11:43:16

Titel: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: Legolas am 03.04.17 - 11:43:16
Hallo Zusammen,

gibt es die Möglichkeit in Notes-Script den Namen der aktuellen Script-Bibliothek auszulesen in der evtl. ein Fehler aufgetreten ist?
Über GetThreadInfo() komme ich nicht so recht weiter.

Die Funktion in der ein Fehler auftritt,  bekomme ich über den Stack zurück.
stackTrace = LSI_Info(14)

Es müsste dann doch aus Dokumentationsgründen möglich sein, den Namen der Script-Bibliothek zu bekommen in welcher die Funktion die den Fehler geworfen hat läuft.

Grüße
Bernd
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: Frank_B am 03.04.17 - 12:07:34
Evtl. in die Richtung:

Dim cdb As NotesDatabase
Dim nc As NotesNoteCollection
Dim ncdoc As NotesDocument

Set nc = cdb.Createnotecollection(False)
nc.SelectScriptLibraries = True
Call nc.BuildCollection
[...]
strNoteId = nc.Getfirstnoteid()   
Set ncdoc = cdb.GetDocumentByID(strNoteId)
[...]
strTitel = ncdoc.getItemValue("$Title")(0)
strKommentar = ncdoc.getItemValue("$Comment")(0)
[...]
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: eknori am 03.04.17 - 12:51:22
http://blog.gollmick.de/mgoblog.nsf/dx/Transforming_LSI_info_to_GetThreadInfo.htm

GetThreadInfo(2)
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: Legolas am 03.04.17 - 13:32:44
Hallo Ulrich,

habe ich schon probiert.
Die Funktion liefert mir aber z.b. folgendes Ergebnis zurück:  *BB16918
Mein Ziel ist es aber, den Scriptbibliotheksnamen zu erhalten.
Oder gibt es hier eine Referenz bzw. Konfiguration?

Gruß
Bernd
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: Andrew Harder am 03.04.17 - 14:42:02
Evtl. in die Richtung:

Dim cdb As NotesDatabase
...
strKommentar = ncdoc.getItemValue("$Comment")(0)
[...]
Leider nein.

UNID:   620F37C3286D8819C12580F7003BD8E1
NoteID: 1203E
LSI_THREAD_MODULE:      *D5DDE18

Der Stern erinnert mich an einen Pointer ;)


[EDIT]
Butter bei de Fische: Manuell ist das Ganze kein Problem:
Code
Private g_nameScriptLib As String
...
g_nameScriptLib = "Name der Lib"
Nicht schön, aber ein Workarround, den ich schon oft gesehen habe.

Bei Agents hättest Du ja agent.name.
So ein session.CurrentLibrary.Name wäre hier echt eine Hilfe gewesen.
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: eknori am 04.04.17 - 09:38:26
Der Rückgabe wert ist in der Tat ein Pointer. Mit ein bisschen API Magic kommt man dann auch an den Namen der ScriptLib. Ist sicher nicht alltagstauglich. Ich verwende daher auch eine (private) Konstante in meinen Libs

Code
Option Public
Option Declare

Const APIModule = "NNOTES" 
Declare Private Sub Peek Lib APIModule Alias "Cmovmem"(  ByVal P As Long, D As Any, ByVal N As Long)
Declare Private Sub PeekString Lib APIModule Alias "Cmovmem"(  ByVal P As Long, ByVal D As String, ByVal N As Long)

Sub Terminate
	
End Sub


Public Sub sayHello()
	MsgBox getModuleName
End Sub

Function getModuleName ()As String
	Dim t As long
	Dim p As Long
	Dim s As String
	Dim a As String
	Dim b As String
	Dim z As Integer

	t& = CLng("&H" & Mid$(GetThreadInfo(2), 2))
	Peek t& + 166, p&, 4 ' 166 For 9.0.1

	If Abs(t& - p&) > 1E6 Then Exit Function

	s$ = Space(32)

	PeekString p&, s$, 32
	z% = InStr(s$, Chr$(0))
	a$ = Left$(s$, z% - 1)
	s$ = Mid$(s$, z% + 1)
	z% = InStr(s$, Chr$(0))
	b$ = Left$(s$, z% - 1)
	If b$ = "" Then getModuleName = a$ Else getModuleName = b$ & " - " & a$
End Function
Titel: Re: Name der aktuellen Scriptbibliothek auslesen
Beitrag von: Thomas Heinecke am 07.04.17 - 11:28:47
Ich habe mir angewöhnt, die Einstellungen der Templates für Code und Comment im Domino Designer zu verwenden.
So kann ich bei neuen Funktionen immer mit einmal Cut und Paste den korrekten Namen des Design-Element im Code hinterlegen.

--------------------------------------------------------------------------------------------
Unter "Preferences\Domino Designer\ LotusScript Editor \Code Templates" hinterlege ich den Vorgabe-Code für Functions und Subs:
      

   Dim strFunctionName As String      

   On Error Goto ProcessError        

   strFunctionName = "<element> - <function>"    // ist nur eine Dummy Anweisung, die später ersetzt wird.
   ' = False
   
   

   ' = True
   Exit Function

ProcessError:
   Msgbox "Error (" & Cstr(Err) & " ) -> " & Error$(Err) & " in line " & Erl & Chr(13) & Error() , 16, strFunctionName
   Exit Function
--------------------------------------------------------------------------------------------   

Unter "Preferences\Domino Designer\ LotusScript Editor \Comment Templates" hinterlege ich das Vorgabe-Kommentar und
die Platzhalter für den Namen des aktuellen Design-Elements und der Funktion:   

--------------------------------------------------------------------------------------------
%REM
   ${element_type} ${element_name}
   Description: Comments for ${element_type}
   @param:  
   @return: ${element_returntype}  
   @date:   ${date}
   @autor:  ${user} (th softwaretechnik)
%END REM
' strFunctionName = "${designelement_type}: ${designelement_name} - ${element_name}"      // Hier wird der Name des Design-Elements gezogen. Funktioniert leider nur im Comment- und nicht im Code-Template.
--------------------------------------------------------------------------------------------

Die  auskommentierte Variablenzuweisung aus dem Kommentar kopiere ich dann einfach in den Funktions-Code.

Da wir alle unsere Funktionen immer sauber kommentieren, fällt es später auf, falls man
die Zuweisung des Funktionsnamens einmal vergessen zu kopieren und diese immer noch im Kommentar steht. ;-)