Code: Alles auswählen.
REPORT zf4help.
PARAMETERS p_proc TYPE crmd_orderadm_h-process_type MATCHCODE OBJECT zsh_processtype.
SELECT-OPTIONS p_datum FOR sy-datum.
TYPES: BEGIN OF ty_orderadm,
object_id TYPE crmd_orderadm_h-object_id,
process_type TYPE crmd_orderadm_h-process_type,
posting_date TYPE crmd_orderadm_h-posting_date,
description TYPE crmd_orderadm_h-description,
END OF ty_orderadm.
DATA lt_orderadm TYPE TABLE OF ty_orderadm.
DATA ls_orderadm LIKE LINE OF lt_orderadm.
SELECT * FROM crmd_orderadm_h INTO CORRESPONDING FIELDS OF TABLE lt_orderadm
WHERE Process_type EQ p_proc AND posting_date eq p_datum.
LOOP AT lt_orderadm INTO ls_orderadm.
WRITE: ls_orderadm-object_id,
ls_orderadm-process_type,
ls_orderadm-posting_date,
ls_orderadm-description.
ENDLOOP.
CALL FUNCTION 'CRM_ORDER_READ'
* EXPORTING
* it_header_guid =
* IT_ITEM_GUID =
* IV_MODE =
* IV_ONLY_SPEC_ITEMS =
* IT_REQUESTED_OBJECTS =
* IV_NO_AUTH_CHECK =
* IT_ITEM_USAGE_RANGE =
* IV_SUBITEM_DEPTH = -1
* IT_OBJECT_FILTER =
* IV_ONLY_CHANGED_OBJ = FALSE
* IV_STATUS_H_CHECK_RELEVANCE = FALSE
* IV_TEXT_LOG_SINGLE = FALSE
* IMPORTING
* ET_ORDERADM_H =
* ET_OPPORT_H =
* ET_LEAD_H =
* ET_ACTIVITY_H =
* ET_LAWREF_H =
* ET_ORDERADM_I =
* ET_OPPORT_I =
* ET_ACTIVITY_I =
* ET_PRODUCT_I =
* ET_FINPROD_I =
* ET_BATCH =
* ET_CONFIG =
* ET_STRUCT_I =
* ET_SALES =
* ET_PRICING =
* ET_PRICING_I =
* ET_ORGMAN =
* ET_SHIPPING =
* ET_CUSTOMER_H =
* ET_CUSTOMER_I =
* ET_SERVICE_H =
* ET_SERVICE_I =
* ET_SERVICE_ASSIGN =
* ET_QUALIF =
* ET_PAYPLAN =
* ET_PAYPLAN_D =
* ET_APPOINTMENT =
* ET_TEXT =
* ET_SCHEDLIN =
* ET_PARTNER =
* ET_SERVICE_OS =
* ET_REFOBJ =
* ET_SUBJECT =
* ET_CUMULAT_H =
* ET_STATUS =
* ET_STATUS_H =
* ET_SCHEDLIN_I =
* ET_CANCEL =
* ET_CANCEL_IR =
* ET_CANCEL_CR =
* ET_BILLPLAN =
* ET_BILLING =
* ET_ORDPRP_I =
* ET_ORDPRP_I_D =
* ET_ORDPRP_OBJL_I_D =
* ET_CUMULATED_I =
* ET_DOC_FLOW =
* ET_EXCEPTION =
* ET_PRIDOC =
* ET_PRICE_AGREEMENTS_CRM =
* ET_PRICE_AGREEMENTS_BBP =
* ET_CONFIG_FILTER =
* ET_SERVICEPLAN_I =
* ET_SERVICEPLAN_IE =
* ET_EXTENSION =
* ET_CREDITVALUES =
* ET_SURVEY =
* ET_AC_ASSIGN =
* ET_APO_I =
* ET_EXT_REF =
* ET_UBB_CTR_I =
* ET_UBB_CR_I =
* ET_UBB_VOL_I =
* ET_CHNGPROC_H =
* ET_CHNGPROC_I =
* ET_DOC_FLOW_PNT =
* ET_FUND_H =
* ET_CLA_H =
* ET_SRV_REQ_H =
* ET_APPROVAL =
* ET_EXTENSION2 =
* ET_CLA_I =
* CHANGING
* CV_LOG_HANDLE =
* EXCEPTIONS
* DOCUMENT_NOT_FOUND = 1
* ERROR_OCCURRED = 2
* DOCUMENT_LOCKED = 3
* NO_CHANGE_AUTHORITY = 4
* NO_DISPLAY_AUTHORITY = 5
* NO_CHANGE_ALLOWED = 6
* OTHERS = 7
*ENDIF.
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
Das liegt daran, dass DESCRIPTION nichts mit den Vorgangsarten zu tun hat, die haben ihre eigene Tabelle, in der die Beschreibung drinsteht. Bei uns heißt die Tabelle CRMC_PR_TYP_CO_T. Wenn sie bei euch anders heißt, dann geh in SE11, gib "CRMC*" ein und geh in die F4 Hilfe und schau, was ihr da habt. Die Beschreibung müsste so ähnlich wie "Vorgangsarten: Texte" sein. Da kannst du dann mit deinen p_proc suchen und die Beschreibungen finden.table4 hat geschrieben:zsh_processtype ist eine eigen erstellte search help in der nur PROCESS_TYPE und DESCRIPTION aus crmd_orderadm_h drin ist
[...]
Bei Ausführung und Tippen auf die Search help kommen bei mir viele viele Mehrfachvorkommende Werte [0005 - (mit Description) Email ] z.b 10x hintereinander
Du LOOPst über deine Tabelle und willst die Daten mit WRITE ausgeben, das tust du aber, bevor du den FuBa benutzt, der dir die Daten gibt. Benutz mal den Debugger, dann wird es klarer. Und hast du überhaupt Daten in deinem System in der Tabelle? Schau mal in der SE11 ob da überhaupt was drin ist, bei uns z.B. nicht.table4 hat geschrieben:Im Moment wird mir garnichts angezeigt
Code: Alles auswählen.
DATA lt_orderadm TYPE TABLE OF ty_orderadm.
DATA ls_orderadm LIKE LINE OF lt_orderadm.
Code: Alles auswählen.
DATA: lt_orderadm TYPE STANDARD TABLE OF ty_orderadm, " such dir eine passende Tabellenart aus, z.B. Standard, Sorted (mit Key) oder Hashed
ls_orderadm TYPE lt_orderadm. " LIKE ist obsolet, besser Type benutzen
LIKE ist obsolet wenn man sich auf DDIC-Objekte bezieht, weil dort keine Daten sondern Typen beschrieben werden. In dem genannten Beispiel ist das absolut korrekt - und die Defintion mittels LIKE LINE OF halte ich in diesem Fall für viel besser als irgend eine TYPE-DeklarationLegxis hat geschrieben: LIKE ist obsolet, besser Type benutzen
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
table4 • ralf.wenzel
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
table4
Code: Alles auswählen.
REPORT zf4help.
**LIKE -> Referenzierung auf DATENOBJEKTE // TYPE auf DATENTYPEN
PARAMETERS: p_proc TYPE crmt_process_type_db MATCHCODE OBJECT crm_process_type,
p_from LIKE crmd_orderadm_h-posting_date,
p_to LIKE crmd_orderadm_h-posting_date.
DATA : lt_header_guids TYPE crmt_object_guid_tab,
lt_orderadm_h TYPE crmt_orderadm_h_wrkt,
lt_status TYPE crmt_status_wrkt,
lt_partner TYPE crmt_partner_external_wrkt,
ls_header_guids TYPE crmt_object_guid,
* ls_header_guids LIKE LINE OF lt_header_guids,
ls_status LIKE LINE OF lt_status,
ls_partner LIKE LINE OF lt_partner,
ls_orderadm_h LIKE LINE OF lt_orderadm_h.
SELECT guid
FROM crmd_orderadm_h INTO TABLE lt_header_guids
WHERE process_type = p_proc
AND posting_date BETWEEN p_from AND p_to.
CALL FUNCTION 'CRM_ORDER_READ'
EXPORTING
it_header_guid = lt_header_guids
IMPORTING
et_orderadm_h = lt_orderadm_h
et_partner = lt_partner
et_status = lt_status
* ET_STATUS_H = lt_
EXCEPTIONS
document_not_found = 1
error_occurred = 2
document_locked = 3
no_change_authority = 4
no_display_authority = 5
no_change_allowed = 6
OTHERS = 7.
LOOP at lt_header_guids INTO ls_header_guids.
LOOP AT lt_orderadm_h INTO ls_orderadm_h WHERE guid = ls_header_guids.
LOOP AT lt_partner INTO ls_partner WHERE ref_guid = ls_orderadm_h-guid.
WRITE:/ ls_orderadm_h-object_id, ls_orderadm_h-description, ls_orderadm_h-created_at,
ls_partner-relation_partner.
ENDLOOP.
ENDLOOP.
ENDLOOP.
So halte ich es auch, gerade bei LIKE LINE OF, weil man direkt die Verwendung klärt. Ein FS, das man so deklariert, hat direkten Bezug zur Tabelle, die man damit "liest". Sollte sich die Tabelle ändern, ändert man auch nur eine Deklaration und nicht zwei. Das ist die Ausnahme.black_adept hat geschrieben:LIKE ist obsolet wenn man sich auf DDIC-Objekte bezieht, weil dort keine Daten sondern Typen beschrieben werden. In dem genannten Beispiel ist das absolut korrekt - und die Defintion mittels LIKE LINE OF halte ich in diesem Fall für viel besser als irgend eine TYPE-DeklarationLegxis hat geschrieben: LIKE ist obsolet, besser Type benutzen
Du darfst am Ende die LOOPs über die Tabellen lt_orderadm_h und lt_partner nicht ineinander verschachteln, sonst ist klar, dass Du überflüssige EInträge bekommst. Definiere Dir eine zusätzliche Ausgabetabelle mit genau den Feldern, die Du brauchst. Mache erst den LOOP über lt_orderadm_h und übertrage die benötigten Werte in Deine Ausgabetabelle. Mache danach (also hinter ENDLOOP) den LOOP über lt_partner, suche Dir aus Deiner Ausgabetabelle jeweils den Satz mit der entsprechenden GUID heraus und ergänze ihn um die fehlenden Daten.es werden zwar noch doppel/dreifach/vielfach Einträge angezeigt aber das ist denke ich nur ein kleines Problem.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
table4