Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mleussner am 22.07.08 - 08:36:45

Titel: Dokumentenzugriffszähler
Beitrag von: mleussner am 22.07.08 - 08:36:45
 :)

Hallo an alle,

vielleicht habe ich ja mit dieser Frage mehr Glück. Ich versuche für eine Info-DB einen Dokumentenzugriffszähler zu bauen, der sowohl im Intra- als auch im Internet funzt.

Also hab ich mir einen Agenten geschrieben, der mit Adminberechtigung im Queryopen-Event ein Zählerfeld im Dokument hochzählt. Das funzt auch schon im Notes.

Übers Internet soll der Agent im WebQueryOpen gestartet werden.

@URLOpen("http://N-02/TestWebZugriff/schulunt.nsf/counter?openAgent")

Das klappt gar nicht.  :(

Das Feld wird in keinster Weise editiert.

Zusätzlich tauchen im Serverlog die folgenden Meldungen auf:

22.07.2008 08:26:14   HTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringFile does not exist [/notes-apps/VGH-Infocenter/vghinfocenter.nsf/infocenter_forms.css?openPage]
22.07.2008 08:26:14   HTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringFile does not exist [/notes-apps/VGH-Infocenter/vghinfocenter.nsf/btn_print.gif?OpenImageResource]
22.07.2008 08:26:14   HTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringHTTP: Missing resource stringFile does not exist [/notes-apps/VGH-Infocenter/vghinfocenter.nsf/btn_closewin.gif?OpenImageResource]

Welchen Fehler mache ich denn da? Ich finds einfach nicht.
Titel: Re: Dokumentenzugriffszähler
Beitrag von: DerAndre am 22.07.08 - 08:55:43
Hm, habe zwar keine Ahnung von dem Webgedingse, aber die angemaulten Ressourcen sind auch da und für das Web angehakt?
Titel: Re: Dokumentenzugriffszähler
Beitrag von: DAU-in am 22.07.08 - 09:14:05
Vielleicht bin ich ja blöde, aber das sind doch alles Bildressourcen, die da angemeckert werden?
Die haben doch wahrscheinlich nichts mit der Ausführung des Agenten zu tun, sondern mit dem Öffnen der Maske?
Gib dem Agenten einen (selbstgeschriebenen) Log mit bzw. lass ihn irgendetwas wegschreiben, damit du siehst, ob der Agent überhaupt anspringt.

grüsse

Dau-in
Titel: Re: Dokumentenzugriffszähler
Beitrag von: mleussner am 22.07.08 - 16:11:52
@Dau-In: Ja, hast Recht. Das Problem war nicht dort zu suchen.

Der Agent bringt, glaub ich, lediglich die Meldungen

22.07.2008 11:09:59   33:78
22.07.2008 11:10:07   33:7A

bzw.

22.07.2008 10:56:21   33:32
22.07.2008 10:56:21   33:33
Was immer das zu bedeuten hat?!?

Ich habe jetzt noch mal rumprobiert und einiges geändert.
Jetzt krieg ich Ausgaben ins Serverlog:

22.07.2008 14:15:49   HTTP JVM: gestartet
22.07.2008 14:15:49   HTTP JVM: Count = 9
22.07.2008 14:15:49   HTTP JVM: NotesException: Notes error 4323
22.07.2008 14:15:49   HTTP JVM:    at lotus.domino.local.Database.NgetDocumentByID(Native Method)
22.07.2008 14:15:49   HTTP JVM:    at lotus.domino.local.Database.getDocumentByID(Unknown Source)
22.07.2008 14:15:49   HTTP JVM:    at JavaAgent.NotesMain(JavaAgent.java:19)
22.07.2008 14:15:49   HTTP JVM:    at lotus.domino.AgentBase.runNotes(Unknown Source)
22.07.2008 14:15:49   HTTP JVM:    at lotus.domino.NotesThread.run(NotesThread.java:249)

Soweit so gut.
Und nun?
Titel: Re: Dokumentenzugriffszähler
Beitrag von: WernerMo am 22.07.08 - 16:27:47
Hallo

eine Datenbank mit allen Noteserrrorcodes gibts u.a. hier:
http://www.konfabulieren.com/2004/12/09/database-of-all-notes-error-codes/

Gruß Werner
Titel: Re: Dokumentenzugriffszähler
Beitrag von: DerAndre am 22.07.08 - 16:28:20
Ist das Richtig:

NgetDocumentByID ??
Titel: Re: Dokumentenzugriffszähler
Beitrag von: mleussner am 22.07.08 - 16:34:30
@DerAndre: steht so im Log aber nicht im Agent.

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

        try {
          Session session = getSession();
             Database db;
              AgentContext agentContext = session.getAgentContext();
         db = agentContext.getCurrentDatabase();
              Agent ag1 = agentContext.getCurrentAgent();
              String paramid = ag1.getParameterDocID();
       
          System.out.println("gestartet");
          // (Your code goes here)
           DocumentCollection dc = agentContext.getUnprocessedDocuments();
            System.out.println("Count = " + dc.getCount());
            Document doc = dc.getFirstDocument();
             if (doc.isValid())
                System.out.print( doc.getItemValueString("Beitrag"));
             
             String numStr = doc.getItemValueString("Access_counter");
             System.out.println("Counter steht auf: " + numStr );
             String numStr2;
          if (numStr.equals(" ") || numStr.equals("")) {
              numStr2 = new String("1");
                }
          else {
              Integer numInt = new Integer(numStr);
              int num = numInt.intValue() + 1;
              Integer numInt2 = new Integer(num);
              numStr2 = new String(numInt2.toString());
              }
           
          doc.replaceItemValue("Access_counter", numStr2);
          doc.save(false, false);
         
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
Titel: Re: Dokumentenzugriffszähler
Beitrag von: m3 am 22.07.08 - 17:28:54
Code
if (doc.isValid())
                System.out.print( doc.getItemValueString("Beitrag"));
             
             String numStr = doc.getItemValueString("Access_counter");

Du machst den check, ob doc valid ist, wenn dem nicht so ist, machst Du mit doc.getItemValueString weiter? Ob das gescheit ist?

Weiter kannst Du mit iSvalid nicht prüfen, ob doc überhaupt auf ein NotesDocument Objekt zeigt oder nicht (was vermutlich Deine Intention ist). Aus der Designer-Hilfe:
Zitat
Indicates whether a Document object represents an existing document (not a deletion stub) initially.
Titel: Re: Dokumentenzugriffszähler
Beitrag von: koehlerbv am 22.07.08 - 17:41:49
... Weiter kannst Du mit isValid nicht prüfen, ob doc überhaupt auf ein NotesDocument Objekt zeigt oder nicht ...

Korrekt - wirkliche "Geisterdokumente" (wegen defekten internen Tables) bekommt man so nicht zu fassen, die werden trotzdem mit IsValid quittiert. Das müsste man dann mit .HasItems kombiniert werden.

Ich kann mir aber nicht vorstellen, dass das das eigentliche Problem ist.

Bernhard

PS: Was sich mir nicht erschliesst - warum wird überhaupt eine unterschiedliche Routine im Notes und für den HTTP-Task verwendet? Einmal LS und einmal Java? Ob das noooot tut?
Titel: Re: Dokumentenzugriffszähler
Beitrag von: mleussner am 23.07.08 - 07:43:47
@m3: ich bin der Meinung, ich prüfe auf das Vorhandensein des docs und gebe im positiven Falle eine Meldung aus? Oder fehlen da irgendwelche Klammern?

@Bernhard: Tuuut wahrscheinlich nicht not. Aber ich bin mir bei dem HTTP-Geraffel eben nicht so sicher.

Mittlerweile bin ich auch weiter gekommen. Die Fehlermeldung im Javateil hat mich auf die Spur gebracht.
Ich habe da nämlich bei der Collection nur noch ein Doc zurückbekommen.
Das habe ich mit getfirstdoc geholt und da hat dann auch das hochsetzen des Zählers geklappt.

Insgesamt bin ich mir auch nicht sicher, ob das der richtige Weg ist. Aber der Kunde möchte wissen, welche Dokumente wie oft geöffnet werden, um überhaupt einen Überblick über die Nutzung dieser Info-DB zu bekommen.

Die DB domcount.nsf aus dem Sandbox-Download scheint ja ähnliches zu machen.
Aber wohl nur auf DB-Ebene und nicht für jedes Doc einzeln.

Ich bedanke mich schon mal für die Hilfe. Vielleicht weiß ja der eine oder andere, wie man die domcount.nsf sinnvoll verwendet und konfiguriert.
Titel: Re: Dokumentenzugriffszähler
Beitrag von: eknori (retired) am 23.07.08 - 07:52:49
Gucke dir einmal den Audit Manager an. http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/Audit%20Manager

In der Beschreibung steht, daß man damit Changes dokumentieren kann. Bin mir aber ziemlich sicher, daß es auch einen READ Event gibt.
Titel: Re: Dokumentenzugriffszähler
Beitrag von: mleussner am 24.07.08 - 13:43:28
Ja, scheint ne Super Anwendung zu sein.

Nur leider für Windows.
Das wars denn für mich.

Trotzdem Danke.
Titel: Re: Dokumentenzugriffszähler
Beitrag von: m3 am 24.07.08 - 13:53:24
@m3: ich bin der Meinung, ich prüfe auf das Vorhandensein des docs und gebe im positiven Falle eine Meldung aus? Oder fehlen da irgendwelche Klammern?
Das if fällt schon auf die Dchnautze, wenn doc kein vernüftiger Wert zugewiesen wurde. isValid prüft nicht. ob Dokument vorhanden ist, sondern, ob es sich bei dem Dokument um ein "normales" Dokument, oder ein Deletion-Stub handelt (siehe Designer-Hilfe).

Was mich irritiert ist, dass Du, wenn das IF (wenn es denn mal richtig wäre) ergäbe, dass es kein dokument gibt, zwar eine Meldung ausgibst, dann aber fröhlich mit dem doc weiter arbeitest.

Aber Du wirst schon wissen, was Du tust.  ;D