Ändern eines bestehenden Partnersets

6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Ändern eines bestehenden Partnersets

Beitrag von Meex (Specialist / 122 / 0 / 0 ) »
Hallo zusammen,

folgendes Problem, ich möchte gerne die Partnerdaten einer Aktivität ändern!
Dazu führe ich folgende FB's aus:

CRM_ORDER_INITIALIZE

CRM_ORDER_MAINTAIN

CRM_ORDER_SAVE

BAPI_TRANSACTIOn_COMMIT

Im FB Maintain gebe ich das zu ändernde Feld im entsprechende Partnerset mit,
in der Headerstruktur wähle ich für das Feld Mode den Wert B für Ändern!

Der MAINTAIN Baustein wird auch tadellos durchlaufen, auch der CRM_ORDER_SAVE
bringt keine Exceptions, nur gibt er auch das gespeichert Objekt nicht retour!
Die Änderung ist auch nicht auf der Datenbank sichtbar!

Bei Neuanlage eines Partnersets funktioniert oben genannte Reihenfolge?

Kann mir hierzu vielleicht Tipps geben?

Danke
Meex

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Gast ( / / 0 / 3 ) »
Hallo Meex.

das Ändern und Neuanlegen von Einträgen in Partnersets ist etwas aufwendig.
Mit Aufruf des Initialize wäre ich etwas vorsichtig im Änderungsfall.
Für den Änderungsfall würde ich einen CRM_ORDER_READ aufrufen. Dort das Feld im entsprechenden Partnerset ändern und dann den CRM_ORDER_MAINTAIN aufrufen.

Um das betreffende Feld des Seteintrags ändern zu können, mußt Du die INPUT_FIELDS-Struktur befüllen. Diese legt fest, welche Felder auf die Datenbank geschrieben werden.

Als Hilfe kannst Du Dir diesen Codingausschnitt mal anschauen. Dabei werden neue Einträge im Partnerset angelegt:

Code: Alles auswählen.

      <ls_partner_com>-ref_partner_handle = sy-tabix + 20.

      CLEAR: ls_input_field, ls_input_field-field_names[].

      CALL FUNCTION 'FILL_INPUT_FIELDS_STRUCTURE'
        EXPORTING
          iv_structure_type_name       = 'CRMT_PARTNER_COM'
          iv_table_type_name           = 'CRMT_PARTNER_COMT'
          is_structure                 = <ls_partner_com>
        IMPORTING
          es_input_fields              = ls_input_field
        EXCEPTIONS
          no_structure_type_name_given = 1
          no_input_data_provided       = 2
          provide_structure_or_table   = 3
          non_existing_structure_name  = 4
          provide_one_input_table_only = 5
          no_table_type_name_provided  = 6
          types_do_not_match           = 7
          no_ddic_info_available       = 8
          OTHERS                       = 9.
      IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

*Fill logical key for partner
      lv_logical_key          = <ls_partner_com>-ref_partner_handle.
      lv_logical_key+4        = <ls_partner_com>-ref_partner_fct.
      lv_logical_key+12       = <ls_partner_com>-ref_partner_no.
      lv_logical_key+28       = <ls_partner_com>-ref_display_type.
      lv_logical_key+30       = <ls_partner_com>-ref_no_type.

      PERFORM fill_input_fields USING
                                <ls_partner_com>-ref_handle
                                <ls_partner_com>-ref_kind
                                gc_object_name-partner
                                lv_logical_key
                                ls_input_field-field_names
                            CHANGING
                                et_inputfield.

...

FORM fill_input_fields USING
                  iv_handle      type crmt_handle
                  iv_ref_kind    TYPE crmt_object_kind
                  iv_object_name TYPE crmt_object_name
                  iv_logical_key TYPE crmt_logical_key
                  it_field_names TYPE crmt_input_field_names_tab
                CHANGING
                  lt_input_fields TYPE crmt_input_field_tab.

  DATA: ls_input_fields TYPE crmt_input_field.

  ls_input_fields-ref_handle  = iv_handle.
  ls_input_fields-ref_kind    = iv_ref_kind.
  ls_input_fields-objectname  = iv_object_name.
  ls_input_fields-logical_key = iv_logical_key.
  ls_input_fields-field_names = it_field_names.
  INSERT ls_input_fields INTO TABLE lt_input_fields.

ENDFORM.                    " fill_input_fields

Hoffe das hilft Dir weiter.

Beitrag von Meex (Specialist / 122 / 0 / 0 ) »
Danke für deine Hilfe, hab ich ähnlich gemacht, ich hab nur das feld logical key nicht befüllt! Was hat es damit auf sich? Braucht er beim MAINTAIN wirklich diesen key?

Beitrag von Gast ( / / 0 / 3 ) »
Yep. Ohne den Key geht nischt. Wenn nicht gefüllt, findet kein Update statt. Aber frag mich bloss nicht wieso ... das kann ich Dir nämlich nicht beantworten.

Wenn Du sichergehen willst, was alles gefüllt werden muß, kannst Du mal in der Klasse CL_CRM_1O_MAIN, in der Methode MAINTAIN_ORDER einen Breakpoint setzen an der folgenden Stelle:

Code: Alles auswählen.

...
  CHECK NOT lt_input_fields IS INITIAL OR
        NOT lt_partner_attribute IS INITIAL.

* store items with a GUID which should be created
  LOOP AT lt_orderadm_i ASSIGNING <ls_orderadm_i>
       WHERE mode EQ gc_mode-create
         AND guid IS not INITIAL.
    INSERT <ls_orderadm_i>-guid INTO TABLE lt_create_items.
  ENDLOOP.

  IF gv_dialog EQ false.
    CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
  ENDIF.

  CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
      it_opport_h             = lt_opport_h
      it_activity_h           = lt_activity_h
      it_service_h            = lt_service_h
      it_lead_h               = lt_lead_h
      it_sales                = lt_sales
...
Das Coding wird beim Arbeiten mit der Transaktion CRMD_ORDER durchlaufen. Da siehst Du dann ganz genau, wie welches Set befüllt werden muß.

Beitrag von Meex (Specialist / 122 / 0 / 0 ) »
Danke für deinen Tipp, hab das ganze mal gedebugged, da hab ich das Problem auch schon gesehen!

Es gibt da einen FB COM_PARTNER_FIELDSELECTION_OW, welcher, jedes geänderte Feld mittels CASE abprüft und falls gefunden ein CHANGEABLE Flag setzt! Jetzt handelt es sich ja bei mir um ein Appendfeld ZZCHECKED, hab einfach im Programm LCOM_PARTNER_OWU3 eine Abhandlung für das neue Kundenfeld hinterlegt und voila läuft durch!

Nochmals Danke an alle!

Meex

CRM_ORDER_MAINTAIN

Beitrag von Coae ( / / 0 / 3 ) »
Hi Jungs,

ich bedanke mich mal für das Beispiel, hat bei mir auch wunderbar funktioniert.
gruß aus Walldorf

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3598
Views
Integration von bestehenden J2EE Projekten in Netweaver AS
von Tserva » 03.11.2006 11:29 • Verfasst in Java & SAP®
3
Antw.
2399
Views
Feldinhalt an bestehenden Feldinhalt anhängen
von PatrickHei » 17.11.2020 09:56 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.