Problem bei Update

Rund um Java und SAP®.

Problem bei Update

Postby Rasmus4297 » Thu Aug 21, 2003 5:08 pm

Hallo Zusammen !

Nach erfolgreicher Proxy-Generierung, Verbindung steht etc. habe ich mal versucht einen Update in das System zu bekommen. Die Return-Tabelle liefert mir lapidar, dass der User bereits existiert, dass tut er jedoch mitnichten.
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.    private void setUpChangeProxy()
  2.    {
  3.       _changeProxy = new UserChangeProxy_PortType();
  4.       _changeProxy.messageSpecifier.setJcoClient(_client);
  5.    }
  6.  
  7. public void changeUser(String userName)
  8.    {
  9.  
  10.       this.setUpChangeProxy();
  11.       Bapi_User_Change_Input in = new Bapi_User_Change_Input();
  12.      
  13.       in.setUsername(userName);
  14.      
  15.       // setzen geänderter Adresse
  16.       Bapiaddr3Type addr = new Bapiaddr3Type();
  17.       addr.setAddr_No("1");
  18.       addr.setCity("Orlando");
  19.       addr.setCountry("US");
  20.       addr.setDepartment("Magical Affairs");
  21.       addr.setFirstname("Peter");
  22.       addr.setFunction("Protagonist");
  23.       addr.setLastname("PAN");
  24.       in.setAddress(addr);
  25.            
  26.       try
  27.       {
  28.          Bapi_User_Change_Output out = _changeProxy.bapi_User_Change(in);
  29.  
  30.          this.showReturn(out.get_as_listReturn());
  31.                  
  32.       }
  33.       catch(Exception e)
  34.       {
  35.          e.printStackTrace();
  36.       }
  37.      
  38.       finally
  39.       {
  40.          _cm.releaseConnection(_client);
  41.       }      
  42.      
  43.    }
GeSHi ©

Anmerkung: _cm ist eine Instanz eines ConnectionManagers, welcher den Pool verwaltet, funktioniert auch.

Generell stellt sich mir die Frage, wann überhaupt das BAPI aufgerufen wird; ist dieses implizit durch den Aufruf der Methode bapi_user_change(in) ???

Wie ist das eigentlich mit Transaktionen in diesem Modell ?? Gesetzt den Fall, ich will zwei BAPI's aufrufen und im Fehlerfalle eines BAPI's BEIDE rückgängig machen, wie funktioniert denn das ? JTA ist ja wohl kaum die Lösung, oder ??

Danke und Gruß

Seneca
Rasmus4297
..
..
 
Posts: 19
Joined: Thu Aug 14, 2003 2:06 pm

Postby Rasmus4297 » Thu Aug 21, 2003 5:09 pm

Sorry, die Änderung (s.o.) funktioniert nicht, obwohl es in der Return-Tabelle angezeigt wird.

Gruss, Seneca
Rasmus4297
..
..
 
Posts: 19
Joined: Thu Aug 14, 2003 2:06 pm

Postby Fabian1957 » Thu Aug 21, 2003 5:50 pm

Was hast Du denn genau vor? So wie's aussieht schreibst Du ein UserManagement auf Java-Basis? Dazu nutzt Du die BAPI_USER_*-Bausteine?!
Mit changeUser soll ein Benutzer geändert werden. Wenn die Meldung kommt, dass ein User bereits existiert ist das soweit ok. Wenn er nicht existiert, dann musst Du BAPI_USER_CREATE verwenden. Ausserdem empfiehlt sich vor Anlegen/Änderungen erstmal zu überprüfen ob der User tatsächlich existiert mit BAPI_USER_EXISTENCE_CHECK.
Jedenfalls hast Du Dich da eines nicht ganz einfachen Themas angenommen ;-)

Hermann
Fabian1957
....
....
 
Posts: 535
Joined: Mon Dec 02, 2002 11:34 am

Postby Alva1590 » Thu Aug 21, 2003 7:33 pm

Hallo Hermann !

Mein Posting verwirrt, gebe ich zu. Was ich mache, ist lediglich einen existenten User zu ändern. Aus Java (Return-Table) erhalte ich die Meldung, dass der User geändert wurde, kontrolliere ich das in R/3 sind diese Änderungen mitnichten durchgeführt.

Vollständig irritiert mich die Tatsache, dass dieses ohne jedes Problem ohne die Proxies funktioniert hat; gleiche Daten etc. Dieses gilt insbesondere für das Anlegen eines Benutzers, ohne Nutzung der Proxies kein Problem; mit Benutzung der Proxies => User soll angeblich schon existieren.

Eine Java-gestützte Benutzerverwaltung schreibe ich nicht, ich habe nur die MiniSAP-Basis zum Test und habe mir halt das BO User ausgesucht.

Grüsse, Seneca
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Fabian1957 » Fri Aug 22, 2003 11:47 am

Normalerweise musst Du nach dem Aufruf eines BAPIs im R/3 ein commit work ausführen, damit die Änderungen weggeschrieben werden.
Das geht z.B. mit 'BAPI_TRANSACTION_COMMIT'. Probier's mal damit aus, wenn Du die Änderung machst, dann unmittelbar danach den commit-Baustein aufrufen. Du musst allerdings dafür sorgen, dass die Verbindung (und damit die Session im R/3) solange gehalten wird (stateful connection), sonst bringt das ganze überhaupt nichts.

Hermann
Fabian1957
....
....
 
Posts: 535
Joined: Mon Dec 02, 2002 11:34 am


Return to Java & SAP®

Who is online

Users browsing this forum: No registered users and 3 guests

cron