Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

programm code posten zur Diskussion

<< < (2/5) > >>

qojote:
Okay Anforderung war einfach aus einer Relationalen Db infos in eine Notesdb zu holen primärschlüssel ist die Kundennummer.

Hier der Code.

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;
public class JavaAgent extends AgentBase {

   public void NotesMain() {

      try {
            //logdateien setzen und Konfigdokumente holen         
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            Database db = agentContext.getCurrentDatabase();
            View view=db.getView("(agents)");
            Document doc = view.getDocumentByKey("Import",true);
            Log dblog=session.createLog(doc.getItemValueString("Log_Eintrag"));
            dblog.openNotesLog(doc.getItemValueString("Log_db_server"),doc.getItemValueString("Log_db_path"));
            
            sql sql1=new sql();
            Verarbeitung verb=new Verarbeitung(session,doc,dblog,sql1);
            verb.process();
         
            view.recycle();
            db.recycle();
         
         }
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
}
}

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;


public class Verarbeitung
{
  public Document doc;
  public Document berichtdoc;
  public Document docnl;
  public Database db2;
  public Log dbLog;
  public String server;
  public String pfad;
  public String logtext;
  public Session session;
  public DocumentCollection dc;
  public View view;
  public sql sql1;
  public int i=0;
  public String kunden;
  public String sdatum;
  public Date sdatum2;
  public SimpleDateFormat sd=new SimpleDateFormat("mm.dd.yyyy ");
  public Date ddatum=new java.util.Date();      
  public Date lastrun=new java.util.Date();
  public String createdoc;
  public String makenull;
  public String kdnrupdate="0";
  public Verarbeitung(Session session,Document doc,Log dbLog,sql sql1)

{
   this.doc=doc;
   this.session=session;
   this.dbLog=dbLog;
   this.sql1=sql1;
try {   
this.dc=doc.getResponses();
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
}


public void process()
{

try {   
docnl=dc.getFirstDocument();   
while (docnl!=null)
{
   //informationen aus Konfigdoc holen z.b.sql
   i=0;
   server=docnl.getItemValueString("server");
   db2=session.getDatabase(server,docnl.getItemValueString("db_path"));
   makenull=docnl.getItemValueString("makenull");   
   view=db2.getView(docnl.getItemValueString("notes_view"));
   String sqlstatment=docnl.getItemValueString("sql");
   String btrida=docnl.getItemValueString("btrida");
   dbLog.logAction("Start der Verarbeitung für "+ btrida);
   String date=docnl.getItemValueString("Last_run");
   sql1.getrs(sqlstatment);
   sdatum=sd.format(lastrun);
   String useit=docnl.getItemValueString("use_it");
if(useit.equals("ja"))
{   
   while (sql1.rs.next() )
   {
            
         
         
      kunden=sql1.rs.getString("APAIDN");
      kunden=kunden.trim();
      
      if (makenull.equals("ja"))         
            {            
            kunden="0"+kunden;
            DocumentCollection dc2=view.getAllDocumentsByKey(kunden);
            if (dc2.getCount()<=0)
            {
                  dbLog.logError(1,"Kunde nicht vorhanden"+ kunden);
                  
                  }
            
               else
               {
                  this.updatebericht(dc2);
                  i=i+1;
                  }
            }
      else
            {
                  DocumentCollection dc2=view.getAllDocumentsByKey(kunden);
                  if (dc2.getCount()<=0)
               {      
               
                  dbLog.logError(1,"Kunde nicht vorhanden"+ kunden);
               
               }
               else
               {
                  this.updatebericht(dc2);
                  i=i+1;
                  }
            }      
}
}
dbLog.logAction("Es wurden "+i+ "Kunden in"+btrida+" geupdatet");
sdatum="'"+sdatum+"'";
docnl.replaceItemValue("last_run",sdatum);
docnl.save();
docnl=dc.getNextDocument();
}
sql1.con.close();
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }
      
      
}


   public void updatebericht(DocumentCollection dc)
{
DocumentCollection dc1=dc;
Document berichtdoc;
Item item1;

   try{
         berichtdoc= dc1.getFirstDocument();
          item1=berichtdoc.getFirstItem("T1");
          if (item1==null)
          {
             sdatum2=sql1.rs.getDate("ERSTEZ");         
            DateTime dt=session.createDateTime(sdatum2);
             berichtdoc.replaceItemValue("T1",dt);
            berichtdoc.replaceItemValue("T2",dt);
            
         }
         else
         {
            
            sdatum2=sql1.rs.getDate("ERSTEZ");                  
            DateTime dt=session.createDateTime(sdatum2);
          berichtdoc.replaceItemValue("T2",dt);
         }      
                     
         
         berichtdoc.save();
         if(berichtdoc.save()==false)
         {
            dbLog.logError(1,"Fehler beim Speichern von "+ kunden);
                  
         }   
      dbLog.logAction("Kunde "+ kunden+ "geupdatet");
      sql1.updatesd(berichtdoc.getItemValueString("kundennr"));
      
      }
      catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
      }          
   }
}

import lotus.domino.*;
import java.sql.*;
import com.ibm.as400.*;
import java.lang.*;
import java.util.*;
import java.util.Date;
import java.text.*;
public class sql {

public String constr;
Connection con;
public ResultSet rs;

public sql()

{
         
         this.constr=constr;
         try{
         Class.forName("com.ibm.as400.access.AS400JDBCDriver");
         String connstr = ("jdbc:as400:myhost");
         con = DriverManager.getConnection(connstr,"Username","password");
}
catch(Exception e) {
//System.out.println("ausstieg");         
e.printStackTrace();
}
}
public void getrs(String sqlquery)
{
   String sqlstring;
   try
   {
         sqlstring=sqlquery;
         Statement stmt = con.createStatement();
         rs=stmt.executeQuery(sqlstring);
   }
   catch(Exception e) {
      
e.printStackTrace();
}
}
public void  updatesd(String kunden) throws SQLException
{

   String sql="update testbib.testtable set field = '1'  concat  (substring(field ,2,19))  where"
+" apaidn=cast('"+kunden+"' as Integer) and rrn(testbib.testfield) ="+this.rs.getString("satznummer") ;
   Statement stmt = con.createStatement();
   boolean update =stmt.execute(sql);
   int apaidn=this.rs.getInt("kunden");         
}
}

Bin noch nicht ganz fertig hab bestimmt noch variabelen deklariert die ich gar nicht mehr benutzte sollte euch aber nicht vom kommentieren abhalten.
Gruß
qojote

Axel_Janssen:
Ok. Ich fange im Laufe des Tages an. Da ich momentan wg. Zertifizierung auch am WE busy bin, werden wir dieses WE nicht fertig.

animate:
ich kann dazu sagen, dass deine Anwendung nicht sehr objektorientiert programmiert ist. Im Prinzip hast du hier eine Klasse (Verarbeitung) mit einer Methode (process = verarbeite), die alles erledigt.

Wenn dein Ziel ist, dass das Teil läuft, egal wie, dann ist das in Ordnung.
Falls du sagst, "das ist doch objekorientiert, weil ich habe hier doch Objekte" oder falls du Tipps haben möchtest, wie du das vielleicht objektorientierter (und damit leichter erweiterbar, wartbar, verständlich, etc) machen kannst, dann sag nochmal bescheid.

Axel_Janssen:
Fühl mich momentan so als ob 2 fette Säcke Enterprise Java Beans auf meinen geschundenen Körper gefallen sind. Deshalb erstmal keinen code.

Thomas hat auf jedenfall Recht. Das ist nicht objekt-orientiert. Du kannst jede Methode, Eigenschaft um das Schlüsselwort static ergänzen.  

Design Überlegungen können schnell volumenmäßig ausarten. Aber ich kann nächste Woche mal anfangen.

2 Dinge vom reinen Java-Standpunkt:
- Dein Errorhandling ist nicht konsequent.
Ich würde die Exception auf jeden Fall in die Log Datenbank rausschreiben. Eine LogDatenbank zu benutzen ist grundsätzlich eine gute Idee.
- Wenn ich JDBC schreibe, benutze ich immer PreparedStatement.  
http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
Dies hat neben möglichen Performance-Vorteilen v.a. auch Vorteile hinsichtlich der Sicherheit. Wenn du dir SQL Statements direkt aus user eingaben aus Feldern zusammenbaust, können SQL-aficionados durch nested SQL statements und sowas relativ schnell Arten des Zugriffs auf die Daten erhalten, die du gar nicht willst.

Gruß Axel

qojote:
Hallo Thomas,
es ist na klar nicht mein Ziel das es läuft egel wie.
Na klar will ich es besser machen deswegen habe ich den Code ja gepostet.
Jede Anregung ist na klar willkommen.
Geht aber nicht zu hart mit mir ins Gericht ich Anfänger :-))
Also Thomas tob dich ruhig aus. Selbes gilt na klar auch für dich Axel.

Ich hab na klar auch in den Büchern gestöbert aber die Objektorientierung an so einem einfachen Beispiel sieht eben doch ganz anders aus als wenn es dann selbst versucht.
Mann neigt doch dazu wenn man aus der Lotusschiene kommt den Code dann so runter zu hacken.
Das die errors im Log ausgegeben werden wollt ich noch machen aber erst als letztes auf der console ist es beim runprobieren bequemer.

Also schon mal vielen Dank in voraus.
Ich freu mich schon auf eure Hinweise.

Gruß
qojote

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln