Freitag, 21. Dezember 2012

Führende Nullen

Im ABAP findet man immer wieder folgenden Code
UNPACK lf_field TO lf_field.
Damit wird erreicht dass das Feld mit führenden Nullen aufgefüllt wird.
Manchmal gibt es auch den Ansatz den  Wert in ein NUMC Feld zu schieben und dann wieder retour.

Normalerweise sollte man aber für das Auffüllen der Nulllen bzw. der Umwandlung von Daten in ein internes Format, die SAP eigenen Konvertierungsexits verwenden!
Diese werden auch in der Domäne des entsprechenden Datentyps definiert!

Der FuBa Name setzt sich dann wie folgt zusammen

CONVERSION_EXIT_xxx_INPUT
CONVERSION_EXIT_xxx_OUTPUT

xxx wird durch den entsprechenden Exit welcher in der Domäne hinterlegt ist ersetzt!

Für Datentypen welche führende Nullen haben, ist dies in der Regel der Exit ALPHA

_INPUT fügt dann die führenden Nullen hinzu und
_OUTPUT entfernt diese dann

Beispiel

DATA: lf_partner TYPE bu_partner.
lf_partner = '1001'.
"lf_partner => 1001
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'  EXPORTING    input  = lf_partner  IMPORTING    output = lf_partner.
"lf_partner => 0000001001

Dienstag, 27. November 2012

SAP ITS Laden von MIME Objekten erzeugt 404 HTTP Fehler

Im SAP werden Service über die TA SICF verwaltet, damit eine ITS Transaktion funktioniert muss der zugrunde liegende Service gestartet sein!
Es kann nun aber vorkommen, dass die Anwendung nicht lädt, schaut man sich dann das Netzwerkprotokoll  mittels eines Browserentwicklertools an (z.B. Firebug, ...), kann man erkennen, dass gewisse Resourcen nicht geladen werden können und einen 404 HTTP Fehler verursachen!

Handelt es sich dabei um Resourcen die den URL Prefix /sap/public/bc/its/mime/ werden diese über das Servelet CL_HTTP_EXT_ITS_MIMES geladen.

Sollte der Service aktiv sein und das Problem weiter bestehen, sollte der Service SYSTEM nochmals publiziert werden. Dies kann man mittels TA SE80 machen.

Mittwoch, 29. August 2012

Events bei Pflegeviews

SAP bietet die Möglichkeit auf gewisse Events bei generierten Pflegeviews zu reagieren.

So hat man dann z.B. die Möglichkeit, Coding vor dem Schreiben auf die DB oder nachher anzutriggern!

Sehr praktisch wenn eine Änderung einen Folgeprozess anstoßen soll, und man nicht unbedingt mit Typkopplung, welche Änderungsbelege voraussetzt verwenden will.

SDN Doku

Montag, 20. August 2012

ABAP instanceof

Im Java gibt es den Operator instanceof mit diesem kann zur Laufzeit festgestellt werden, ob ein definiertes Objekt vom Typ einer Klasse ist. Dies ist sehr praktisch, speziell Basisobjekte erweitert werden (Superklassen).

Im ABAP gibt es diesen Operator leider nicht, behelfen kann man sich indem man einen CAST ausführt, falls dieser fehlschlägt weiß man, dass das Objekt kein Typ oder Supertyp der zu vergleichenden Klasse ist.

Es gibt aber eine Helper Methode die diesen Check kapselt.

CL_WDY_WB_REFLECTION_HELPER=>IS_INSTANCE_OF

Donnerstag, 2. August 2012

BP hinzufügen Benutzer und Personalnummer

Im CRM bzw. Solution Manager werden die Mitarbeiter auch als BP in der BUT000 geführt. Zusätzlich werden für die Rolle Mitarbeiter die Felder Benutzer und Personalnummer zu Verfügung gestellt.

Diese Daten werden dann in den HR Tabellen HRP1000 bzw. HRP1001 hinterlegt, die Struktur dieser Tabellen ist ein wenig komplex, daher sollte man das manuelle Befüllen eher nicht in Betracht ziehen.

Der Baustein BP_BUPA_CREATECENTRALPERSON bietet die Möglichkeit diese Daten entsprechend zu setzen.

Falls man den BP mittels BAPI_BUPA_CREATE_FROM_DATA anlegt, hat man die GUID des Partners nicht im Zugriff, diese wird aber für den o.g. Baustein benötigt.
Mittells BUPA_NUMBERS_GET bekommt man die GUID aus dem Puffer.

Wichtig, dem Partner muss auch die Mitarbeiterrolle zugeordnet werden, dies macht man mit dem Baustein BAPI_BUPA_ROLE_ADD_2, Businesspartnerrole = BUP003

Mittwoch, 1. August 2012

Erweiterungsset auf Basis eines bestehenden Erweiterungssets


Wenn man ein neues Erweiterungsset anlegt (Viewcluster BSPWDVC_CMP_EXT) kann man ein bestehendes kopieren bzw. ein komplett neues erstellen!
Kopiert man ein bestehendes Erweiterungsset werden dieselben Controller Klassen des kopierten Sets verwendet, somit greifen Änderungen des Controllers / Contexts immer auf beide Sets durch.

Um das zu verhindern muss man ein wenig Arbeit investieren!
Zuerst muss man die Komponente die man individuell erweitern will aus dem neuen kopierten Erweiterungsset löschen (inkl. abh. Einträge).
Danach wechselt man in die Komponenten Workbench (TA BSP_WD_CMPWB), dort geht man dann im Änderungsmodus mit der neuem Erweiterungsset in die Komponente. Dann klickt man rechts oben auf "Komponentenerweiterung anlegen". Nun wird eine neue BSP Applikation angelegt, welche als Basis für die Erweiterungen dient!
Will man nun für einen speziellen View bereits existieren Controller bzw. Context Klassen aus einem anderen Erweiterungsset nutzen, muss man diesen View erweitern (Kontextmenü auf Viewknoten) Es werden nun vom System 2 Klassen generiert ZL*IMPL und ZL*CTXT, diese beiden Klassen bitte merken!

Nach der Generierung wechselt man in die se24 und löscht diese beiden neuen Klassen!
Danach kopiert man die Controller und Context Klasse des ursprünglichen Erweiterungssets mit den zuvor gelöschten Klassennamen.
In der Controllerklasse muss noch die richtige Kontextklasse hinterlegt werden!
Einmal ist diese als Attribut referenziert und einmal in der Methode WD_CREATE_CONTEXT.

Danch sollte in der Workbench in der entsprechenden Komponente zu dem neuen Erweiterungsset die bereits bestehende Erweiterung ziehen!

Montag, 16. Juli 2012

Pflegeview - Anzeige/Pflege eingeschränkt erlaubt

Im SAP kann man bei Tabellen bzw. bei Pflegeviews den Parameter "Data Browser/Tabellensicht-Pflege" einstellen.
Die möglichen Werte

  • SPACE     Anzeige/Pflege eingeschränkt erlaubt
  • X               Anzeige/Pflege erlaubt
Wenn SPACE gesetzt ist, kann die Tabelle nicht über SE16 oder SM30 gepflegt werden.
Man kann aber über den Funktionsbaustein VIEW_MAINTENACE_CALL die Daten pflegen
ACTION = 'U'
VIEW_NAME  = Pflegeview


Freitag, 6. Juli 2012

se16 - Textfremdschlüssel definieren


Im SAP hat man die Möglichkeit eine Tabelle über einen Textfremdschlüssel mit einer Texttabelle zu verbinden.
Der Vorteil ist, dass automatisch bei Suchhilfen bzw. SE16 beim Verwenden der Tabelle die Texte angezeigt werden.

Voraussetzung ist, dass die Texttabelle den gleichen Schlüssel wie die Stammtabelle hat inkl. SPRAS (Sprache).

Die Verknüpfung erfolgt in der se11 in der Texttabelle über den Fremdschlüssel Button

Nun kann man auch in der se11 der Stammdatentabelle über Springen | Texttabelle zur entsprechenden Tabelle springen!

SAP CRM Design-Layer - Feldbezeichner ändern

Mit Hilfe des Design Layers (ab CRM 7.0) ist es möglich in der Web-UI Feldeigenschaften zu übersteuern ohne die Komponenten / Kontexte erweitern zu müssen.

Es ist z.B. möglich die Feldbezeichnungen anzupassen, Wertehilfen zu hinterlegen, ...
Außerdem kann auch die Sichtbarkeit der Felder gesteuert werden.

Details findet man in der SAP Hilfe
http://help.sap.com/saphelp_crm70/helpdata/de/4e/a68e7167a341158df86e7e6704ed4b/frameset.htm

Beispiel ändern eines Feldbezeichners (Standartadresse: Bezeichner Formatierte Tel => Telefon/DW)

Zuerst sucht man sich über die Komponenten Workbench, den entsprechenden View und Kontextknoten, mittels Kontextmenü kommt man auf die Option einen Design-Layer zuzordnen

Nun muss man im Customizing das entsprechende SAP Design Objekt kopieren

In unserem Fall handelt es sich um den UI-Objekttyp BP_ACCOUNT und das Design-Objekt STANDARDADDRESS. Das Design-Objekt einfach mittels entsprechenden Button kopieren.

Mittels SpringKopie kommt man in das in den Kundenbereich kopierte Objekt und kann dies entsprechend anpassen.

Um den Feldbezeichner nun ändern zu können, einfach entsprechende Zeile markieren und in die Detailsicht wechseln.

Anschliessend nur noch in der Komponenten Workbench den neuen DesignLayer ans Kontextmenü hängen, ab diesen Zeitpunkt wird in der WebUI dann der neue Feldbezeichner sichtbar.



Donnerstag, 5. Juli 2012

Klassifizierung auslesen

Mittels Funktionsbaustein CLAF_CLASSIFICATION_OF_OBJECTS ist es möglich die Klassifizierungsdaten aller möglichen Objekte auszulesen (definiert in Tabelle TCLO).



Dienstag, 3. Juli 2012

NULL Werte in Dictionary Tabellen

Wir hatten das Problem, dass durch das Aktivieren einer Business Function (EHP5) die Tabelle QMIH um neue Felder (PAM*) appended wurde. Dabei war das Feld PAM_PROID als NUMC mit Länge 8 definiert!

Wenn nun die Felder ohne dem Setzen des Init-Flags in der SE11 aktiviert werden. Wird in der Datenbank nicht der Initialwert 00000000 sondern (NULL) gesetzt.

SAP kennt kein NULL somit hatten wir in diversen Reports Probleme (CONVERSION_EXITS).

Man kann leider auch nicht nachträglich bei SAP Standardtabellen das Init-Flag setzen, hierfür würde man den SAP Objektschlüssel benötigen!

SAP bietet aber die Möglichkeit mittels SE14 die Umsetzung zu erzwingen!

se14 / Umsetzung erzwingen

Freitag, 29. Juni 2012

OLTP Mandantenrückkopie Proleme im CRM

Nach einer Mandantenrückkopie unseres OLTP Systems, funktionierte die Anbindung im CRM nicht mehr!
Es kam zu SYSTEM_FAILURE Fehlern in den Ausgangsqueues des CRMs bzw. des OLTPS.

Das Problem lag an dem Eintrag in der OLTP Tabelle CRMPLS, hier musste manuell das logische System angepasst werden.
Danach war es noch notwendig im CRM mittels SAP Korrekturreport (Hinweis 588701) den Eintrag neu zu übernehmen.

Montag, 18. Juni 2012

sGWI - Probleme mit Anlage von Terminen

Wir hatten folgendes Problem, bei einem bestimmten Benutzer erfolgte keine Übertragung von im Outlook angelegten Terminen ins CRM.
Die Übertragung vom CRM nach Outlook funktionierte hingegen problemlos.

Nach einigen SAP OSS Sessions hier die Lösung des Problems
  • Service Proxy und Connector am Groupwareserver stoppen
    • SAP MS Exchange Groupware Connector 5.0
    • SAP MS Exchange Groupware Proxy 5.0

  • Folgende Dateien löschen
    • C:\Program Files (x86)\SAP\SAP Groupware Connector 5.0\Exchange2\Connector\Storage\States\v
    • C:\Program Files (x86)\SAP\SAP Groupware Connector 5.0\Exchange2\Connector
      • UserList.xml
  •  Service Proxy und Connector neustarten

Mittwoch, 13. Juni 2012

QR Tags in SAP SmartForms

Robert Russell beschreibt in seinem Blog
http://www.rjruss.info/2010/09/how-to-printpdf-qr-codes-in-standard.html
sehr ausführlich und genau wie man einen Gerätetypen im SAP anlegt, welcher QR Tags über Print-Controls im PostScript generiert!

Das Beispiel basiert auf die Verwendung eines lokalen PDF Printers (CutePDF), wir haben das aber bei uns auch mit einem Netzwerkdrucker geschafft, ohne Probleme, einfach über die SPAD beim dem Drucker den neuen Gerätetypen hinterlegen.

Im SmartForm kann man dann einen QR Tag erzeugen, indem man ein COMMAND, einen Text und wieder ein COMMAND definiert.

Im ersten COMMAND wird das PrintControl ZBW01 gesendet, im 2ten ZBW02, dazwischen der Text für den Code

Montag, 4. Juni 2012

AET neues BOL Tag Attribut

Seit CRM 7.0 EHP1 gibt es das AET Framework mit dem man unter anderem berechnete Felder ohne Programmiereung erstellen und in die UI einbinden kann.
Als Basis dient das BOL Objekt und darunter definierte Tags (Attribute).

Vermisst man nun ein Feld kann man dies ohne Probleme (sofern es im BOL Objekt vorhanden ist) nachpflegen!

Dies geschieht über das Customizing Pfad
SPRO => CRM => UI Framework => Definition des UI Frameworks => Globale Attribut Tags

Um bestehende Attribute zu ändern muss man diese zuerst kopieren!

Sonntag, 3. Juni 2012

sGWI : Benutzer wird nicht an Groupware Server übertragen

Sollte es vorkommen, dass aus unerklärlichen Gründen ein Benutzer nicht an den Groupware Server übertragen werden, könnte ein Grund sein, dass die dem Benutzer zugeordnete E-Mail Adresse nicht eindeutig ist!
Für die Groupware ist es unerlässlich, dass die E-Mail Adresse des Benutzers systemweit eindeutig ist.

Montag, 14. Mai 2012

Initialer Download CDB SMOUSERS / SMOMITABT

Für die Groupware müssen alle relevanten Benutzer in die CDB geladen werden!
Sollten die Daten nicht übertragen werden obwohl der Job auf grün steht, kann es sein das in der Tabelle CRMSUBTAB ein Eintrag fehlt!

In unserem Fall fehlte der CDB BUPA_MAIN Eintrag!
Einfach den Eintrag aus dem 000 Referenz Mandanten kopieren.

Danach sollten nun auch wirklich die Daten in die CDB übertragen werden!

Freitag, 11. Mai 2012

URL in SAP Dokument/Hilfe einbinden

Man kann in den SapScript Text über foldende Tags URLs einbinden:
<DS:URLA.http://saphint.blogspot.com>SAP Hints</>

Es muss gewährleistet sein, dass in der Tabelle TDCLD die Dokclass URLA gepflegt ist!

Mittwoch, 9. Mai 2012

Transport von SAP Standarttexten (SO10)

Leider lassen sich die SAP Script Standarttexte (TA SO10) nicht so einfach direkt in einen Transportauftrag packen!

Es gibt aber den Report RSTXTRAN mit Hilfe dessen man Texte in einen Transport (Korrektur) packen kann.

Donnerstag, 5. April 2012

SAP CRM Outlook Integration Posteingang

SAP bietet im Zuge der Groupware Integration die Möglichkeit, das Outlook/Lotus Notes Eingangspostfach in das CRM zu integrieren. Aus diesem SAP Posteingang heraus, kann aus den Mails eine Aktivität erzeugt werden.

Damit auch der Text übernommen wird, muss die Textart gecustomized werden, leider ist dies ein wenig in der SPRO versteckt :-(

Im Endeffekt muss folgende Tabelle gepflegt werden
CRMC_IC_AUIPRCOM

Dienstag, 3. Januar 2012

Löschen von gemieteten Adressen im ELM


ELM verwendet zum Löschen von Rented Lists den Baustein BUP_BUPA_MASS_DELETE
Dieser setzt auf das BDT auf, im speziellen auf die Events der Zeitpunkte (TA BUS7 bzw. Bereichsmenü BUPT)
  • DELE1     Löschprogramm: Löschbarkeit prüfen
  • DELE2     Löschprogramm: Löschen

Montag, 2. Januar 2012

Erweiterungsset für Mandant aktivieren

Falls man einen neuen Mandanten installiert, muss man diesem ein bestehendes bzw. ein neues Erweiterungsset zuordnen, damit man UI Komponenten überschreiben kann.

Die Zuordnung erfolgt über die Tabelle BSPWD_EHSET_ASGN