Autor Thema: Formelfeld im Hintergrund erstellen  (Gelesen 1351 mal)

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Formelfeld im Hintergrund erstellen
« am: 15.05.08 - 14:15:32 »
Hallo zusammen,

bin gerade dabei ein Script zu schreiben, mit welchem ich ein Formelfeld erstellen und befüllen will.
Habe auch Input von LS2CAPI von Normund Kalnberzins.

Ich komme da aber an einer Stelle nicht weiter und zwar, wo die Formel vom Unicode in das LMBCS (???) - Format gebracht wird. Danach soll die Formel kompiliert werden, aber ich bekomme einen Formelfehler selbst bei @All.

Code
Public Sub writeFormula (formula As String, doc As Notesdocument, iname As String)
	  Dim irc As Integer, formula_buffer As blockid
	  Dim rethFormula As Long, retFormulaLength As Integer, retCompileError As Integer, wdc As Integer
	  Dim pFormula As Long, lenFormula As Integer, pFormulaCompiled As Long
' pointer for the new item
	  Dim pBuff As Long
	  Dim memMan As New memoryManagerExt

	  pFormula = memMan.newBuffer (3*Lenb(formula))

Problem1 ->>	lenFormula = W32_OSTranslateFromStr (OS_TRANSLATE_UNICODE_TO_LMBCS, formula, Lenb(formula), pFormula, 3*Lenb(formula))

Problem2->>	irc = W32_NSFFormulaCompilePtr (0, 0, pFormula, lenFormula, rethFormula, retFormulaLength, retCompileError, wdc, wdc, wdc, wdc)

	
	  If irc<>0 Then
	  	       Print "*", formula, getError(irc)
	  Else
		       'We use formula_buffer block below as an input for decompileFormula routine.
		       formula_buffer.pool = rethFormula
		       formula_buffer.block = 0
		       'Then we obtain the pointer to the buffer containing the compiled formula
		       pFormulaCompiled = W32_OSLockObject (rethFormula)
		       'and write it to the item of TYPE_FORMULA.
		       irc = W32_NSFItemAppend(doc.handle, 0, iname, Len(iname), TYPE_FORMULA, pFormulaCompiled, Clng(retFormulaLength))
		       'You may uncomment the next line to provide a “sanity check”: verify the formula just written.
		       Print irc, "*decompile", decompileformula(formula_buffer)
'		       Finally we unlock the buffer and release the memory.
		       Call W32_OSUnlockObject (rethFormula)
		       Call W32_OSMemFree (rethFormula)
	  End If
End Sub


Der Fehlercode ist die 1281 (Formelfehler).
Hat da schonmal jemand mit der CAPI was gemacht, compiliert o.ä. und kann mir ein paar Tipps geben.
Dann könnte ich Regeln verteilen, ohne das die User etwas machen müssen.
Der Rest ist auch schon fertig, nur dieses Formelfeld treibt mich zur Weissglut.

mfg

Kjeld
« Letzte Änderung: 16.05.08 - 08:41:29 von gossifu »
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Re: Formelfeld im Hintergrund erstellen
« Antwort #1 am: 15.05.08 - 14:47:24 »
Womit mir auch geholfen wäre, wenn mir jemand sagt, wie ich im Hintergund ein Item mit dem Type Formel (1356) erstelle,
dann kann ich das bestücken.
Ich habe auch mit einer Hilfsmaske gearbeitet, die ein Formelfeld enthält. Die Formel dort eingetragen, ComputeWithForm, Item in das Profil kopiert. Blieb aber ein Textfeld. :'(

mfg

Kjeld
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Re: Formelfeld im Hintergrund erstellen
« Antwort #2 am: 16.05.08 - 08:41:04 »
Hallo zusammen,

habe beim googlen diesen Link gefunden: http://www.eknori.de/2005-10-15/check-formula-syntax/.

Habe dann die Deklaration der Function
Code
W32_NSFFormulaCompilePtr 
umgestellt und es klappt. Der dritte Paramater ist bei LS2CAPI ein Long und bei Eknori ein LMBCS-String. Mit dem String funktionierts. ;D Danke Enori.
Jetzt kann ich das Kalenderprofil durchgehen, verschiebe die Regeln um eine Stufe, schreibe meine Filterregel in das Feld $FilterFormula_1.
In $FilterFormula und $FilterFormula_0 stehen ja die Regeln für die MiniView. $FilterFormulaCount wird eins hochgezählt.
Außerdem zähle ich die OrderNum der Regeldokumente 1 hoch und schon hat alles seine Richtigkeit.
Bei neuen User wird durch unser Anlage-Tool das Kalenderprofil gleich richtig bestückt.
Und natürlich habe ich darauf geachtet, dass die JunkMail-UNID bei jedem User separat gesetzt wird.

mfg

Kjeld
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Formelfeld im Hintergrund erstellen
« Antwort #3 am: 16.05.08 - 08:44:53 »
Respekt!

Bernhard

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Re: Formelfeld im Hintergrund erstellen
« Antwort #4 am: 16.05.08 - 10:17:26 »
Achso, wichtig ist noch, das man in der Rules-Scriptbibliothek in der Funktion CompactMailRules, den Vorgabewert pro Regel um 1 erhöht.

Code
                  '//Reset counter
                  nTotalEnableRules = 2 ' Vorgabe war hier 1

mfg

Kjeld
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz