Hallo, gibt es ne Möglichkeit die Fusszeile per Skript zu setzen ?
Habe mal ein Dokument per DXL exportiert und folgendes erfahren:
<item name='$Footer'>
<rawitemdata type='1'>
jv9gACBEZWZhdWx0IFNhbnMgU2VyaWYAIHhtbHNjaGVtYXMvZAEAAAg0AHxfX19fX19fX19fIFJv
YmVydCBLcmV1dHplciAtIFNlaXRlOiAmcCBfX19fX19fX19ffAAG
</rawitemdata></item>
Da ich leider kein rawitemdata spreche wird es schwierig für mich das zu setzen
???
hmmm hat leider nicht geklappt
habe den Code folgendermaßen probiert.
Dim Workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim exporter As NotesDXLExporter
Dim strExport As String
Dim strChunk As String
Dim strDecode As String
Set doc = Workspace.CurrentDocument.Document
Set exporter = Session.CreateDXLExporter
Call exporter.Setinput(doc)
strExport = exporter.Export
strChunk = getItemValue(strExport,"$Footer")
Call IndexTable
strDecode = Decode64(strChunk)
Get "getItemValue" ist eine Funktion die aus dem DXL-Wust mir nur den Wert holt
Wenn ich nun in die Funktion den Inhalt von oben rein gebe erhalte ich folgendes zurück
Žÿ`
Da hätte aber sowas stehen müssen " Robert Kreutzer Seite - 1"
@Robert:
Hier mal die Routine, um den Inhalt von $Footer auszulesen:
Function GetFooter (doc As NotesDocument) As String
TRY:
Dim ITEM_OBJ As String
Const FOOTER_TEXT_START = 43
ITEM_OBJ = "$Footer"
If Not (doc.HasItem(ITEM_OBJ)) Then
GetFooter = "ERROR: No Footer"
Exit function
End If
irc = NSFItemInfo _
(doc.handle, ITEM_OBJ, Len(ITEM_OBJ),_
item_blockid, idatatype, value_blockid, value_len )
If irc = 0 then
pBuff = OSLockObject _
(value_blockid.pool) + (CLng(value_blockid.block) And &H0FFFF&)
Call ODSReadMemory (pBuff+4, ODS_WORD, ODS_LENGTH, 1)
bufferlen = ODS_LENGTH - FOOTER_TEXT_START
bufferText = Space(bufferLen)
Call ODSReadMemoryStr (pbuff+2 + FOOTER_TEXT_START, _
ODS_WORD, bufferText, CLng(bufferlen))
OSUnLockObject (value_blockid.pool)
GetFooter = buffertext
Else
GetFooter = "ERROR:"
End if
EXIT_HERE:
Exit Function
CATCH:
GetFooter = "ERROR:"
Resume EXIT_HERE
End Function
Und hier noch die ( erste Fassung ) der Schreibroutine:
Function SetFooter (doc As NotesDocument, strFooter As String) As integer
TRY:
Dim ITEM_OBJ As String
ITEM_OBJ = "$Footer"
If Not (doc.HasItem(ITEM_OBJ)) Then
SetFooter = -1
Exit Function
End If
ODS_OFFSET = 0
irc = NSFItemInfo _
(doc.handle, ITEM_OBJ, Len(ITEM_OBJ),_
item_blockid, idatatype, value_blockid, value_len )
pBuff = OSLockObject _
(value_blockid.pool) + (CLng(value_blockid.block) And &H0FFFF&)
Call ODSReadMemory (pBuff+(ODS_OFFSET+4), ODS_WORD, ODS_LENGTH, 1)
Call W32_ODSWriteMemoryStr _
(pbuff + (ODS_OFFSET+2)+43, _
ODS_WORD, strFooter, Len(strFooter))
OSUnLockObject (value_blockid.pool)
Call W32_NSFNoteUpdate (doc.handle, 0)
SetFooter = 0
EXIT_HERE:
Exit Function
CATCH:
SetFooter = 1
Resume EXIT_HERE
End Function
Ein kleiner Hinweis: Da der Code bestimmt irgendwann einmal in irgendein Kundenprojekt einfliessen wird, weise ich vorsorglich schon einmal darauf hin, daß hierzu eine Genehmigung meinerseits erforderlich ist.
Ich habe ein paar Stunden Arbeit und Wissen investiert.
Das versteht sich.
Habe aber noch ein Problem mit der folgenden Zeile
bufferlen = ODS_LENGTH - FOOTER_TEXT_START
Hier kommt bei mir immer -43 raus. Was mache ich da falsch
hmmm kurze nachfrage,
Call W32_ODSWriteMemoryStr _
(pbuff + (ODS_OFFSET+2)+43, _
ODS_WORD, strFooter, Len(strFooter))
müsstes du nicht bei (ODS_OFFSET)+43 anfangen ? ,