Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Dr.Domino am 30.09.05 - 15:07:03
-
Hallo,
kann jemand dieses kurze C Programm vielleicht in ein LotusScript Progrämmchen/
Agenten übersetzen?
Hintergrund: Sync-Problem mit einem Sony Ericsson wahrscheinlich auf Grund
defekter Kalendereinträge ... Code und Idee ist aus Notes.net.
Workflow:
-> Meetings-Fodler druchlaufen
-> Überprüfen auf fehlenden oder zero-sized Body
-> Diesen dann reparieren und einen Nootzitext einfügen (FIXSync)
-> während des Laufen Treffer anzeigen
Leider habe ich keinen C-Compiler :-(
Vielen Dank im Voraus!
#include <stdlib.h>
#include <stdio.h>
#include <lncppapi.h>
void main( int argc, char *argv[] )
{
LNNotesSession session; // create session object on stack
LNDatabase db; // Create LNDatabase object
LNViewFolder view; // Create LNViewFolder object
LNVFEntry entry; // Working entry
char *call= "None"; // Current call
int count;
int c;
int fix = 0;
if (argc == 2 && !strcmp(argv[1], "-fix"))
fix = 1;
LNSetThrowAllErrors(TRUE);
try
{
call = "Init";
session.Init();
call = "GetDatabase";
session.GetDatabase("c:\\Lotus\\Notes\\Data\\<your database here>.nsf", &db);
call = "Database Open";
db.Open();
call = "GetViewFolder";
db.GetViewFolder("Meetings", &view);
call = "View Open";
view.Open();
call = "View GetEntryCount";
count = view.GetEntryCount();
if (count != 0)
{
call = "GotoFirst";
view.GotoFirst(&entry);
for (c = 0; c < count; ++c)
{
LNDocument doc;
LNText text;
call = "Entry GetDocument";
entry.GetDocument(&doc);
call = "Document Open";
doc.Open();
call = "Document HasItem";
if (!doc.HasItem("Body") || doc.GetItemType("Body") != LNITEMTYPE_RICHTEXT)
{
LNString str;
call = "Document GetItem Subject";
doc.GetItem("Subject", &text);
call = "Text GetText";
text.GetText(&str);
printf("Found missing body item %d \"%s\"", c, (const char *)str);
if (fix)
{
LNRichText rtext;
call = "rtext SetValue";
rtext.SetValue("FIXSYNC1");
call = "CreateItem";
doc.CreateItem("Body", rtext, LNITEMFLAGS_AUTO_SUMMARY, LNITEMOPTION_DELETE_APPEND);
printf(" FIXED");
}
printf("\n");
}
else if (doc.HasItem("Body") && doc.GetItemType("Body") == LNITEMTYPE_RICHTEXT)
{
LNRichText rtext;
doc.GetItem("Body", &rtext);
if (rtext.GetValueSize() == 0)
{
LNString str;
call = "Document GetItem Subject";
doc.GetItem("Subject", &text);
call = "Text GetText";
text.GetText(&str);
printf("Found empty body item %d \"%s\"", c, (const char *)str);
if (fix)
{
rtext.SetValue("FIXSYNC2");
printf(" FIXED");
}
printf("\n");
}
}
if (fix)
{
call = "Document Save";
doc.Save();
}
call = "Document close";
doc.Close();
call = "View GotoNext";
view.GotoNext(&entry);
}
}
call = "View Close";
view.Close();
call = "Database close";
db.Close();
call = "Session term";
session.Term();
}
catch(LNSTATUS error)
{
char errorBuf[LNERROR_MESSAGE_LENGTH];
LNGetErrorMessage(error, errorBuf);
printf("Error: [%s] %s\n", call, errorBuf);
}
}
-
Compiler: http://www.thefreecountry.com/compilers/cpp.shtml
-
kann jemand dieses kurze C Programm vielleicht in ein LotusScript Progrämmchen/
Agenten übersetzen?
Cool. "Dr. Domino" (Domino ist in C / C++ geschrieben !) kann kein C ...
Weiterhin: Der gepostete Code ist unvollständig.
Und ja: Das kann man mit hoher Wahrscheinlichkeit (Rest des Codes vorausgesetzt) in LS übersetzen. Frage an "Dr. Domino": Welchen Stundensatz akzeptierst Du ?
Bernhard
-
Nimm den Code, kopier ihn in einen Agenten, und pass die Syntax überall da, wo's rot wird, an die LotusScript- Syntax an. Du musst nicht mal viel übersetzen (ausser dem Try-Catch-Block, das wird ein on error Statement).
Wenn Du das nicht selbst hinkriegst, dann stimme ich Bernhard zu: dann musst Du Dir das nötige Wissen einkaufen. Wir können hier den Denkanstoss in die richtige Richtung geben, auch teillösungen präsentieren, aber da viele von uns selbst Dienstleister sind, und von genau solchen Dingen leben, wirst Du (wahrscheinlich, es sei denn, es gibt einen guten Samariter) niemanden finden, der Dir so ne komplettlösung für lau strickt.
Gruß
Tode