Ändern eines bestehenden Partnersets

Ändern eines bestehenden Partnersets

Postby Alen3085 » Thu Nov 11, 2004 9:43 pm

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
Alen3085
...
...
 
Posts: 120
Joined: Tue May 27, 2003 6:22 am

Postby Alva1590 » Fri Nov 12, 2004 11:49 am

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.       <ls_partner_com>-ref_partner_handle = sy-tabix + 20.
  2.  
  3.       CLEAR: ls_input_field, ls_input_field-field_names[].
  4.  
  5.       CALL FUNCTION 'FILL_INPUT_FIELDS_STRUCTURE'
  6.         EXPORTING
  7.           iv_structure_type_name       = 'CRMT_PARTNER_COM'
  8.           iv_table_type_name           = 'CRMT_PARTNER_COMT'
  9.           is_structure                 = <ls_partner_com>
  10.         IMPORTING
  11.           es_input_fields              = ls_input_field
  12.         EXCEPTIONS
  13.           no_structure_type_name_given = 1
  14.           no_input_data_provided       = 2
  15.           provide_structure_or_table   = 3
  16.           non_existing_structure_name  = 4
  17.           provide_one_input_table_only = 5
  18.           no_table_type_name_provided  = 6
  19.           types_do_not_match           = 7
  20.           no_ddic_info_available       = 8
  21.           OTHERS                       = 9.
  22.       IF sy-subrc <> 0.
  23. *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  24. *           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  25.       ENDIF.
  26.  
  27. *Fill logical key for partner
  28.       lv_logical_key          = <ls_partner_com>-ref_partner_handle.
  29.       lv_logical_key+4        = <ls_partner_com>-ref_partner_fct.
  30.       lv_logical_key+12       = <ls_partner_com>-ref_partner_no.
  31.       lv_logical_key+28       = <ls_partner_com>-ref_display_type.
  32.       lv_logical_key+30       = <ls_partner_com>-ref_no_type.
  33.  
  34.       PERFORM fill_input_fields USING
  35.                                 <ls_partner_com>-ref_handle
  36.                                 <ls_partner_com>-ref_kind
  37.                                 gc_object_name-partner
  38.                                 lv_logical_key
  39.                                 ls_input_field-field_names
  40.                             CHANGING
  41.                                 et_inputfield.
  42.  
  43. ...
  44.  
  45. FORM fill_input_fields USING
  46.                   iv_handle      type crmt_handle
  47.                   iv_ref_kind    TYPE crmt_object_kind
  48.                   iv_object_name TYPE crmt_object_name
  49.                   iv_logical_key TYPE crmt_logical_key
  50.                   it_field_names TYPE crmt_input_field_names_tab
  51.                 CHANGING
  52.                   lt_input_fields TYPE crmt_input_field_tab.
  53.  
  54.   DATA: ls_input_fields TYPE crmt_input_field.
  55.  
  56.   ls_input_fields-ref_handle  = iv_handle.
  57.   ls_input_fields-ref_kind    = iv_ref_kind.
  58.   ls_input_fields-objectname  = iv_object_name.
  59.   ls_input_fields-logical_key = iv_logical_key.
  60.   ls_input_fields-field_names = it_field_names.
  61.   INSERT ls_input_fields INTO TABLE lt_input_fields.
  62.  
  63. ENDFORM.                    " fill_input_fields
  64.  
  65.  
GeSHi ©


Hoffe das hilft Dir weiter.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Alen3085 » Fri Nov 12, 2004 12:42 pm

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?
Alen3085
...
...
 
Posts: 120
Joined: Tue May 27, 2003 6:22 am

Postby Alva1590 » Fri Nov 12, 2004 1:04 pm

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: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. ...
  2.   CHECK NOT lt_input_fields IS INITIAL OR
  3.         NOT lt_partner_attribute IS INITIAL.
  4.  
  5. * store items with a GUID which should be created
  6.   LOOP AT lt_orderadm_i ASSIGNING <ls_orderadm_i>
  7.        WHERE mode EQ gc_mode-create
  8.          AND guid IS not INITIAL.
  9.     INSERT <ls_orderadm_i>-guid INTO TABLE lt_create_items.
  10.  
  11.   IF gv_dialog EQ false.
  12.     CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
  13.   ENDIF.
  14.  
  15.   CALL FUNCTION 'CRM_ORDER_MAINTAIN'
  16.     EXPORTING
  17.       it_opport_h             = lt_opport_h
  18.       it_activity_h           = lt_activity_h
  19.       it_service_h            = lt_service_h
  20.       it_lead_h               = lt_lead_h
  21.       it_sales                = lt_sales
  22. ...
  23.  
GeSHi ©

Das Coding wird beim Arbeiten mit der Transaktion CRMD_ORDER durchlaufen. Da siehst Du dann ganz genau, wie welches Set befüllt werden muß.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Alen3085 » Mon Nov 15, 2004 10:53 am

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
Alen3085
...
...
 
Posts: 120
Joined: Tue May 27, 2003 6:22 am

CRM_ORDER_MAINTAIN

Postby Linnea897 » Mon Apr 04, 2005 10:01 am

Hi Jungs,

ich bedanke mich mal für das Beispiel, hat bei mir auch wunderbar funktioniert.
gruß aus Walldorf
Linnea897
.
.
 
Posts: 9
Joined: Mon Apr 04, 2005 10:01 am


Return to CRM (Customer Relationship Management)

Who is online

Users browsing this forum: No registered users and 3 guests