Autor Thema: LSX Toolkit - wie kommt man an ForeignObject ran?  (Gelesen 4388 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
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;

   //}}
}

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 ??
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
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #1 am: 27.09.06 - 07:47:54 »
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");
   }


   
 
}
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #2 am: 04.10.06 - 08:31:43 »
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...
sagt Mark.



slowfood.de

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #3 am: 04.10.06 - 09:02:46 »
Zitat
magst du sagen, was du mit dem LSX-Toolkit vorhast?

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?

Definitiv JA !

Zitat
Wie lange würde es genau dauern?
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.




 
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #4 am: 04.10.06 - 09:19:09 »
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...
sagt Mark.



slowfood.de

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #5 am: 04.10.06 - 09:26:59 »
DAS LSX Toolkit ist ein wenig komplizierter als eine einfache DECLARE ... . Wie gesagt, die C-API in einer DLL zu verwursten und die Funktionen mittels DECLARE ... in LS einzubinden , das ist nicht das Problem.
Bei diesen RichtextGeschichten ist das aber eine Frage, wie komfortabel man das letztendlich in LS einbindet. Da ist unter umständen das RichtextFeld eines Documents aus einer anderen Datenbank beteiligt. Zudem muss man ja erst einmal feststellen, aus welchem Dokument in welcher Datenbank die Funktion aufgerufen wird. Das ist nicht soooo kompliziert, würde aber die Bedienbarkeit sehr verkomplizieren.

Das LSX Toolkit erledigt diese Arbeiten quasi im Hintergrund ...

Und Julian Robichaux habe ich dahingehend schon befragt ... Nächste Station ist Bill Buchan ( der  hat schon mal was mit LSX gemacht )
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Glombi

  • Gast
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #6 am: 04.10.06 - 09:43:16 »
Hi Ulrich,

vielleicht solltest Du das noch direkt im Forum von Penumbra reinstellen. Wenn die es nicht wissen, wer dann?

http://www.penumbra.org/lwcm/publish.nsf/Content/StartForum

Andreas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #7 am: 04.10.06 - 09:47:50 »
@Andreas: Das Offensichtliche ist oft nicht so offensichtlich ...

Ich wußte, ich hatte was übersehen ...
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
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #8 am: 10.10.06 - 10:58:03 »
'%@@@@@****!!!!  :P :P :P :P :P !!**@@@@ AAAAAAARRRRRRRRRGGGGGGHHHHHHHHHHHHHH !!!
warum kackt das denn immer ab ??

Zitat
   LNSetThrowAllErrors (TRUE);

   NotesDocument nDoc;
   NOTEHANDLE hNote;

   nDoc=RTitem.GetProp(CNOTES_IPROP_PARENT).getForeignObject();
   hNote=(NOTEHANDLE)nDoc.GetProp(CNOTES_NPROP_HANDLE).getLong();
   NSFNoteGetInfo(hNote, _NOTE_DB, &hDatabase);

   try
   {
   Session->GetDatabase(hDatabase, &Database);
   Database.Open(LNDBOPENFLAGS_NO_USER_INFO);
   }
   catch(...)
   {
      return 1;
   }
   
   
   return 0;

Sorry, musste ich mal loswerden, bevor hier nich ein Kolleg zu Schaden kommt ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #9 am: 10.10.06 - 11:11:35 »
als nicht-C-Kenner kann ich dir sicher nicht helfen, aber ich kann ja mal ein paar schlaue Vorschläge machen.
Ich weiss zwar auch nicht was wo abkackt aber wie steht es damit:

Code
nDoc=RTitem.GetProp(CNOTES_IPROP_PARENT).getForeignObject();
hNote=(NOTEHANDLE)nDoc.GetProp(CNOTES_NPROP_HANDLE).getLong();

Du nutzt hier .getForeignObject() und getLong() von den übergeordneten Objekten GetProp(...). Kann es sein, dass die Objekte null sind?

Mehr fällt mir dazu auch nicht ein, aber du wirst ja sowieso bald auf die Lösung kommen. Trink mal einen Lotus-Tee und schalte 5min ab dann klappt es bestimmt  O0
sagt Mark.



slowfood.de

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: LSX Toolkit - wie kommt man an ForeignObject ran?
« Antwort #10 am: 14.10.06 - 13:10:40 »
Irgendwie bekomme ich das mit der LSX nicht gebacken. Da muss ich mich noch einmall intensiver mit beschäftigen.

Um das Thema aber vorerst einmal positiv abzuschließen, habe ich hier http://www.eknori.de/archives/348 eine Lösung basierend auf einer DLL zur Verfügung gestellt.
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