Autor Thema: Fusszeile per Skript setzen  (Gelesen 10372 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Fusszeile per Skript setzen
« am: 04.02.10 - 11:40:09 »
Hallo, gibt es ne Möglichkeit die Fusszeile per Skript zu setzen ?

Habe mal ein Dokument per DXL exportiert und folgendes erfahren:

Code
<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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Fusszeile per Skript setzen
« Antwort #1 am: 04.02.10 - 11:44:42 »
Musst Du ja nur Base64 decoden.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #2 am: 04.02.10 - 11:46:19 »
Mit welcher Klasse mache ich das ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #4 am: 04.02.10 - 11:49:54 »
@Ulrich

Danke wird direkt probiert
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #5 am: 04.02.10 - 12:04:08 »
 ???

hmmm hat leider nicht geklappt

habe den Code folgendermaßen probiert.

Code
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

Zitat
Žÿ`

Da hätte aber sowas stehen müssen " Robert Kreutzer Seite - 1"
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Fusszeile per Skript setzen
« Antwort #6 am: 04.02.10 - 12:12:29 »
Wenn Du Dir das z.B. auf http://coderstoolbox.net/string/ ansiehst, wirst Du merken, dass da auch Null-Bytes (String-Terminatoren) drinnen sind => daher wird nicht alles ausgegeben.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #7 am: 04.02.10 - 12:46:18 »
:(

Sieht also ganz so aus, als hätte ich keine Möglichkeit darauf zuzugreifen ?

Habe mal den Wert aus dem Chunk gegen nen codierten String ausgetauscht. Hat leider nicht hingehauen. Hat jemand noch ne Idee.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #8 am: 04.02.10 - 13:15:37 »
Na ja, eine Möglichkeit ( oder zwei ) gibt es noch .... A P I  ;D ( oder Midas )

habe mir das mal in NotesPeek angesehen. Das $Footer item ist ein RichTextItem. Diueses besteht bekanntermassen aus CD-records. In diesem Fall eines vom Typ Header. (siehe screenshot)

Sollte also nicht sonderlich schwer sein, den Textanteil zu beeinflussen. Die grundsätzlichen Funktionen dazu habe ich ja ( rücke die aber vor dem EC nicht raus  ;D ;D )

Möchte auch nicht versprechen, dass es in jedem Fall funktioniert; habe es noch nicht getestet.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #9 am: 04.02.10 - 13:23:01 »
Habe die Definition in der C-API Reference gefunden, aber noch leider nicht verstanden wie ich es jetzt setzen soll. Der Aufbau ist ja sauber beschrieben.

Zitat
...( rücke die aber vor dem EC nicht raus  Grin Grin )...

Was ist EC ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #10 am: 04.02.10 - 13:34:22 »
EC = Entwickler Camp
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #11 am: 04.02.10 - 13:40:46 »
 :-[

Ja zu offensichtlich.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #12 am: 05.02.10 - 08:12:04 »
Ein anderer Weg als über die API ist der "Window Title" In den Footer kommt dann ein &W. Das wird dann automatisch befüllt. Und im Windows Title kannst du ja Formeln verwenden. Weiss nicht, ob es auf deine Anforderungen passt, aber wäre ein Weg.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #13 am: 12.02.10 - 07:43:04 »
@Robert:
Hier mal die Routine, um den Inhalt von $Footer auszulesen:

Code
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

« Letzte Änderung: 12.02.10 - 08:11:15 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #14 am: 12.02.10 - 08:56:32 »
Danke !!! Schaue ich mir gleich mal an
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #15 am: 12.02.10 - 09:01:39 »
Und hier noch die ( erste Fassung ) der Schreibroutine:

Code
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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #16 am: 12.02.10 - 11:59:03 »
Das versteht sich.

Habe aber noch ein Problem mit der folgenden Zeile

Code
bufferlen = ODS_LENGTH - FOOTER_TEXT_START

Hier kommt bei mir immer -43 raus. Was mache ich da falsch
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #17 am: 12.02.10 - 12:22:34 »
Wie ist denn ODS_LENGTH deklariert? Muss Long sein.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #18 am: 12.02.10 - 14:48:46 »
So es funktioniert nun, aber ich kann es noch nicht verwenden weil  ich es noch nicht verstanden habe.

Aber ich und sicherlich tausend andere danken dir.  :love: :love: :love: :love:
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fusszeile per Skript setzen
« Antwort #19 am: 12.02.10 - 14:52:05 »
Die Schreibroutine ist noch nicht sauber und schmeisst eine Runde Napalm in den Rechner, wenn der neue Inhalt des Footers > alter Inhalt ist.
 
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz