Delete an Opportunity

Dear Gurus,
I'm using CRM 7.0 and I'm trying to delete an Opportunity that has status WON or LOST. an error message is appearing that Document could not be deleted with two warnings :
- Transaction cannot be deleted
- Business transactions with the status 'Won' ('Lost') must not be deleted
Diagnosis
The status W is active on transaction level. The business transaction must therefore not be deleted.
System Response
The system will not delete the business transaction.
Procedure
Check whether it is correct that the status W is active, and reset the status.
Any Help on this???? What's the configuration or Customizing needed in order to delete WON and LOST Opportunity
Appreciate your help...Thanksss
Best Regards,
Rachelle Salamany

Dear Robert,
Thanks for your answer.. i have done this before and it is working fine. But i wanna know if there is a certain configuration to make those system statuses to be able to be deleted. What I mean i want to try to delete the opportunities with statuses WON or LOST without changing its statuses.
Any Help.
Thanks and Best Regards,
Rachelle Salamany

Similar Messages

  • Line item deletions in opportunity  which has folow up doc quotation

    the problem is that even after deleting the line item in quote which is followup doc and then trying to delete the line item in the opp it is giving the same error message - 010 cannot delete the Line item ## which is same as before deleting the line item in the  quote
    once you save and open the transaction the product column for deleted line item  is in change mode again after selecting the same line item and tying to delete the product cat is getting deleted but the line is visible even after saving but if u open the transaction again then you are able to see the action of deletion completed
    I want to know why its behaving like that.

    Hi Srinath,
    This is because, your updated buffer for the transaction is not in coordination with your output.i.e. UI.
    i.e. before deleting the product from the transaction your UI is being field up with details.. and someUI parameters such as ALV grid which is displaying the data is not updated.
    Best Regards,
    Pratik Patel
    <b>Reward with Points!</b>

  • How to determine if Opportunity was deleted manually by the user?

    An opportunity can be deleted by 2 ways.
    1) Manually by a user by clicking on the delete button
    2) Deleted by a process via web services.
    I have a workflow set up for delete and it will create an integration event whenever you delete an opportunity. But I only want this workflow to run under #1 condition above.
    Is there a way to determine that?
    Thanks

    Hi,
    please find below the channel list together with a short description. This list is also available in the online help.
    Import
    This channel string excludes updates performed through the import functionality and through Oracle Data Loader On Demand.
    Online
    This channel string excludes updates performed by user interactions through browser windows.
    Mass Update
    This channel string excludes updates performed through the Mass Update option on list pages.
    Record Merge
    This channel string excludes updates performed by record merges.
    Offline
    This channel string excludes updates from Oracle Offline On Demand.
    Web Services
    This channel string excludes updates from Web services.
    Office
    This channel string excludes updates from Oracle CRM On Demand Integration for Office.
    OEI
    This channel string excludes updates from Oracle Outlook Email Integration On Demand and Oracle Notes Email Integration On Demand.

  • Mass delete opportunity

    Hi ,
      Is there any way to mass deletion of opportunity.
    Any reports and any other way for <b>mass</b> delete.
    Thanks,
    Bala

    Hi Bala,
    You need not write any report for deleting the transactions as told by Thirumala.
    There is a standard report available for that.
    In the transaction SE38, execute the report "CRM_ORDER_DELETE". It will give you a selection screen in which you can select the transaction type & the transaction number range to be deleted.
    Do let me know if this was useful.
    Jash.

  • Opportunity product doesn't delete if quote product is deleted in CR 2013

    Hi,
    The CRM 2013 out of the box functioanlity of creating a quote from opportunity works well for any additions and updates. I have a requirement where in after the creation of quote from opportunity, if the quote product (carried over form the opprotunity)
    is deleted, the same prodcut should be automatically deleted from the opportunity as well.
    Please tell me how to resovle this issue.

    There is no mapping between Quote Product and Opportunity Product.
    You can achieve this using Plugin. register a plugin on delete of Quote Product
    Plugin logic will look like ( I have not tried out this logic. But it should work):
    1. Get QuoteId for Quote Product
    2. Retrieve "Opportunity Id" value for above QuoteId
    3. Retrieve All OpportunityProducts for given Opportunity Id ( retrieved at step 2) 
    where "Opportunity Product"."ProductId" == "Quote Product"."Product Id" And
    "Opportunity Product"."UomId" == "Quote Product"."UomId"
    4. Delete all Opportunity Product retrieved at step 3
    Please note that Step 3 is not fool proof as same  product can be added multiple times and it will retrieve all. You can add additional check like Quanity and Discount.
    Also this implicitly assumes that user has delete permission on both Opportunity and Quote. If there is discrepancy in delete permission than this might not work. 

  • Delete Document Flow

    Hi experts,
      I need to create a FM in order to delete a document flow on certain business transaction. For example: deleting an opportunity from a lead. However, it is not working and I wonder if the input parameters might be wrong.
      Below is the coding. Any comments are welcome!
    Line: -
        CALL FUNCTION 'CRM_DOC_FLOW_MAINTAIN_OW'
          EXPORTING
            iv_header_guid   = iv_lead_guid
            iv_ref_guid      = iv_lead_guid
            iv_external_call = abap_true
          CHANGING
            ct_doc_links     = lt_doc_link
            ct_input_fields  = lt_input_fields
          EXCEPTIONS
            error_occurred   = 1
            OTHERS           = 2.

    did it worked for you ??
    I too looking on it .. it is okay when i check with FM: CRM_DOC_FLOW_DELETE_CHECK_EC, but finally when i run with FM:
    CRM_DOC_FLOW_DELETE_EC, it is not working.
    not deleting the docflow.
    any idea
    Thanks,
    Mahesh

  • Opportunity group help

    Hi,
    Opportunity Group drop down menu,  to remove the some of the products.  We do not want historically information to be affected by this change.  We just want to have these products marked in such a way that they no longer show up in the drop down menu, but that previous opportunities that were created for these products remain complete.
    Please help me for this issue.
    How to hide thopse opportinity groups from drop down list.
    Advance thanks
    DST

    Hi,
    You can delete the Opportunity Group contents in SPRO under Settings for Opportunity under Define Opportunity Group, select and delete the groups.
    Best Regards,
    Johnny.

  • Error 00336 when deleting

    I'm administrator and i try to delete some accounts, oportunities, etc and the system tell to me: "The record can not be deleted (SBL-ODS-00336)"
    I'm administrator and i have all posible grants.
    Any idea?

    I can do a list of opportunities. Also i can invoke to a batch delete, but the problem persist because the batch process fail with the same error that manually delete (you can't delete the opportunity)
    I'm thinking about one posible solution: With a webservice update the state of all oportunities and after that delete all with batch delete

  • Can workflows be triggered by Web Service updates?

    Hi,
    From our testing it appears that the workflows are not triggered by updates via the web services. In particular we have a workflows as follows:
    Workflow Name: Opportunity Contact Role Delete
    Record Type: Opportunity Contact Role
    Trigger Event: When record is deleted
    Action Name: Opportunity Contact Role Deleted     
    Action Type: Integration Event.
    The workflow is triggered correctly when we manually delete an Opportunity Contact Role via the CRM on Demand Opportunities details page, but is not triggered when we delete an Opportunity Contact Role via the Web Services. can anyone confirm this?
    Thanks
    John

    Hi !
    I can tell that WebServices are triggering workflows. I have many workflow that trigger when a new SR is created and the action is to assign a book of business. And today we have webservices creating SR and the books are correctly assigned by the workflows.
    Furthermore, you have a function you can use in the workflow condition which allows you to exclude the WebServices manipulation, in order to not trigger the WF if it's by webservices. So I think that if such a function exists, it means that in standard, the workflows are triggered by webservices actions.
    Hope this will help, feel free to ask more !
    Max

  • BAPI_OPPORTUNITY_CREATEMULTI

    Can someone please show me an example of how to use this BAPI to create CRM Sub-Opportunities -  have been struggling for several days. Am creating a simple prototype prg to see if feasible at-this-time. Sub-Opps already exist in the system, I just want to add/assign them to a Master CRM rec.
    Seems like I only need 3 param tables:
    1. HEADER - is this for the Master Rec or do you build header based on sub-opp info/guid?
    2. OPPORTUNITY - seems clear but am not sure about fields REF_HANDLE & REF_GUID. Are these for the master rec or the opportunity?
    3. INPUT_FIELDS - everyone has trouble with this:
       lt_InputFields-REF_HANDLE  = ? "N(10)
       lt_InputFields-REF_GUID    = ? "C(32)
       lt_InputFields-REF_KIND    = ? "C(01)
       lt_InputFields-OBJECTNAME  = ? "C(30)
       lt_InputFields-LOGICAL_KEY = ? "C(42)
       lt_InputFields-FIELDNAME   = ? "C(30)
       lt_InputFields-CHANGEABLE  = ? "C(1)  
    I have tried the following alternate strategies too, maybe
    1. Debug main transaction CRMD_BUS2000111 (Maintain Opportunities) at point of saving sub-opps but I cannot find where the save occurs to see how SAP does it. Ran SE30 on it and found some functions that look promising but when I set a break-point on a specific func-name, it never stops!
    2. Function CRM_WAP_OPP_CREATE() actually calls BAPI_OPPORTUNITY_CREATEMULTI and it seems much-much simpler because it requires a minimal number of parameters but I get nothing.
    If anyone can help, I promise to upload my final prototype here for others.

    Below is a complete prototype program that exercises the CRM OPPORTUNITY BAPIs. It should run as-is, since no special tables or text-elements are used. I did not use EVERY table parameter available to the BAPIs, but this is a good start.
    As I promised, once I got these working - I wanted to post my results. I hope this may be useful and serve as a big relief for the next guy.
    Program Name: ZJRC_CRMBAPI01 (SAP vers 4.7, CRM 4.0)
    Description : Test program for the CRM Opportunity BAPI's.
                : CRM_OPPORTUNITYCRM_BAPI        BAPI Implementations:
                : BAPI_OPPORTUNITY_GETDETAILMUL  Read Opportunities
                : BAPI_OPPORTUNITY_CREATEMULTI   Generate Opportunities
                : BAPI_OPPORTUNITY_CHANGEMULTI   Change Opportunities
                : BAPI_OPPORTUNITY_DELETEMULTI   Delete Opportunities
                : Once the concepts are proven, a function module will
                : will created for Steven J. Lee to call from his
                : modified CRM opportunity screen.
    Parameters  : None
    Called from : SE38/SA38
    Calls to    :
       Internal : 1. L_Main()           - main body.
                : 2.   L_GetGUID()      - returns guid based on obj_id #.
                : 3.   L_GetOppInfo()   - calls BAPI_OPPORTUNITY_GETDETAILMU()
                : 4.   L_CreateOpp()    - calls BAPI_OPPORTUNITY_CREATEMULTI()
                : 5.     L_BldCHeader() - builds header param itab.
                : 6.     L_BldCOpp()    - builds opportunity param itab.
                : 7.     L_BldCOrg()    - builds organization param itab.
                : 8.     L_BldCCustH()  - builds customer_head itab.
                : 9.     L_BldCFields() - builds input_fields itab. (Partner too)
                :10.   L_LinkOpp()      - calls BAPI_OPPORTUNITY_CHANGEMULTI()
                :11.     L_CheckOpen()  - if order is open, cannot save.
                :12.   L_ChangeOpp()    - calls BAPI_OPPORTUNITY_CHANGEMULTI()
                :13.   L_DeleteOpp      - calls BAPI_OPPORTUNITY_DELETEMULTI()
                :14.   L_OutPut()       - displays guid info and bapi results.
                :15.     L_DispSubOpps()- displays linked sub-opp guid info.
                :16. L_ClearITabs()     - clears various global itabs.
       External : 1. BAPI_OPPORTUNITY_GETDETAILMUL()
                : 2. BAPI_OPPORTUNITY_CREATEMULTI()
                : 3. BAPI_OPPORTUNITY_CHANGEMULTI()
                : 4. BAPI_OPPORTUNITY_DELETEMULTI()
                : 5. BAPI_TRANSACTION_COMMIT()
                : 6. GUID_CREATE() - not implemented.
                : 7. POPUP_TO_INFORM()
                : 8. POPUP_TO_CONFIRM_STEP()
                : 9. CRM_ORDERADM_H_GUID_GET_OW() - get guid by Obj_Id. (Cuzed problems.)
                :10. GET_FIELDTAB_REMOTE() - get list of fieldnames.
    Coupling    : None
    Files used  :
      SAP files : 1. CRMD_ORDERADM_H = get guid via Obj_Id directly when function
                :                      CRM_ORDERADM_H_GUID_GET_OW() cuzed problems.
      I-TABS    : 1. Many for bapi's, none for other purposes.
    Returns     : None
    Examples    : 1. *-- As called from SE38/SA38.
                :    ZJRC_CRMBAPI01
    Revision His:
    JRC, 05/25/05 - initial.
    REPORT  ZJRC_CRMBAPI01.
    *-- Constants.
    CONSTANTS: NO(1)   TYPE C VALUE ' ',
               YES(1)  TYPE C VALUE 'X'.
    *-- INCLUDES:
    INCLUDE <ICON>.
    *-- Tables
    *-- BAPI GET-INFO tables. (Global because I use them here/there to "seed"
      corresponding tables for the CREATE/CHANGE/DELETE bapi's. For example,
      if delete, the header info is the same. However, you must be careful
      because the structures are seldom identical requiring a move-corresponding.)
      !!! NOTE !!! - don't forget to also add any new itabs here to module
      L_ClearITabs at the end of this prg. If not, you may get duplicate
      recs in the itab for each call to L_GetOppInfo().
    DATA: ith_GetGUID      TYPE TABLE OF BAPIBUS20001_GUID_DIS         WITH HEADER LINE,
          ith_GetHEADER    TYPE TABLE OF BAPIBUS20001_HEADER_DIS       WITH HEADER LINE,
          ith_MastHeader   TYPE TABLE OF BAPIBUS20001_HEADER_DIS       WITH HEADER LINE,
          ith_GetORG       TYPE TABLE OF BAPIBUS20001_ORGMAN_DIS       WITH HEADER LINE,
          ith_GetPARTNER   TYPE TABLE OF BAPIBUS20001_PARTNER_DIS      WITH HEADER LINE,
          ith_GetOPP       TYPE TABLE OF BAPIBUS20001_OPPORTUNITY_DIS  WITH HEADER LINE,
          ith_GetCustH     TYPE TABLE OF BAPIBUS20001_CUSTOMER_H_DIS   WITH HEADER LINE,
          ith_GetDOCFLOW   TYPE TABLE OF BAPIBUS20001_DOC_FLOW_DIS     WITH HEADER LINE,
          ith_GetReturn    TYPE TABLE OF BAPIRET2                      WITH HEADER LINE.
    *-- BAPI CREATE tables. (Declared global so output can be display at end of report.)
    DATA: ith_CreReturn    TYPE TABLE OF BAPIRET2                      WITH HEADER LINE,
          ith_CreSaved     TYPE TABLE OF BAPIBUS20001_OBJECT_ID        WITH HEADER LINE,
          ith_CreCreated   TYPE TABLE OF BAPIBUS20001_HEADER_INS       WITH HEADER LINE.
    *-- BAPI CHANGE tables. (Declared global so output can be display at end of report.)
    DATA: ith_ChgReturn    TYPE TABLE OF BAPIRET2                      WITH HEADER LINE.
    *-- BAPI DELETE tables. (Declared global so output can be display at end of report.)
    DATA: ith_DelObjs      TYPE TABLE OF BAPIBUS20001_OBJECT_ID        WITH HEADER LINE,
          ith_DelReturn    TYPE TABLE OF BAPIRET2                      WITH HEADER LINE.
    *-- When using a Tab control in conjunction with my "OK/EXIT"
      buttons, I need this to go to the START-OF-SELECTION event
      when the OK button is clicked and controlled from the
      AT SELECTION-SCREEN event.
    TABLES: SSCRFIELDS.
    ********************[ USER INPUT SCREEN ]*********************
    *--[ Selection Screen Title ]--
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN COMMENT 1(60) T_0Title.
    SELECTION-SCREEN SKIP 1.
    *--[ START SCRN BLOCK 1 ]--
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T_1Title.
      SELECTION-SCREEN BEGIN OF LINE.
      *-- Master CRM key.
        SELECTION-SCREEN COMMENT 1(10) T_CRMKey.
        PARAMETERS: S_CRMKey(10) TYPE C DEFAULT '369'.
      *-- Display master opportunity info.
        SELECTION-SCREEN PUSHBUTTON 25(11) T_OKBut USER-COMMAND OK.
      SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK B1.
    *--[ START SCRN BLOCK 2 ]--
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE T_2Title.
      SELECTION-SCREEN BEGIN OF LINE.
      *-- Enter sub-opp key to clone from.
        SELECTION-SCREEN COMMENT 1(10) T_SubOp1.
        PARAMETERS: S_SubOp1(40) TYPE C DEFAULT '(Cloned from master nnn)' LOWER CASE.
      *-- Add Sub-Opp button.
        SELECTION-SCREEN PUSHBUTTON 55(15) T_AddSOP USER-COMMAND ADDSOP.
      SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK B2.
    *--[ START SCRN BLOCK 3 ]--
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE T_3Title.
      SELECTION-SCREEN BEGIN OF LINE.
      *-- Enter sub-opp key to link to master.
        SELECTION-SCREEN COMMENT 1(10) T_LnkKey.
        PARAMETERS: S_LnkKey(10) TYPE C DEFAULT '725'.
      *-- Link Sub-Opp button.
        SELECTION-SCREEN PUSHBUTTON 25(15) T_LnkSOP USER-COMMAND LNKSOP.
      *-- Un-Link Sub-Opp button.
        SELECTION-SCREEN PUSHBUTTON 45(15) T_ULkSOP USER-COMMAND ULKSOP.
      *-- Delete Sub-Opp button.
        SELECTION-SCREEN PUSHBUTTON 65(15) T_DELSOP USER-COMMAND DELSOP.
      SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK B3.
    *--[        OK/EXIT         ]--
    *-- Ok/Exit pushbuttons. (Actually, OK is DISPLAY above.)
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN PUSHBUTTON 40(11) T_EXBut USER-COMMAND EXIT.
    *--[      INFORMATION       ]--
    SELECTION-SCREEN SKIP 1.
    *-- Set Break point(s).
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF LINE.
       PARAMETERS: S_Break AS CHECKBOX DEFAULT ' ' MODIF ID BUG.
       SELECTION-SCREEN COMMENT 3(31) T_BugTxt MODIF ID BUG.
    SELECTION-SCREEN END OF LINE.
    ********************[  INITIALIZATION   ]*********************
    INITIALIZATION.
    *-- Global vars.
    DATA: g_Ok(1)          TYPE C VALUE YES,
          g_RunWhat(10)    TYPE C,
          g_MastGuid       TYPE GUID_32,
          g_BlankGuid      TYPE GUID_32 VALUE '00000000000000000000000000000000',
          g_LogicalKey1(4) TYPE N VALUE '0001'.
    *-- Screen elements.
    *-- Title
       CONCATENATE SY-REPID '-' 'CRM BAPI OPPORTUNITY TEST01'
                   INTO T_0Title SEPARATED BY SPACE.
       T_1Title = 'Master Opportunity'.
    *-- Block1 selections.
       T_CRMKey  = 'CRM Key:'.
    *-- Block2 selections.
       T_2Title = 'Create Opp'.
       T_AddSOP = 'Clone Opp'.
       T_SubOp1 = 'Desc 2:'.
    *-- Block3 selections.
       T_3Title = 'Link/Delete Opp'.
       T_LnkKey = 'Link Key:'.
       T_LnkSOP = 'Link SubOpp'.
       T_ULkSOP = 'UnLink SubOpp'.
       T_DelSOP = 'Delete SubOpp'.
    *-- Ok/Exit
    T_OKBut  = '@15@Ok'.
       T_OKBut  = 'Display'.
       T_EXBut  = '@2O@Exit'.
       T_BugTxt = 'Activate break points.'.
      GET PARAMETER ID 'MGU' FIELD S_MGuid.
    ********************[ AT SELECTION-SCREEN ]********************
    AT SELECTION-SCREEN.
    *-- Activate trace/debug?
    IF S_Break = YES. BREAK-POINT. ENDIF.
    *-- User pressed the continue or exit button?
    g_RunWhat = SY-UCOMM.
    CASE g_RunWhat.
         WHEN 'ADDSOP' OR 'LNKSOP' OR 'ULKSOP' OR 'DELSOP'.
            *-- Goto START-OF-SELECTION event...
              SSCRFIELDS-UCOMM = 'ONLI'.
         WHEN 'OK' OR 'ONLI'. "OK button or SAP F8.
            *-- Goto START-OF-SELECTION event...
              SSCRFIELDS-UCOMM = 'ONLI'.
         WHEN 'HELP1'.
            *-- Goto START-OF-SELECTION event...
              SSCRFIELDS-UCOMM = 'ONLI'.
         WHEN 'EXIT'.
              LEAVE.
         WHEN OTHERS.
              IF SY-UCOMM IS INITIAL. "Pressed ENTER on some prompt.
               *-- Here's your chance to update something on screen.
              ENDIF.
    ENDCASE.
    ********************[ START-OF-SELECTION ]*********************
    START-OF-SELECTION.
    *-- Activate trace/debug?
    IF S_Break = YES. BREAK-POINT. ENDIF.
    *-- What pushbutton was selected.
    CASE g_RunWhat.
         WHEN 'OK' OR 'ONLI' OR 'ADDSOP' OR 'LNKSOP' OR 'ULKSOP' OR 'DELSOP'.
            *-- Start the report.
              PERFORM L_Main.
    ENDCASE.
    ********************[ START L_Main()     ]*********************
    FORM L_Main.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *-- For Delete, the obj_id in the "CRM Key:" input field is not
    *   used. We are going to delete whatever obj_id is in the
    *   "Link Key:" prompt so store it to CRMKey and pretend it's
    *   the master. This way lookups will validate it. For Link/Unlink
    *   we must still validate that the master CRM Key exists.
      IF g_RunWhat EQ 'DELSOP'.
         S_CRMKey = S_LnkKey.
      ENDIF.
    *-- Get GUID for Master-Opportunity.
      PERFORM L_GetGUID USING S_CRMKey CHANGING g_MastGuid g_Ok.
      CHECK g_Ok = YES.
    *-- Save Master-Opportunity info.
      PERFORM L_GetOppInfo USING g_MastGuid CHANGING g_Ok.
      CHECK g_Ok = YES.
    *-- Store master info and place result in header.
      ith_MastHeader[] = ith_GetHEADER[].
      READ TABLE ith_MastHeader INDEX 1.
    *-- What action?
      CASE g_RunWhat.
           WHEN 'ADDSOP'.
              *-- Create/Clone Sub-Opportunity from Master Opportunity.
                PERFORM L_CreateOpp CHANGING g_Ok.
           WHEN 'LNKSOP' OR 'ULKSOP'.
              *-- Link or UnLink Sub-Opportunity to Master.
                PERFORM L_LinkOpp USING g_RunWhat S_CRMKey S_LnkKey CHANGING g_Ok.
           WHEN 'DELSOP'.
              *-- Delete Sub-Opportunity.
                PERFORM L_DeleteOpp USING S_LnkKey CHANGING g_Ok.
      ENDCASE.
    CHECK g_Ok = YES.
    *-- Get Master-Opportunity info again before output
    *   in case we added or linked something. If Delete
    *   do NOT re-get info because we deleted it and
    *   the GETDETAIL info BAPI would now fail.
      IF g_RunWhat NE 'DELSOP'.
         PERFORM L_ClearItabs.
         PERFORM L_GetOppInfo USING ith_MastHeader-GUID CHANGING g_Ok.
      ENDIF.
    *-- Diplay GUIDs, Opportunities, BAPI messages, etc.
      PERFORM L_OutPut.
    *-- END Output.
      WRITE: / 'END:', SY-UZEIT.
    *-- End report.
      NEW-PAGE PRINT OFF.
    ENDFORM.
    ********************[ END   L_Main()       ]*******************
    ********************[ START  L_GetGUID()   ]*******************
    FORM L_GetGUID USING P_CRMKey CHANGING P_Guid p_Ok.
    *-- Local vars.
      DATA: L_CRMKey(10)    TYPE C,
            L_TmpTxt3(45)   TYPE C,
            L_LookupMode(1) TYPE C VALUE '1'. "Tried two ways to get guid.
    *-- For SAP function CRM_ORDERADM_H_GUID_GET_OW() - if used.
      DATA: ET_GuidKey TYPE CRMT_OBJECT_GUID_TAB,
            EV_GuidKey TYPE CRMT_OBJECT_GUID.
    *-- For manually getting guids from table CRMD_ORDERADM_H.
      DATA: BEGIN OF L_TabGuids OCCURS 0,
                  GUID      LIKE CRMD_ORDERADM_H-GUID,
                  OBJECT_ID LIKE CRMD_ORDERADM_H-OBJECT_ID,
            END   OF L_TabGuids.
    *-- Default to YES, if error will set to NO below.
      p_OK = YES.
    *-- Format CMR key. (ie: 369 must be '0000000369')
      l_CRMKey = P_CRMKey.
      SHIFT l_CRMKey RIGHT DELETING TRAILING SPACE.
      OVERLAY l_CRMKey WITH '0000000000'.
    *-- How do you want to retrieve GUID?
      CASE L_LookupMode.
           WHEN '1'.
              *-- Get GUID directly from order-admin table for id.
                SELECT GUID OBJECT_ID
                       FROM CRMD_ORDERADM_H INTO TABLE L_TabGuids
                       WHERE OBJECT_ID   = l_CRMKey AND
                             OBJECT_TYPE = 'BUS2000111'. "Opportunity
                IF SY-SUBRC = 0.
                   READ TABLE L_TabGuids INDEX 1.
                   P_Guid = L_TabGuids-GUID.
                ELSE.
                   p_Ok = NO.
                   l_TmpTxt3 = 'was not found. Try again.'.
                ENDIF.
           WHEN '2'.
              *-- This function works, but it sometimes retrieves multiple GUIDs
              *   for the same CRMKey/ObjID - which messes me up. Maybe there are
              *   different kinds of "objects" for the same id? Thought using the
              *   OBJECT_TYPE = 'BUS2000111' might work but no. Decided to use the
              *   direct SELECT on CRMD_ORDERADM_H above.
              *-- Get GUID for CRM object.
                CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_OW'
                     EXPORTING
                       IV_OBJECT_ID           = L_CRMKey    "Object ID ie: 12
                       IV_OBJECT_TYPE         = 'BUS2000111'
                     IMPORTING
                       ET_ORDERADM_H_GUID     = ET_GuidKey
                       EV_ORDERADM_H_GUID     = EV_GuidKey
                     EXCEPTIONS
                       RECORD_NOT_FOUND        = 1
                       OBJECT_ID_IS_NOT_UNIQUE = 2
                       OTHERS                  = 3.
                IF SY-SUBRC EQ 0.
                   P_Guid = EV_GuidKey.
                ELSE.
                   p_Ok = NO.
                   CASE SY-SUBRC.
                        WHEN 1.
                             l_TmpTxt3 = 'was not found. Try again.'.
                        WHEN 2.
                             l_TmpTxt3 = 'was not unique. Maybe linked already?'.
                        WHEN OTHERS.
                             l_TmpTxt3 = 'OTHER error msg. ???'.
                   ENDCASE.
                ENDIF. "Failed
      ENDCASE. "L_LookupMode
    *-- Display fail msg.
      IF p_Ok = NO.
         CALL FUNCTION 'POPUP_TO_INFORM'
              EXPORTING
                TITEL = 'INVALID CRM NUMBER'
                TXT1  = 'CRM Number'
                TXT2  = l_CRMKey
                TXT3  = l_TmpTxt3.
      ENDIF.
    ENDFORM.
    ********************[ END    L_GetGUID()   ]*******************
    ********************[ START L_GetOppInfo() ]*******************
    FORM L_GetOppInfo USING p_GuidKey CHANGING p_Ok.
    *-- Local vars.
    DATA: L_LCnt TYPE I.
    *-- Local tables. (Use these if you want to examine output of
      the GET BAPI. They are not used anywhere else.)
    DATA: lth_ITEM            TYPE TABLE OF BAPIBUS20001_ITEM_DIS         WITH HEADER LINE,
          lth_TEXT            TYPE TABLE OF BAPIBUS20001_TEXT_DIS         WITH HEADER LINE,
          lth_STATUS          TYPE TABLE OF BAPIBUS20001_STATUS_DIS       WITH HEADER LINE,
          lth_PRODUCT         TYPE TABLE OF BAPIBUS20001_PRODUCT_DIS      WITH HEADER LINE,
          lth_SALES           TYPE TABLE OF BAPIBUS20001_SALES_DIS        WITH HEADER LINE,
          lth_CUSTOMER_ITEM   TYPE TABLE OF BAPIBUS20001_CUSTOMER_I_DIS   WITH HEADER LINE,
          lth_EXTENSIONOUT    TYPE TABLE OF BAPIPAREX                     WITH HEADER LINE,
          lth_APPOINTMENT     TYPE TABLE OF BAPIBUS20001_APPOINTMENT_DIS  WITH HEADER LINE,
          lth_SERVICE_OS      TYPE TABLE OF BAPIBUS20001_SERVICE_OS_DIS   WITH HEADER LINE,
          lth_LISTOFRELATIONS TYPE TABLE OF BAPIRELLK                     WITH HEADER LINE,
          lth_PRICING         TYPE TABLE OF BAPIBUS20001_PRICING_DIS      WITH HEADER LINE,
          lth_PRICING_ITEM    TYPE TABLE OF BAPIBUS20001_PRICING_ITEM_DIS WITH HEADER LINE,
          lth_SCHEDULE        TYPE TABLE OF BAPIBUS20001_SCHEDLIN_DIS     WITH HEADER LINE,
          lth_SCHEDULE_ITEM   TYPE TABLE OF BAPIBUS20001_SCHEDLIN_ITEM_DIS WITH HEADER LINE,
          lth_CONFIG_CFG      TYPE TABLE OF BAPIBUS20001_CONFIG_CUCFG_DIS WITH HEADER LINE,
          lth_CONFIG_BLB      TYPE TABLE OF BAPIBUS20001_CONFIG_CUBLB_DIS WITH HEADER LINE,
          lth_CONFIG_INS      TYPE TABLE OF BAPIBUS20001_CONFIG_CUINS_DIS WITH HEADER LINE,
          lth_CONFIG_PRT      TYPE TABLE OF BAPIBUS20001_CONFIG_CUPRT_DIS WITH HEADER LINE,
          lth_CONFIG_VAL      TYPE TABLE OF BAPIBUS20001_CONFIG_CUVAL_DIS WITH HEADER LINE,
          lth_CONFIG_VK       TYPE TABLE OF BAPIBUS20001_CONFIG_CUVK_DIS  WITH HEADER LINE,
          lth_CONFIG_REF      TYPE TABLE OF BAPIBUS20001_CONFIG_CUREF_DIS WITH HEADER LINE,
          lth_LIKE_ITEM       TYPE TABLE OF BAPIBUS20001_STRUCTURE_DIS    WITH HEADER LINE,
          lth_CUMULATED_H     TYPE TABLE OF BAPIBUS20001_CUMULATED_H_DIS  WITH HEADER LINE.
    *-- Initialize GUID tab.
      CLEAR ith_GetGUID. REFRESH ith_GetGUID.
      ith_GetGUID-GUID = p_GuidKey.
      APPEND ith_GetGUID.
    *------------[ GET OPPORTUNITY INFO ]--------------
      CALL FUNCTION 'BAPI_OPPORTUNITY_GETDETAILMUL'
           TABLES
             GUID            = ith_GetGUID            "<== Global
             HEADER          = ith_GetHEADER          "<== Global
             ITEM            = lth_ITEM
             OPPORTUNITY     = ith_GetOPP             "<== Global
             PARTNER         = ith_GetPARTNER         "<== Global
             ORGANISATION    = ith_GetORG             "<== Global
             TEXT            = lth_TEXT
             STATUS          = lth_STATUS
             PRODUCT         = lth_PRODUCT
             SALES           = lth_SALES
             CUSTOMER_HEAD   = ith_GetCustH           "<== Global
             CUSTOMER_ITEM   = lth_CUSTOMER_ITEM
             EXTENSIONOUT    = lth_EXTENSIONOUT
             RETURN          = ith_GetRETURN          "<== Global
             APPOINTMENT     = lth_APPOINTMENT
             SERVICE_OS      = lth_SERVICE_OS
             LISTOFRELATIONS = lth_LISTOFRELATIONS
             PRICING         = lth_PRICING
             PRICING_ITEM    = lth_PRICING_ITEM
             SCHEDULE        = lth_SCHEDULE
             SCHEDULE_ITEM   = lth_SCHEDULE_ITEM
             CONFIG_CFG      = lth_CONFIG_CFG
             CONFIG_BLB      = lth_CONFIG_BLB
             CONFIG_INS      = lth_CONFIG_INS
             CONFIG_PRT      = lth_CONFIG_PRT
             CONFIG_VAL      = lth_CONFIG_VAL
             CONFIG_VK       = lth_CONFIG_VK
             CONFIG_REF      = lth_CONFIG_REF
             LIKE_ITEM       = lth_LIKE_ITEM
             CUMULATED_H     = lth_CUMULATED_H
             DOC_FLOW        = ith_GetDOCFLOW.        "<== Global
    *-- Check header for results.
      DESCRIBE TABLE ith_GetHEADER LINES L_LCnt.
      IF L_LCnt > 0.
         p_Ok = YES.
      ELSE.
         MESSAGE i000(crm0) WITH 'Error retrieving header for GUID.'.
         p_Ok = NO.
      ENDIF.
    ENDFORM.
    *******************[ END   L_GetOppInfo() ]********************
    *******************[ START L_CreateOpp()  ]********************
    FORM L_CreateOpp CHANGING p_OK.
    *-- Local vars.
      DATA: L_Answer(1)  TYPE C,
            lth_Text     LIKE TLINE    OCCURS 0,
            l_TmpDesc    LIKE BAPIBUS20001_HEADER_INS-DESCRIPTION. "C(40)
    *-- Default this.
      p_OK = YES.
    *-- Prompt user.
      CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
            EXPORTING
            DEFAULTOPTION  = 'Y'
              TEXTLINE1      = 'Ready to CREATE Opportunity?'
            TEXTLINE2      =
              TITEL          = 'CREATE OPPORTUNITY'
              CANCEL_DISPLAY = ' ' "Hide the CANCEL button
            IMPORTING
              ANSWER         = L_Answer.
      IF L_Answer <> 'J'.
         p_Ok = NO.
         EXIT.
      ENDIF.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *-------------[ RE-GET MASTER OPP INFO AGAIN ]-------------
    *-- Start with all empty itabs.
      PERFORM L_ClearITabs.
    *-- Get GUID for Master-Opportunity.
      PERFORM L_GetGUID USING S_CRMKey CHANGING g_MastGuid p_Ok.
      CHECK p_Ok = YES.
    *-- Get Master-Opportunity info.
      PERFORM L_GetOppInfo USING g_MastGuid CHANGING p_Ok.
      CHECK p_Ok = YES.
    *---------[ Build BAPI Table Params ]-----------
      DATA: lth_CHeader  TYPE TABLE OF BAPIBUS20001_HEADER_INS   WITH HEADER LINE,
            lth_COpp     TYPE TABLE OF BAPIBUS20001_OPPORTUNITY  WITH HEADER LINE,
            lth_COrg     TYPE TABLE OF BAPIBUS20001_ORGMAN_INS   WITH HEADER LINE,
            lth_CPartner TYPE TABLE OF BAPIBUS20001_PARTNER_INS  WITH HEADER LINE,
            lth_CPricing TYPE TABLE OF BAPIBUS20001_PRICING      WITH HEADER LINE,
            lth_CCustH   TYPE TABLE OF BAPIBUS20001_CUSTOMER_H   WITH HEADER LINE,
            lth_CFields  TYPE TABLE OF BAPIBUS20001_INPUT_FIELDS WITH HEADER LINE.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *---------[ Build Header itab        ]-----------
      PERFORM L_BldCHeader TABLES lth_CHeader.
    *---------[ Build Opportunities itab ]-----------
      PERFORM L_BldCOpp TABLES lth_COpp.
    *---------[ Build Organization itab  ]-----------
      PERFORM L_BldCOrg TABLES lth_COrg.
    *---------[ Build Pricing itab       ]-----------
      PERFORM L_BldCPricing TABLES lth_CPricing lth_COpp.
    *---------[ Build CustomerHead itab  ]-----------
      PERFORM L_BldCCustH   TABLES lth_CCustH.
    *---------[ Build Input_Fields itab  ]-----------
    * Note, Partner itab is built here too.
      PERFORM L_BldCFields TABLES lth_CFields lth_CPartner.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *---------[  CREATE NEW OPPORTUNITY  ]-----------
      CALL FUNCTION 'BAPI_OPPORTUNITY_CREATEMULTI'
           EXPORTING
             TESTRUN          =  ' '
           TABLES
             HEADER           = lth_CHeader
             OPPORTUNITY      = lth_COpp
             ORGANISATION     = lth_COrg
             PARTNER          = lth_CPartner
           TEXT             =
           PRODUCT          =
             PRICING          = lth_CPricing  "<== Needed for CURRENCY.
             INPUT_FIELDS     = lth_CFields
             CREATED_PROCESS  = ith_CreCreated
             RETURN           = ith_CreReturn
             SAVED_PROCESS    = ith_CreSaved
           ITEM             =
           SCHEDULELINE     =
           APPOINTMENT      =
           SERVICE_OS       =
           STATUS           =
             CUSTOMER_HEAD    = lth_CCustH.  "<== For SAIC detail data.
           CUSTOMER_ITEM    =
           DOCUMENT_FLOW    =
           PRICING_ITEM     =
           CONFIG_CFG       =
           CONFIG_BLB       =
           CONFIG_INS       =
           CONFIG_PRT       =
           CONFIG_VAL       =
           CONFIG_VK        =
           CONFIG_REF       =
           CONDITION_CREATE =
           EXTENSIONIN      =   .
    *-- The new Opportunity will not appear until you commit.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
             EXPORTING
               WAIT = 'X'.
    ENDFORM.
    *******************[ END   L_CreateOpp()  ]********************
    *******************[ START L_BldCHeader() ]********************
    FORM L_BldCHeader TABLES lth_CHeader STRUCTURE BAPIBUS20001_HEADER_INS.
    *-- Use Master header fields. Structures are different between
    *   the GETDETAIL and CREATE BAPI's so we have to map.
       READ TABLE ith_GetHEADER INDEX 1.
       MOVE-CORRESPONDING ith_GetHEADER TO lth_CHeader.
       CLEAR lth_CHeader-GUID.         "Contains guid from master rec.
       CLEAR lth_CHeader-OBJECT_ID.    "ie: 000000369
       lth_CHeader-GUID              = g_BlankGuid.
       lth_CHeader-HANDLE            = 1.      "<== Set this and NO SAVE at all unless ALL are set.
       lth_CHeader-PROCESS_TYPE      = 'OISU'. "ith_HEADER-PROCESS_TYPE = ZMST
       lth_CHeader-BIN_RELATION_TYPE = 'MASU'.
       APPEND lth_CHeader.
    ENDFORM.
    *******************[ END   L_BldCHeader() ]********************
    *******************[ START L_BldCOpp()    ]********************
    FORM L_BldCOpp TABLES lth_COpp STRUCTURE BAPIBUS20001_OPPORTUNITY.
    *-- Local vars.
    DATA: L_RHandle    LIKE BAPIBUS20001_OPPORTUNITY-REF_HANDLE VALUE 1,
          L_TmpC10(10) TYPE C,
          L_TmpDesc2   LIKE BAPIBUS20001_OPPORTUNITY-DESCRIPTION_OPP. "C(40)
    *-- Structures are slightly different between
    *   the GETDETAIL and CREATE BAPI's.
       READ TABLE ith_GetOPP INDEX 1.
       MOVE-CORRESPONDING ith_GetOPP TO lth_COpp.
       lth_COpp-REF_HANDLE = L_RHandle. "<== Set this and NO 2nd Desc line saved unless ALL are set.
       lth_COpp-REF_GUID = g_BlankGuid.
       L_TmpDesc2 = S_SubOp1.
       IF S_SubOp1 IS INITIAL OR S_SubOp1 CS '(Cloned from master nnn)'.
          CONCATENATE S_CRMKey ')'     INTO L_TmpC10.
          CONCATENATE '(Cloned from master' L_TmpC10 INTO L_TmpDesc2
                      SEPARATED BY SPACE.
       ENDIF.
       lth_COpp-DESCRIPTION_OPP  = l_TmpDesc2."<== 2nd line of desc.
       APPEND lth_COpp.
    ENDFORM.
    *******************[ END   L_BldCOpp()     ]*******************
    *******************[ START L_BldCOrg()     ]*******************
    FORM L_BldCOrg    TABLES lth_COrg     STRUCTURE BAPIBUS20001_ORGMAN_INS.
    *-- Structures are slightly different between
    *   the GETDETAIL and CREATE BAPI's.
      READ TABLE ith_GetORG INDEX 1.
      MOVE-CORRESPONDING ith_GetORG TO lth_COrg.
      CLEAR lth_COrg-REF_GUID.
      lth_COrg-REF_GUID = g_BlankGuid.
      lth_COrg-REF_HANDLE  = 1.
      APPEND lth_COrg.
    ENDFORM.
    *******************[ END   L_BldCOrg()     ]*******************
    *******************[ START L_BldCPricing() ]*******************
    FORM L_BldCPricing TABLES lth_CPricing STRUCTURE BAPIBUS20001_PRICING
                              lth_COpp     STRUCTURE BAPIBUS20001_OPPORTUNITY.
    *-- Make sure opportunity info is in header.
      READ TABLE lth_COpp INDEX 1.
    *-- Needed to store CURRENCY.
      CLEAR lth_CPricing.
      lth_CPricing-REF_HANDLE   = 1.
      lth_CPricing-REF_GUID     = g_BlankGuid.
      lth_CPricing-REF_KIND     = 'A'.
      lth_CPricing-CURRENCY     = lth_COpp-CURRENCY.
      lth_CPricing-CURRENCY_ISO = lth_COpp-CURRENCY_ISO.
      APPEND lth_CPricing.
      CLEAR lth_CPricing.
    ENDFORM.
    *******************[ END   L_BldCPricing() ]*******************
    *******************[ START L_BldCCustH()   ]*******************
    FORM L_BldCCustH  TABLES lth_CCustH   STRUCTURE BAPIBUS20001_CUSTOMER_H.
    *-- Structures are slightly different between
    *   the GETDETAIL and CREATE BAPI's.
      READ TABLE ith_GetCustH INDEX 1.
      MOVE-CORRESPONDING ith_GetCustH TO lth_CCustH.
      CLEAR lth_CCustH-REF_GUID.
      lth_CCustH-REF_GUID = g_BlankGuid.
      lth_CCustH-REF_HANDLE  = 1.
      APPEND lth_CCustH.
    ENDFORM.
    *******************[ END   L_BldCCustH()   ]*******************
    *******************[ START L_BldCFields()  ]*******************
    FORM L_BldCFields TABLES lth_CFields  STRUCTURE BAPIBUS20001_INPUT_FIELDS
                             lth_CPartner STRUCTURE BAPIBUS20001_PARTNER_INS.
    *---------[  Admin Rec  ]---------
       CLEAR lth_CFields.
       lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
       lth_CFields-REF_GUID    = g_BlankGuid.
       lth_CFields-OBJECTNAME  = 'ORDERADM_H'.
       lth_CFields-REF_KIND    = ' '. "A <== No effect setting to A or leave blank.
       lth_CFields-LOGICAL_KEY = '0001'.
       lth_CFields-FIELDNAME   = 'DESCRIPTION'.
       APPEND lth_CFields.
    *---------[ Opportunity  ]---------
       CLEAR lth_CFields.
       lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
       lth_CFields-REF_GUID    = g_BlankGuid.
       lth_CFields-OBJECTNAME  = 'OPPORT_H'.
       lth_CFields-REF_KIND    = 'A'.
       lth_CFields-LOGICAL_KEY = '0001'.
       lth_CFields-FIELDNAME   = 'EXP_REVENUE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'BUDGET_BP'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'CURRENCY'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'CURRENCY_ISO'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'STARTDATE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'EXPECT_END'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'CURR_PHASE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'PHASE_SINCE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'PROBABILITY'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'FORECAST_REL'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SOURCE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'IMPORTANCE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALESCYCLE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'ADDRESS_NO'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'TYPE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'STATUS_SINCE'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'DESCRIPTION_OPP'.
       APPEND lth_CFields.
    *-- Try these to get partners. ???
       lth_CFields-FIELDNAME   = 'PARTNER_NUMBER'.
       APPEND lth_CFields.
    *---------[ Organisation ]---------
       CLEAR lth_CFields.
       lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
       lth_CFields-REF_GUID    = g_BlankGuid.
       lth_CFields-OBJECTNAME  = 'ORGMAN'.
       lth_CFields-REF_KIND    = 'A'.
       lth_CFields-LOGICAL_KEY = '0001'. "'0006'.
       lth_CFields-FIELDNAME   = 'DIS_CHANNEL'.
       lth_CFields-CHANGEABLE  = ' '. "X = ???
       APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'DIS_CHANNEL_ORI'.
    APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'DIVISION'.
       APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'DIVISION_ORI'.
    APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_GROUP'.
       APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'SALES_GROUP_ORI'.
    APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'SALES_GROUP_SHORT'.
    APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_OFFICE'.
       APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'SALES_OFFICE_SHORT'.
    APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'SALES_OFF_ORI'.
    APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORG'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORGR_ORI'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORG_ORI'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORG_RESP'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORG_RESP_SHORT'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SALES_ORG_SHORT'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SERVICE_ORG_RESP'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'SERVICE_ORG'.
       APPEND lth_CFields.
       lth_CFields-FIELDNAME   = 'DISTRICT'.
       APPEND lth_CFields.
    lth_CFields-FIELDNAME   = 'MODE'.
    APPEND lth_CFields.
    *---------[ Partner info ]---------
       DATA:L_PRHandle  LIKE BAPIBUS20001_PARTNER_INS-REF_HANDLE         VALUE 1,
            L_PRPHandle LIKE BAPIBUS20001_PARTNER_INS-REF_PARTNER_HANDLE VALUE 1.
       LOOP AT ith_GetPARTNER.
          *-- Create one new partner rec for the BAPI.
            MOVE-CORRESPONDING ith_GetPARTNER TO lth_CPartner.
            CLEAR lth_CPartner-REF_GUID.        "<== No effect either way.
            CLEAR lth_CPartner-REF_HANDLE.
            CLEAR lth_CPartner-REF_PARTNER_HANDLE.
            CLEAR lth_CPartner-REF_PARTNER_FCT.
            CLEAR lth_CPartner-REF_PARTNER_NO.
            CLEAR lth_CPartner-REF_NO_TYPE.
            CLEAR lth_CPartner-REF_DISPLAY_TYPE.
            CLEAR lth_CPartner-MAINPARTNER.
            CLEAR lth_CPartner-RELATION_PARTNER.
            CLEAR lth_CPartner-BUSINESSPARTNERGUID.
          lth_CPartner-MAINPARTNER = 'X'.
            lth_CPartner-REF_GUID = g_BlankGuid.
            lth_CPartner-REF_HANDLE = L_PRHandle.
            lth_CPartner-REF_PARTNER_HANDLE = L_PRPHandle.
            APPEND lth_CPartner.
          *-- Create block of new input_fields for this partner.
            CLEAR lth_CFields.
            lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
            lth_CFields-REF_GUID    = g_BlankGuid.
            lth_CFields-OBJECTNAME  = 'PARTNER'.
            lth_CFields-REF_KIND    = 'A'.
            lth_CFields-LOGICAL_KEY = L_PRPHandle. "ie: '0001'.
            lth_CFields-FIELDNAME   = 'DISPLAY_TYPE'.
            lth_CFields-CHANGEABLE  = ' '.
            APPEND lth_CFields.
            lth_CFields-FIELDNAME   = 'KIND_OF_ENTRY'.
            APPEND lth_CFields.
            lth_CFields-FIELDNAME   = 'NO_TYPE'.
            APPEND lth_CFields.
            lth_CFields-FIELDNAME   = 'PARTNER_FCT'.
            APPEND lth_CFields.
            lth_CFields-FIELDNAME   = 'PARTNER_NO'.
            APPEND lth_CFields.
          *-- Inc ref-handles.
          L_PRHandle  = L_PRHandle  + 1. "<== Do NOT increment. (Unless creating multiple opps)
            L_PRPHandle = L_PRPHandle + 1. "<== Import to link partners to CFields.
       ENDLOOP.
    *---------[ Pricing Rec]---------
       CLEAR lth_CFields.
       lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
       lth_CFields-REF_GUID    = g_BlankGuid.
       lth_CFields-OBJECTNAME  = 'PRICING'.
       lth_CFields-REF_KIND    = 'A'. "A <== No effect setting to A or leave blank.
       lth_CFields-LOGICAL_KEY = '0001'.
       lth_CFields-FIELDNAME   = 'CURRENCY'.
       APPEND lth_CFields.
    *-------[ CustomerHead Rec]-------
       CLEAR lth_CFields.
       lth_CFields-REF_HANDLE  = 1. "<== Must be set if the others are too.
       lth_CFields-REF_GUID    = g_BlankGuid.
       lth_CFields-OBJECTNAME  = 'CUSTOMER_H'.
       lth_CFields-REF_KIND    = 'A'. "A <== No effect setting to A or leave blank.
       lth_CFields-LOGICAL_KEY = '0001'.
    *-- Get all custom fields.
       DATA: LTH_FieldTab TYPE TABLE OF DFIES WITH HEADER LINE.
       CALL FUNCTION 'GET_FIELDTAB_REMOTE'
            EXPORTING
              TABNAME  = 'CRMD_CUSTOMER_H'
            TABLES
              FIELDTAB = LTH_FieldTab.
    *-- Add only custom fields to input-fields list.
       LOOP AT LTH_FieldTab FROM 5.
          lth_CFields-FIELDNAME = LTH_FieldTab-FieldName.
          APPEND lth_CFields.
       ENDLOOP.
    ENDFORM.
    *******************[ END   L_BldCFields()  ]*******************
    ********************[ START L_LinkOpp()    ]*******************
    FORM L_LinkOpp USING p_Mode p_CRMKey p_LinkKey CHANGING p_Ok.
    *-- Local vars.
      DATA: L_MastGuid  TYPE CRMT_OBJECT_GUID,
            L_LinkGuid  TYPE CRMT_OBJECT_GUID,
            L_CheckOk(1)  TYPE C VALUE YES,
            L_TryAgain(1) TYPE C VALUE NO.
    *-- Default this.
      p_OK = YES.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *-- Get GUID for Master-Opportunity.
      PERFORM L_GetGUID USING p_CRMKey CHANGING L_MastGuid p_Ok.
      CHECK p_Ok = YES.
    *-- Get GUID for Sub-Opportunity.
      PERFORM L_GetGUID USING p_LinkKey CHANGING L_LinkGuid p_Ok.
      CHECK p_Ok = YES.
    *---------[ Build BAPI Table Params ]-----------
      DATA: lth_CHeader  TYPE TABLE OF BAPIBUS20001_HEADER_UPD   WITH HEADER LINE,
            lth_CDFlow   TYPE TABLE OF BAPIBUS20001_DOC_FLOW_INS WITH HEADER LINE,
            lth_CFields  TYPE TABLE OF BAPIBUS20001_INPUT_FIELDS WITH HEADER LINE.
    *--------------[   HEAD INFO   ]------------
      READ TABLE ith_GetHEADER INDEX 1. "<== Header info from Master.
      MOVE-CORRESPONDING ith_GetHEADER TO lth_CHeader.
      APPEND lth_CHeader.
    *--------------[ INPUT FIELDS  ]------------
      CLEAR lth_CFields.
      lth_CFields-REF_HANDLE  = 1.
      lth_CFields-REF_GUID    = l_MastGuid. "Master Opp.
      lth_CFields-REF_KIND    = 'A'.
      lth_CFields-OBJECTNAME  = 'DOC_FLOW'.
      lth_CFields-LOGICAL_KEY = 'INS'. "<== Default to ADD.
    *-- Delete (UnLink) works in conjunction with
    *   lth_CDFlow-BREL_MODE = 'D' set below.
      IF p_Mode = 'ULKSOP'.
         lth_CFields-LOGICAL_KEY = 'DEL'.
      ENDIF.
      APPEND lth_CFields.
    *-------------[ DOCUMENT FLOW ]------------
    *-- Maybe start with original doc-flow data from Master?
      READ TABLE ith_GetDOCFLOW INDEX 1.
      MOVE-CORRESPONDING ith_GetDOCFLOW TO lth_CDFlow.
      lth_CDFlow-REF_GUID     = l_MastGuid. "Master Opp.
      lth_CDFlow-REF_HANDLE   = '1'.
      lth_CDFlow-REF_KIND     = 'A'.
      lth_CDFlow-OBJKEY_A     = l_MastGuid. "Master Opp.
      lth_CDFlow-OBJTYPE_A    = 'BUS2000111'.
    lth_CDFlow-LOGSYS_A
      lth_CDFlow-OBJKEY_B     = l_LinkGuid. "Sub Opp.
      lth_CDFlow-OBJTYPE_B    = 'BUS2000111'.
    lth_CDFlow-LOGSYS_B
      lth_CDFlow-RELTYPE      = 'MASU'.
    lth_CDFlow-VONA_KIND
      lth_CDFlow-BREL_KIND    = 'A'.
      lth_CDFlow-BREL_MODE    = 'A'. "A=add, B or C=Change ?, D=Del
    *-- Delete (UnLink) works in conjunction with
    *   lth_CFields-LOGICAL_KEY = 'DEL' set above.
      IF p_Mode = 'ULKSOP'.
         lth_CDFlow-BREL_MODE = 'D'.
      ENDIF.
    lth_CDFlow-HANDLE_A
    lth_CDFlow-HANDLE_B
      CLEAR lth_CDFlow-RELATIONID.   "<== Was preventing me from linking multi...
      lth_CDFlow-RELATION_HANDLE = 1.
      APPEND lth_CDFlow.
    *-- Activate trace/debug?
      IF S_Break = YES. BREAK-POINT. ENDIF.
    *-- If user has Master GUID open in EDIT mode, the
    *   BAPI will fail to LINK the new sub-opp.
      DO.
       *-- Clear these every try.
         CLEAR ith_ChgReturn. REFRESH ith_ChgReturn.
       *---------[ CHANGE/LINK OPPORTUNITY ]--------
         CALL FUNCTION 'BAPI_OPPORTUNITY_CHANGEMULTI'
              EXPORTING
                TESTRUN          = ' '
              TABLES
                HEADER           = lth_CHeader
              ITEM             =
              OPPORTUNITY      =
              ORGANISATION     =
              PRICING          =
              PARTNER          =
              TEXT             =
              PRODUCT          =
              STATUS           =
              SERVICE_OS       =
                INPUT_FIELDS     = lth_CFields
                RETURN           = ith_ChgReturn
              APPOINTMENT      =
              SCHEDULELINE     =
                DOCUMENT_FLOW    = lth_CDFlow.
              PRICING_ITEM     =
              CONDITION_CREATE =
              CONDITION_CHANGE =
              CONDITION_DELETE =.
       *-- Changes will not appear until you commit.
         CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
           

  • Information required

    Dear All,
    I am BI Technical Consultant.
    We have implement CRM sales module report in BI reporting. Now sometimes there is a scenario where in user deletes an opportunity for some reason. But in my reporting we cant capture this because that deleted entry is not avaialable in CRM system itself so we cant capture this anyhow.
    Is there any way in CRM where in we can mark the Opportunity as deleted or reverse but not completely deleting the transaction from the database.
    I hope i am clear . Please feel free to raise any doubt if any.
    Rgds
    Anup

    Hi Anup,
    If the intention is to capture the data then you can archive the document instead of deleting it. You will find a status called "to be archived".If set then the value of the field  'Archiving_flag" will be set to 'X' in  CRMD_ORDERADM_H and the document will not be deleted also fron the table.
    From you BI you can then capture the documents with this field which is set.
    Hope this helps.
    Thanks
    Abishek

  • Access to Related Information Section

    Hi,
    I am not able to edit the Opportunity Accounts related information in the Opportunity details page when I am not the owner of the Opportunity Accounts record.
    But if I'm the owner of the Opportunity Accounts record, then I'm able to edit the record. I want to change the setup to allow anyone to edit the record if they can see it.
    I couldn't find out what I'm missing and I'm quite new to this application. Thanks !

    I could not reproduce your case. I tried this... (I am User B)
    User A has owner access profile
    read only for opportunity
    read only for custom object 2
    view for opportunity---customobject 2
    User B has owner and default access profile
    read/edit/delete for opportunity
    read/edit/delete for custom object 2
    view for opportunity---customobject 2
    Now...
    opportunity owner = User A
    custom object 2 owner = User A
    In this case I (User B) could edit it from opportunity related section as well as drilling into custom object 2 and editing from there
    Also
    opportunity owner = User A
    custom object 2 owner = User B
    In this case I (User B) could edit it from opportunity related section as well as drilling into custom object 2 and editing from there
    If your case setup is different, could you provide a detailed repro steps?

  • Recover a deleted opportunity

    hi,
    I wish to know the process of recovering deleted opportunities.
    also in general what all objects can be recovered once deleted e.g transactions, products, BP etc.
    any link to some useful documentation will be helpful
    thanks
    RH

    Hi,
    Please refer the tramsaction AOBJ.
    In standard SAP, archived objects can be reloaded. But not all the objects can be reloaded.
    For reloading objects which cannot be reloaded using standard SAP, a custom program needs to be written. There is a sample program for this available in transaction AOBJ. In this transaction open the Archive object "Example" and find the name of the program in "Reload program" field. You can view this program in the editor and write a similar program for Opportunity.
    Another transaction "SARA" could also be useful.
    You can also view the following link for more details: http://help.sap.com/saphelp_crm40/helpdata/en/8d/3e4ecf462a11d189000000e8323d3a/frameset.htm
    Reward points I answered the query,
    Jash.

  • Deleting Opportunity Products

    Hello,
    We imported opportunity products based on a set of external ID's. Somewhere along the lines it created duplicate records against the opportunities. We then tried to run a batch delete on all of the problem opportunities as to my knowledge you cannot batch delete opportunity products?
    The batch delete worked for opportunities that did not have the duplicate entries but failed for the opportunties with duplications. The error message for these records was "This record cannot be deleted". Any ideas of any work arounds?

    Thanks Bob,
    Any ideas how to remove the opportunities so that the opportunity products are also removed? I tried a batch delete but the records with duplicate opportunity-products would not delete, with the error "This Record Can Not Be Delted". The other opportunities that did not have the duplicate opportunity-products deleted successfully.
    Regards
    Oli

  • HT4007 I have just transferred all my raw, jpeg & tiff files into LR4 and using to opportunity to delete old raw files to free up disc space. How can i completely remove a raw file from my msc disc??

    I have just transferred all my raw, jpeg & tiff files into LR4 and using the  opportunity to delete old raw files to free up disc space. How can i completely remove a raw file from my mac disc??

    I'd be careful here: LR references files. It can copy them, like from an SD card to your hard drive, but it doesn't necessarily make duplicates. So when you say you "transferred" those files "into" LR it just means you referenced existing files. And if you delete those they're gone, unless you've made copies. LR does not import files by copying them into a managed library like Aperture does.

Maybe you are looking for

  • Matrix-like PKs based on three optional IN-constrained strings?

    Hello, I have a DB of actions that I want to represent. I want to model a number of actions as you know them from classic GUIs: open openFile saveAs exportToDirectory reverseEngineerFromDatabase As I analyzed the problem, I came to the conclusion, th

  • Problem in Address Endaddress statement in sapscript

    Hello Friends, I have 1 problem in existing sap script for delivery where address is printed using command address endaddress. Problem is In output while displaying PO BOX text , it is displayed in DE language insted of EN whether logon lang is EN. R

  • IMac can be used to get Macbook online?

    OK...I am not very good with this stuff, and am a new Mac. I was going to get a router, so that i can get my Macbook online here in the house, but then I got an iMac and read that I should be able to accomplish this without an external router, using

  • Webdynpro abap view layout error: Object espected

    Hi guys, I'm facing a problem when trying to add a new element in the View Layout of a WebDynpro Component. I will try in the following to be more explicit about the problem. The technical configuration is following: Laptop::SAP GUI 710<---Home Netwo

  • Adding hostid and port info to the jsessionid in a url-rewrite

    how do I do this? I did it once before and the servers are still churning out the host!port (see bold): http://ucweb.uc.sprintpcs.com/waimea/servlet/html/mail/ViewFolderServlet;jsessionid=DJoOjjpijtoKHPFfELfXMJnDtQI3m4NCt45pQhrcFI8gzWwncLKc!-65622026