Autor Thema: C++ Beispiel für Schreiben, Lesen, etc..  (Gelesen 9332 mal)

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
C++ Beispiel für Schreiben, Lesen, etc..
« am: 30.06.03 - 13:53:21 »
Hallo!

Hat jemand mal ein kleines Programmbeispiel (das er/sie hier auch posten kann), in dem man sehen kann, wie man mit einem in C++ erstellten Programm auf eine Notes-Datenbank lesend oder schreibend zugreifen kann?

Bin gerade dabei, mich in sowas einzuarbeiten und bräuchte ein wenig Unterstützung...(da ich von sowas noch keine Ahnung habe...)  ;)

Danke
MisterDa
Win2k
Designer 5.08

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #1 am: 30.06.03 - 13:59:58 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #2 am: 01.07.03 - 08:37:22 »
Danke!

Das werd ich mir gleich mal anschauen..

MisterDa
Win2k
Designer 5.08

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #3 am: 02.07.03 - 14:48:03 »
Dieser Link mit der Einführung ist echt klasse..

..nur leider hab ich bisher nix gefunden (oder auch gelesen und nich geschnallt  ::) ) wie man z.b. in einem neu erzeugten Dokument die Felder füllt.. ???
Das erzeugen mit einer bestimmten Maske und das speichern is kein Problem..nur das Füllen der Felder eben..

Kann mir da jemand helfen?


Danke
MisterDa
Win2k
Designer 5.08

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #4 am: 02.07.03 - 18:52:14 »
ok, in LS gibt es doc.ReplaceItemValue("ItemName","wert")

in c++ ist das ( z.B.)

Error = Doc.CreateItem("ModTime", TimeFld, LNITEMFLAGS_AUTO_SUMMARY);

wobei gilt

LNSTATUS        Error;
LNDatetimes    TimeFld;

und

LNITEMFLAGS_AUTO_SUMMARY ziegt dem Compiler an, daß der Wert vergleichbar mit LS als Variant gespeichert werden soll

aber du solltest das Büchlein wirklich einmal von vorne bis hinten durcharbeiten ( dauert seine Zeit ) und auch mal in die Samples und die Hilfe zur C++ API schauen. Dann wirst du feststellen, daß es viele Gemeinsamkeiten mit LS gibt.

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 eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #5 am: 02.07.03 - 19:04:29 »
Hier noch ein Beispiel (für das Lesen) aus einer meiner Anwendungen:

Das Beispiel sucht in einer Datenbank nach einem Document ( Form=Setup). Wird es gefunden, holt es sich aus dem Doc mehrere Felder. Das Beispiel stammt aus einem meiner ServerAddins, das Servertasks überwacht. ( die SAP-Erfahrenen werden wissen, was objclient und objsrv sind und wie sich die Domino Tasks verhalten, wenn das SAP heruntergefahren wird )


      //* ============================================================================
      //* Open the ConfigDB and grab the SETUP document
      //* ============================================================================
      session.GetDatabase("obsrvcfg.nsf",&db);
      db.Open();
      options.SetNoteType (LNNOTETYPE_DOCUMENT);
      options.SetBeginDate ("01/01/2000");
      options.SetEndDate (session.GetCurrentDatetime());
      db.Search ("Form=\"Setup\"", &resultDocs, &options);
      //* ============================================================================
      //* Get the interval from the the setup document
      //* ============================================================================
      LNDocument setupDoc = resultDocs[0];
      setupDoc.Open();
      //* ============================================================================
      //* Get the interval field from the setup doc
      //* ============================================================================
      LNText Intervalitem;
      LNString ADDIN_INTERVAL;

      setupDoc.GetItem("Interval", &Intervalitem);
      ADDIN_INTERVAL = Intervalitem [0] ;
      buffer = taskname;
      buffer += " interval = ";
      buffer += ADDIN_INTERVAL;
      buffer += " minutes";
      
      LNNumber num = (ADDIN_INTERVAL);
      interval = num.GetValue();
      addin.AppendLogMessage( buffer );
      //* ============================================================================      
      //* check for valid license key in setup document
      //* ============================================================================
      setupDoc.GetItem("company", &Company);
      strCompany = Company[0];   
      
      setupDoc.GetItem("lic", &License);
      strLic = License[0];   

... hier muß ich dann mal schluß machen..., denn jetzt geht es um Verschlüsselungsalgorithmen zur Lizenzprüfung  ;D

wenn du Fragen zur API hast, bitte hier weiterhin posten. Ich werde versuchen, dir beim Einstieg zu helfen.

eknori
« Letzte Änderung: 02.07.03 - 19:25:18 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 MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #6 am: 03.07.03 - 08:09:20 »
Jo Danke!

Bist echt ne super Hilfe!
Ich hab das Buch bisher bis Seite 82 gemacht, aber da werden die ganze Zeit nur DB's, Masken und andere Designelemente erstellt und nichts darüber gesagt, wie man auf Daten zugreift..  ::)
Sieht auch nicht so aus, als ob da noch was kommen würde, ich machs aber trotzdem noch zu Ende :)
Aber ansonsten ist das Teil Top!  ;D


MisterDa
Win2k
Designer 5.08

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #7 am: 03.07.03 - 14:27:48 »
So, nächstes Problem:

Ich hab ein bisschen Code aus dem Buch genommen und wollte damit ein Dokument meiner eigenen DB befüllen..

...
newDoc.GetItem("MeinFeldName", &subjectItem);
newSubject = "MusterTextblablabla..";
subjectItem(0) = newSubject;

...runde Klammern bei subjectItem(0) natürlich durch eckige ersetzt, die hat er hier aber nicht angezeigt..

Jetz sagt er mir aber bei der Ausführung:
Error: Element des Dokuments nicht gefunden

Als "MeinFeldName" gebe ich den Namen des Feldes an, wie ich es im Designer beim Erstellen genannt habe..

Danke für die Hilfe
MisterDa
« Letzte Änderung: 11.07.03 - 10:19:42 von MisterDa »
Win2k
Designer 5.08

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #8 am: 11.07.03 - 10:22:05 »
Kann mir da keiner helfen?
Ich hab keine Ahnung, wonach ich noch suchen sollte, an was es liegt.. :-\
Win2k
Designer 5.08

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #9 am: 11.07.03 - 10:25:44 »
Hi,

wenn du die C++ API von Lotus(IBM) downgeloaded hast, dann sind da normalerweise auch Beispiele für alles mögliche dabei.

Schau die mal durch. Vielleicht findest du da was.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #10 am: 11.07.03 - 11:00:57 »
da hab ich schon geschaut und die erstellen in allen Programmen, die ich durchgeshen habe immer nur neue Felder..greifen aber nicht auf schon bestehende Felder einer Maske zu...

Was mich eben weng verwirrt ist, dass ich den Code aus nem Beispielprogramm hab (der in dem Buch von dem eknori den Link hier eingetragen hat) und in dem Beispiel funktioniert das auch einwandfrei. Da hab ich dann nur den Feldnamen angepasst und ein Dokument mit einer bestimmten Maske aus meiner DB erstellt...und seitdem findet er angeblich das Feld, auf das er zugreifen soll in der Maske nichtmehr..   :'(
Win2k
Designer 5.08

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #11 am: 11.07.03 - 11:11:09 »
Hi,

leider kann ich dir da (noch) nicht weiterhelfen. Ich habe keine Erfahrungen mit der C++ - API. Ich wußte nur, dass es Beispiele gibt.

Vielleicht hab ich irgendwann mal Zeit mich in dieses Thema einzuarbeiten.

Axel
« Letzte Änderung: 11.07.03 - 11:12:01 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #12 am: 11.07.03 - 11:47:50 »
Oki.
Ich such derweil mal weiter. Falls ich was finde, woran es liegt, dann poste ich das hier rein...

MisterDa
Win2k
Designer 5.08

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #13 am: 13.07.03 - 15:27:18 »
so gehts:

LNText names;      
Doc.CreateItem("textfeld", &names,LNITEMFLAGS_AUTO_SUMMARY, LNITEMOPTION_DELETE_APPEND);
names << "Hier kommt dann der neue Wert rein";
Doc.Save(true);

Ist das Feld noch nicht vorhanden, wird es erstellt; ist es schon da, wird der Inhalt "aktualisiert"
Die Api macht im Prinzip nichts anderes, als das Feld samt Inhalt zu löschen und ein neues Feld zu erstellen. Wichtig ist die Option LNITEMOPTION_DELETE_APPEND. Per DEFAULT werden sonst immer neue Felder mit gleichem Feldnamen erstellt.

eknori
« Letzte Änderung: 13.07.03 - 17:50:26 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 eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #14 am: 13.07.03 - 15:52:37 »
hier noch das komplette Programm

#include <iostream.h>
#include <lncppapi.h>

#define ERR_BUF_SIZE 512

int main(int argc, char *argv[])
{
   char *         DbServer = NULL;
   LNNotesSession  Session;
   LNDatabase      Db;
   LNItem         Item;
   LNSearchOptions   options;
   LNDocumentArray   resultDocs;
   
   LNSetThrowAllErrors(TRUE);
   
   
   try
   {
      Session.Init(argc, argv);
      Session.GetDatabase("sampledb.nsf", &Db, DbServer);
      Db.Open();
      options.SetNoteType (LNNOTETYPE_DOCUMENT);
      options.SetBeginDate ("01/01/2000");
      options.SetEndDate (Session.GetCurrentDatetime());
      Db.Search ("Subject=\"sample\"", &resultDocs, &options);
      LNDocument Doc = resultDocs[0];
      Doc.Open();

      LNText names;
      Doc.CreateItem("textfeld", &names,LNITEMFLAGS_AUTO_SUMMARY, LNITEMOPTION_DELETE_APPEND);
      names << argv[1];

      Doc.Save(true);
      Doc.Close();
   }
   
   catch (LNSTATUS lnerror)
   {
      char ErrorBuf[ERR_BUF_SIZE];
      ErrorBuf[0] = '\0';
      LNGetErrorMessage(lnerror, ErrorBuf, ERR_BUF_SIZE);
      cout << "Error: " << ErrorBuf << endl;
   }
   
   Db.Close();
   Session.Term();
   return(0);
}
« Letzte Änderung: 14.07.03 - 07:06:26 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 MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #15 am: 14.07.03 - 08:02:39 »
Danke eknori!

Jetzt funktionierts..!  :D

Endlich mal ein Erfolg  ;)

MisterDa
Win2k
Designer 5.08

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #16 am: 30.07.03 - 10:21:30 »
Hallo zusammen!
ich hab mal wieder zwei Probleme..

1. Wie komme ich an das aktuelle ID-File des Notes-Users ran? Ich vermute mal das muss ich aus der notes.ini auslesen...aber wie mach ich das, oder wie stelle ich das am geschicktesten an?  ???
Das ganze natürlich in C++..

2. Ich will eine Datenbank per API replizieren. (lokale Replik bereits vorhanden). Aber irgendwie funzt das net..
hier mein bisheriger Code:

LNReplicationOptions options;
LNReplicationStatistics statistics;
LNText fileList;
fileList.Append("verzeichnis1/verzeichnis2/Datenbank.nsf");

options.SetDirection(LNREPLICATIONDIRECTION_BOTH);
options.SetCloseSession(TRUE);
options.SetFileList(fileList);
options.SetFileType(LNREPLICATIONFILETYPE_SPECIFIC);
      
m_NotesSession.Replicate("hierDerServerPfad", options, &statistics);

die Session is ne globale Variable, die woanders schon initialisiert wird und beim Schließen des Programms geschlossen wird.

Danke schonmal für die Hilfe
MisterDa
« Letzte Änderung: 30.07.03 - 10:23:07 von MisterDa »
Win2k
Designer 5.08

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #17 am: 30.07.03 - 10:34:32 »
zu 1)

c++ fällt mir momentan nicht ein, aber in C habe ich das so gelöst

#include <osenv.h>

int TWInterval;

TWInterval = OSGetEnvironmentInt("$OBSRV_Interval");

das gibt es natürlich auch für Strings


BOOL LNPUBLIC OSGetEnvironmentString(
|   const char far *VariableName,
   char far *retValueBuffer,
   WORD  BufferLength);


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.728
  • Geschlecht: Männlich
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #18 am: 30.07.03 - 10:51:53 »
char IDFileSpec[MAXENVVALUE+1];

OSGetEnvironmentString ("KeyFileName", IDFileSpec, MAXENVVALUE)

sollte dir das IDFile in IDFileSpec zurückgeben
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline MisterDa

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
  • Was zählen Schafe, wenn sie nicht schlafen können?
Re:C++ Beispiel für Schreiben, Lesen, etc..
« Antwort #19 am: 30.07.03 - 10:56:31 »
Danke!

oh man, so siehts aus, wenn man den Wald vor lauter Bäumen nicht sieht:  ::) :P (schon fast weng peinlich...  ;))

LNString idFileName;
idFileName.Append(m_NotesSession.GetEnvironmentString("KeyFilename"));
« Letzte Änderung: 30.07.03 - 10:57:22 von MisterDa »
Win2k
Designer 5.08

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz