Lotus Notes / Domino Sonstiges > Companion Products
LSX Toolkit - wie kommt man an ForeignObject ran?
eknori (retired):
nachdem ich mir jetzt schon seit ein paar Stunden die Finger breche, muss ich doch mal fragen, ob jemand schon einmal mit dem LSX Toolkit gearbeitet hat und mir eine kleine Frage beantworten kann.
Wie komme ich an das rtItem in folgendem Code ran ?
--- Zitat ---LSSSHORT rtex::DoStuff(NotesRichTextItem& rtItem)
{
//{{LSX_AUTHOR_CODE_Method_Insert
LNRichText rtA;
return 0;
//}}
}
--- Ende Zitat ---
Wie kriege ich den Wert in das rtA ? Ich weiss, daß ich die ForeignObjects nicht direkt in ein LNRTitem übernehmen kann und daß ich da wohl erst irgendwie das zugehörende LNDocument ausfindig machen muss.
Kann mir das bitte mal jemand anhand der o.a. Methode zeigen ??
eknori (retired):
Na, so langsam wird es
--- Zitat ---LSXString NotesRichTextItemExt::Insert(NotesRichTextItem& rtItem)
{
NotesDocument doc;
LNDatabase m_LNDB;
LNDocument m_LNDoc;
doc = rtItem.GetProp(CNOTES_IPROP_PARENT).getForeignObject();
// get doc note handle
NOTEHANDLE noteHandle = (NOTEHANDLE) doc.GetProp(CNOTES_NPROP_HANDLE).getLong();
// get doc database note handle
NOTEHANDLE m_DBHandle;
NSFNoteGetInfo(noteHandle, _NOTE_DB, &m_DBHandle);
try
{
return LSXString("SUCCESS");
}
catch (LNSTATUS Lnerror)
{
char ErrorBuf[128];
LNGetErrorMessage(Lnerror, ErrorBuf, 128);
LSXSetErrorCode(LSX_ERROR);
return LSXString("ERROR");
}
}
--- Ende Zitat ---
Mark³:
magst du sagen, was du mit dem LSX-Toolkit vorhast?
Wir könnten z.B. eine Funktion brauchen die Links in Hotspots von Dokumenten ändert. Dies geht doch nur mit C-API oder teuren Tools wie Midas RT LSX oder Configurator, oder?
Wäre es schwer, sowas zu schreiben, wenn man (ich) kein C kann? >:D Wie lange würde es genau dauern? ;D
Vielleicht genügt am Anfang erstmal ein allgemeines Statement, ob du meinst das geht relativ einfach oder das ist total kompliziert...
eknori (retired):
--- Zitat ---magst du sagen, was du mit dem LSX-Toolkit vorhast?
--- Ende Zitat ---
Ich denke, daß man schon anhand des FunktionsKopfes weiter oben erkennen kann, daß ich an einer LotusScript Erweiterung schreibe, die es ermöglicht, Richtext in richtext einzufügen.
Das funktioniert ja auch mit DXL, wie ich ja bereits schon bewiesen habe. Nach Durchsicht der C-API habe ich festgestellt, daß die Funktionen zum Einfügen von RT in RT schon länger vorhanden sind ( von IBM aber nicht in die NotesRichtext Klasse übernommen wurden; warum auch immer )
Die C-API Funktionen habe ich bereits in eine DLL gepackt. Das funktioniert auch ganz gut, ist aber nicht so toll in Script zu integrieren, da doch sehr viele Parameter übergeben werden muessen. ( Datenbank, Server, WoKommtRTHer, WoSollEsHin, Optionen)
Die LSX bietet einen sehr komfortablen Wizard, um den CodeRumpf der Erweiterung generieren zu lassen. Den ganzen Overhead möchte ich auch ehrlich gesagt nicht wirklich selber programmieren müssen. Da sind gut und gerne 5.000 - 10.000 zeilen Code um die eigentliche Funktion herum programmiert.
der Vorteil ist aber, daß man die Erweiterung wie jede LS Klasse per Script ansprechen kann.
Auch das funktioniert mit einfachen Objekten wie String oder Integer perfekt.
Leider fehlt mir aber das KnowHow, wie man entfernte Objekte anspricht ( also in diesem Fall das RT Feld aus einem bestimmten Document in einer bestimmten Datenbank )
Die grundsätzliche Vorgehensweise habe ich schon verstanden, aber in der Umsetzung ist das schwieriger, als erwartet.
Daher auch hier gleich die Antwort auf deine Frage
--- Zitat ---sowas zu schreiben, wenn man (ich) kein C kann?
--- Ende Zitat ---
Definitiv JA !
--- Zitat ---Wie lange würde es genau dauern?
--- Ende Zitat ---
Die DLL z.B. habe ich innerhalb von 30 Minuten geschrieben ...
Grundsätzlich hängt das immer davon ab, inwieweit die C-API die gewünschten Funktionen schon zur Verfügung stellt. Wenn man da erst beim Urschleim anfangen muss, kann das unter Umständen lange dauern.
Ich habe mir deine Herausforderung gerade mal kurz in der AI angesehen. Das müsste über die Methode
LNHotspot::GetRichText
möglich sein.
So wie ich das sehe, bekommt man dann den teil des RT-Feldes, der die relevanten Dinge zum Hotspot beinhaltet. So auch die URL. Aus der API geht auch herbvor, daß man auf den Rückgabewert alle Methoden der LNRichText Klasse anwenden kann. Also auch ein SearchAndreplace.
Machbar ist Alles. It's only code.
Mark³:
man kann doch mit 'Declare Function' auch aus LotusScript auf C-Funktionen zugreifen. Kann man auf diese Weise nicht alle Funktionen ansprechen? Oder geht das, ist aber viel komplizierter als direkt in C das zu machen? Auf nsftools gibts ein paar Tips dazu aber mir fehlt etwas die Übersicht ob sich das lohnt diesen Weg einzuschlagen oder nicht...
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln