cancel
Showing results for 
Search instead for 
Did you mean: 

Creating Service Order in SAP CRM.

0 Kudos

Hi Experts,

                                     My task is to create service order using fm:crm_order_maintain,crm_order_save but unable to pass data to fields to category and customer , sold to party .Kindly share  any sample code do it or service order creating by FM: crm_service_order_create.

                                               Awaiting for your response

Regards

Krishna Acharya

Accepted Solutions (1)

Accepted Solutions (1)

0 Kudos

Hi,

SAP GURU's,

                 Can anybody tell soultion to issue .

Former Member
0 Kudos

Hi Krishna,

Can you tell me the Import parameter which you want to pass..

regards,

Nagaraj

dharmakasi
Active Contributor
0 Kudos

Hi Krishna,

Try passing correct values to order maintain function module.

You need to modify the code added for partner.

Please check with the below sample code for partner

ls_partner-ref_guid = lv_cu_header_guid ." header guid
ls_partner
-ref_handle         = 1.

        ls_partner
-ref_kind           = 'A'.

        ls_partner
-ref_partner_handle   = '0001'.

        ls_partner
-partner_fct = ls_partner_src-partner_fct.

        ls_partner
-partner_no = ls_partner_src-partner_no.

        ls_partner
-display_type = 'BP'.

        ls_partner
-no_type = 'BP'.

        ls_partner
-kind_of_entry = 'C'.

       
INSERT ls_partner INTO TABLE lt_partner.

Best Regards,

Dharmakasi.

0 Kudos

Thank You Dhamaksi,

                    But can elaborate it , means the input field should be filled and how can find the mandatory fields  .

dharmakasi
Active Contributor
0 Kudos

Hi Krishna,

You can find the default fields names by doing debug while creating service order manually in system.

What do you want to know more here, did you try the above code for partner?

You need to set the fields names correctly to input fields internal table.

ls_partner-ref_guid = lv_cu_header_guid .
ls_partner
-ref_handle         = 1.

        ls_partner
-ref_kind           = 'A'.

        ls_partner
-ref_partner_handle   = '0001'.

        ls_partner
-partner_fct = ls_partner_src-partner_fct.

        ls_partner
-partner_no = ls_partner_src-partner_no.

        ls_partner
-display_type = 'BP'.

        ls_partner
-no_type = 'BP'.

        ls_partner
-kind_of_entry = 'C'.

       
INSERT ls_partner INTO TABLE lt_partner.





     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.

      ls_fieldnames
-fieldname = 'DISPLAY_TYPE'.

     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.

      ls_fieldnames
-fieldname = 'NO_TYPE'.

     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.

      ls_fieldnames
-fieldname = 'KIND_OF_ENTRY'.

     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.

      ls_fieldnames
-fieldname = 'PARTNER_NO'.

     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.

      ls_fieldnames
-fieldname = 'PARTNER_FCT'.

     
INSERT ls_fieldnames INTO TABLE lt_fieldnames.



      ls_inputfields
-objectname = 'PARTNER'.

      ls_inputfields
-ref_kind = 'A'.

      ls_inputfields
-logical_key  = '0001'.

      ls_inputfields
-field_names = lt_fieldnames.

     
INSERT ls_inputfields INTO TABLE lt_input_fields.

Best Regards,
Dharmakais.

0 Kudos

Kudos , its working thank You.

What abt the category thins to which parameters i have to pass data, I kept break point and found that the data of category is moving to IT_SERVICE_OS but similar fields are present in IT_SUBJECT.I Hope you replay soon.



🙂

dharmakasi
Active Contributor
0 Kudos

Hi Krsihna,

Actually both internal internal tables will have same fields. IT_SUBJECT internal table is also part of IS_SERVICE_OS itself.

You can use IT_SUBJECT itself to update category fields.

Best Regards,

Dharmakasi.

0 Kudos

Thank You Dhamakasi , I choosed IT_service passed data according data filled in webui ( by keeping break point ) filled cat_id and ASP_id ,PROFILE_TYPE  ,KATALOG_TYPE

and send as it is to input fields couldn't be able to create Object id.

Can you help me

Thanks

dharmakasi
Active Contributor
0 Kudos

Can you please share your code related to this IT_SERVICE_OS?

0 Kudos

  ls_subject_os-ref_handle = lv_handle_h.
  ls_subject_os-asp_id =   .
ls_subject_os-cat_id =   .
ls_subject_os-katalog_type =    'D'.
ls_subject_os-mode           =     'A'.
INSERT ls_subject_os INTO TABLE lt_subject_os.
***********

ls_subject_os-ref_handle = lv_handle_h.
ls_subject_os-asp_id =  
ls_subject_os-cat_id =  
ls_subject_os-katalog_type =    'D'.
ls_subject_os-mode           =     'B'.
  INSERT ls_subject_os INTO TABLE lt_subject_os."ls_osset-subject.
ls_osset-ref_guid = iv_activity_guid.
ls_osset-ref_handle = lv_handle_h.
ls_osset-profile_type =     'A'.
ls_osset-subject = lt_subject_os.
APPEND ls_osset TO lt_osset.
CLEAR ls_osset.

ls_service_os-ref_guid = iv_activity_guid.
ls_service_os-ref_kind = 'A'.
ls_service_os-ref_handle = lv_handle_h.
ls_service_os-osset = lt_osset.
APPEND ls_service_os TO lt_service_os.
**************

*...input fields
CLEAR ls_input_fields.
ls_input_fields-ref_guid    = iv_activity_guid.
ls_input_fields-ref_kind    = gc_object_kind-orderadm_h.
ls_input_fields-objectname  = gc_object_name-service_os.
ls_input_fields-logical_key = '0001'.


ls_fieldname-fieldname = 'ASP_ID'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.
ls_fieldname-fieldname = 'CAT_ID'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names..
ls_fieldname-fieldname = 'KATALOG_TYPE'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.
ls_fieldname-fieldname = 'MODE'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.
ls_fieldname-fieldname = 'REF_GUID'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.
INSERT ls_input_fields INTO TABLE lt_input_fields.

Regards

Krishna

dharmakasi
Active Contributor
0 Kudos

Hi,

Have you added this code at the end?

ls_inputfields-objectname = 'SERVICE_OS'.

      ls_inputfields
-ref_kind = 'A'.

      ls_inputfields-field_names = lt_fieldnames.

     
INSERT ls_inputfields INTO TABLE lt_input_fields.

If you are creating the subject entry, we should always pass the mode as A only.

Best Regards,

Dharmakasi.

0 Kudos

HI Dhramkasi,

                     One more Issue yar , to insert Contract End Date in Service Request .

I followed exactly the same coding porcedures in the thread:

Procedure:

  • called FM:crm_order_maintain filled IT_PARTNER,IT_REFOBJ,lt_service_os,CHANGE PARAMETERS  lt_orderadm_h , lt_input_fields.
  • Get OrderadmH-Guid
  • Using that Guid called FM:crm_order_read
  • called FM:crm_order_maintain filled lt_appointment,lt_input_fields.
  • called FM:crm_order_save

I'm Able create Object id but unable to modify contract end date.

It is not working yar. Need Your help.

                           Awaiting for your Replay.

Thanks&Regards

Krishna Acharya.

dharmakasi
Active Contributor
0 Kudos

Hi Krishna,

Can you please share your code used to update the contract end date?

One more point here, are you updating the contract end date after document created or while creating document itself?

You can pass the contract end date while creating document itself like the way you are passing partner fields and service os fields.

Best Regards,

Dharmakasi.

0 Kudos

Passed data to FM:Maintain.

  CALL FUNCTION 'CRM_ORDER_MAINTAIN'

  EXPORTING

  it_refobj = lt_refobj

  it_service_os = lt_service_os

  it_partner = lt_partner

  CHANGING

  ct_orderadm_h = lt_orderadm_h

  ct_input_fields = lt_input_fields

  EXCEPTIONS

  error_occurred = 1

  document_locked = 2

  no_change_allowed = 3

  no_authority = 4

  OTHERS = 5.

Based on orderADM-GUID.

Writtend code to modify Contract date.

  CALL FUNCTION 'CRM_ORDER_READ'

  EXPORTING

  it_header_guid = lt_object_to_save

  it_requested_objects = lt_req_obj

  IMPORTING

  et_appointment = lt_appointment_wrk

  EXCEPTIONS

  document_not_found = 1

  error_occurred = 2

  document_locked = 3

  no_change_authority = 4

  no_display_authority = 5

  OTHERS = 6.

  READ TABLE lt_appointment_wrk INTO lv_appointment_wrk WITH KEY appt_type = 'ZCURRENTDATE'.

************************************************************************************************

***********Adding dates*******************************

  DATA:lv_time_stamp TYPE timestamp,

  v_end_date TYPE sydatum,

  v_timestamp TYPE ad_tstamp.

  CLEAR lv_time_stamp.

  CLEAR:ls_appointment .

  ls_appointment-ref_guid = ls_object_to_save." lv_header_guid.

  ls_appointment-ref_kind = 'A'.

  ls_appointment-appt_type = 'CONTEND'.

  CALL FUNCTION 'ADDR_CONVERT_DATE_TO_TIMESTAMP'

  EXPORTING

  iv_date = iv_contract_end_date

  IMPORTING

  ev_timestamp = v_timestamp.

  ls_appointment-timestamp_to = v_timestamp."'20140622041300'." ." '20140522041300'.

  ls_appointment-timezone_to = lv_appointment_wrk-timezone_to.

  ls_appointment-mode = 'B'.

  INSERT ls_appointment INTO TABLE lt_appointment.

  CLEAR: ls_fieldname.

  ls_fieldname-fieldname = 'TIMESTAMP_TO'.

  ls_fieldname-changeable = ' '.

  INSERT ls_fieldname INTO TABLE lt_fieldname.

  CLEAR: ls_input_fields,

  lt_input_fields.

  ls_input_fields-ref_guid = ls_object_to_save.

  ls_input_fields-ref_kind = 'A'.

  ls_input_fields-logical_key = 'CONTEND'.

  ls_input_fields-objectname = 'APPOINTMENT'.

  ls_input_fields-field_names = lt_fieldname[].

  INSERT ls_input_fields INTO TABLE lt_input_fields.

  CLEAR : ls_fieldname.

******************************

  CALL FUNCTION 'CRM_DATES_TIMECONTEXT_DELETE' .

******************************************************

  CALL FUNCTION 'CRM_ORDER_MAINTAIN'

  EXPORTING

  it_appointment = lt_appointment

  CHANGING

  ct_input_fields = lt_input_fields

  EXCEPTIONS

  error_occurred = 1

  document_locked = 2

  no_change_allowed = 3

  no_authority = 4

  OTHERS = 5.

  IF sy-subrc <> 0.

  MESSAGE 'Error changing appointment' TYPE 'E'.

  ENDIF.

  IF sy-subrc = 0.

  CLEAR ls_orderadm_h.

  READ TABLE lt_orderadm_h INTO ls_orderadm_h INDEX 1.

  ls_object_to_save = ls_orderadm_h-guid.

Refresh:lt_object_to_save.

  INSERT ls_object_to_save INTO TABLE lt_object_to_save.

  CALL FUNCTION 'CRM_ORDER_SAVE'

  EXPORTING

  it_objects_to_save = lt_object_to_save

  IMPORTING

  et_saved_objects = lt_saved_objects

  et_exception = lt_exceptions

  et_objects_not_saved = lt_objects_not_saved

  EXCEPTIONS

  document_not_saved = 1

  OTHERS = 2.

  ENDIF.

  IF sy-subrc EQ 0.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  EXPORTING

  wait = 'X'.

  READ TABLE lt_saved_objects INTO ls_saved_objects INDEX 1 .

  ev_case_id = ls_saved_objects-object_id.

  ELSE.

  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

  ENDIF.

0 Kudos

Waiting  4 replay............

dharmakasi
Active Contributor
0 Kudos

Hi,

Try passing value A to ls_appointment-mode = 'B'.

Is there any reason not to pass the end date in first ordermaintain itself, i mean while creating document itself?

0 Kudos

Ya, I thought first we have create Guid then we can change dates .

And Mode it already in 'B' Mode.Kindly check code and repay..

I'm not able to touch any field in IT_appointment ie., date. Kindly Rplay soon

dharmakasi
Active Contributor
0 Kudos

Change mode to A from B, becuase you are creating the end date first time only right..

0 Kudos

Done that  before only kindly check the code and ......Replay soon

dharmakasi
Active Contributor
0 Kudos

Hi,

Are you receiving any value after this code,

CALL FUNCTION 'CRM_ORDER_READ'

  EXPORTING

  it_header_guid = lt_object_to_save

  it_requested_objects = lt_req_obj

  IMPORTING

  et_appointment = lt_appointment_wrk

  EXCEPTIONS

  document_not_found = 1

  error_occurred = 2

  document_locked = 3

  no_change_authority = 4

  no_display_authority = 5

  OTHERS = 6.

  READ TABLE lt_appointment_wrk INTO lv_appointment_wrk WITH KEY appt_type = 'ZCURRENTDATE'.

keep a break point here and check whether you are receiving any value here.

Check whether your receiving anyvalues in this structure lv_appointment_wrk.

0 Kudos

Yar i can able to populate untill next CRM_ORDER_MAINTAIN but unable to display it in webui

....

dharmakasi
Active Contributor
0 Kudos

Try using the below field names to input field names table.

ls_inp_field-fieldname  = 'TIMESTAMP_TO'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.
ls_inp_field
-fieldname  = 'DOMINANT'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

    ls_inp_field
-fieldname  = 'RULE_NAME'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

    ls_inp_field
-fieldname  = 'SHOW_LOCAL'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

    ls_inp_field
-fieldname  = 'TIMEZONE_To'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

    ls_inp_field
-fieldname  = 'TIME_UNIT'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

    ls_inp_field
-fieldname  = 'DURATION'.

   
INSERT ls_inp_field INTO TABLE lt_inp_fields.

0 Kudos

Ok what should be passed iT_appointment..

0 Kudos

HI Kasi,

              Followed your advice and modified accordingly but facing

Error:Date type-specific Customizing missing for date type CONTEND


Regards
krishna

dharmakasi
Active Contributor
0 Kudos

Hi,

Please check with your functional team, there might be some customization required for this one.

Answers (2)

Answers (2)

Former Member
0 Kudos

Hello Krishna,

If you want to create a service order, it d be better if you use BAPI CRM_ORDER_MAINTAIN followed byCRM_ORDER_SAVE and BAPI_TRANSACTION_COMMIT since they can be used to create all type of transactions.

For coding for this FM, put a debugger in CRM_ORDER_MAINTAIN and create a service order in transaction 'crmd_order' and pass values as mentioned in all the tables in this Fm as in the debug mode.

I am not aware of CRM but I found it somewhere on google.

Take a look.May be it will help you.

Regards,

Ritika Garg

0 Kudos

HI Ritika Garg,

                                                      You want me do trail and error method tried it but not working ..I'm able  to populate values for Object id and description but unable to display details of Category and Sold to party .. Need in detail.My code is..


ls_orderadm_h-process_type = iv_process_type.
ls_orderadm_h-description = iv_description.
INSERT ls_orderadm_h INTO TABLE lt_orderadm_h.

ls_partner-partner_fct =  '00000001'.
ls_partner-partner_no = iv_cust_id.
APPEND ls_partner TO lt_partner.

ls_partner-partner_fct =  '00000026' .
ls_partner-partner_no = lv_bupartner.
APPEND ls_partner TO lt_partner.

 
  ls_subject-guid_hierarchy = iv_category.
INSERT ls_subject INTO TABLE lt_subject.
  ls_refobj-product_id = iv_rental_unit.
INSERT ls_refobj INTO TABLE lt_refobj.

TRY.
CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_x16
RECEIVING
uuid = lv_guid_16.
CATCH cx_uuid_error .
ENDTRY.


ls_orderadm_h-handle = 0.
ls_orderadm_h-guid = lv_guid_16.
  ls_orderadm_h-mode = 'A'.
ls_orderadm_h-process_type = 'Z002'.

INSERT ls_orderadm_h INTO TABLE lt_orderadm_h.

ls_input_fields-ref_handle = 0.
ls_input_fields-ref_guid = lv_guid_16.
ls_input_fields-ref_kind = 'A'.
ls_input_fields-objectname = gc_object_name-orderadm_h."'ORDERADM_H'.
ls_input_fields-logical_key = space.
* INSERT ls_input_fields INTO TABLE lt_input_fields.
* CLEAR ls_input_fields.
CLEAR ls_fieldname.
 
ls_fieldname-fieldname = 'PROCESS_TYPE'.
  INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'DESCRIPTION'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'MODE'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'PARTNER_NO'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'DISPLAY_TYPE'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'PARTNER_FCT'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'NO_TYPE'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'KIND_OF_ENTRY'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

ls_fieldname-fieldname = 'REF_KIND'.
INSERT ls_fieldname INTO TABLE ls_input_fields-field_names.

INSERT ls_input_fields INTO TABLE lt_input_fields.

CLEAR ls_input_fields.
CLEAR ls_fieldname.


CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_refobj = lt_refobj
  it_partner = lt_partner
CHANGING
ct_orderadm_h = lt_orderadm_h
ct_input_fields = lt_input_fields
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.


IF sy-subrc = 0.

ls_object_to_save = ls_orderadm_h-guid.

INSERT ls_object_to_save INTO TABLE lt_object_to_save.

CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_object_to_save
IMPORTING
et_saved_objects = lt_saved_objects
et_exception = lt_exceptions
et_objects_not_saved = lt_objects_not_saved
EXCEPTIONS
document_not_saved = 1
OTHERS = 2.

ENDIF.



0 Kudos

Hi SAP GURU's              waiting for your replay...