Virtual KF using BADI

Dear all,
My requirement is to create a virtual KF using BADI to populate a keyfigure ZWKDAY value in the bex query.
Condition -  I need to read 0calday from the cube and find it whether its a workday or not.
If its working day then my KF ZWKDAY should have value 1 else 0.
I created a BADI ZCL_IM_TEST_VIRTUAL for this.
I defined attributes as
P_KYF_RB_WKDC     Instance Attribute     Public     Type     I
P_CHA_0CALDAY     Instance Attribute     Public     Type     I
*METHOD IF_EX_RSR_OLAP_BADI~DEFINE .
  DATA: l_s_chanm   TYPE rrke_s_chanm,
        l_kyfnm     TYPE rsd_kyfnm.
  FIELD-SYMBOLS:
        <l_s_chanm> TYPE rrke_s_chanm.
CASE i_s_rkb1d-infocube.
   WHEN 'RB_RT_C01'.
    characteristic Calendar day
     l_s_chanm-chanm = '0calday'.
     l_s_chanm-mode  = rrke_c_mode-read. " rrke_c_mode-read / rrke_c_mode-no_selection
     APPEND l_s_chanm TO c_t_chanm.
    key figure DETERMINE WORKDAY
     l_kyfnm = 'RB_WKDC'.
     APPEND l_kyfnm TO c_t_kyfnm.
ENDCASE.
ENDMETHOD. 
METHOD IF_EX_RSR_OLAP_BADI~COMPUTE .
  FIELD-SYMBOLS:
  <fs_wkdc> type any,
  <fs_0calday> type any.
  Data: lv_workday(1) type C,
        lv_calday type sy-datum,
        l_flag   type char1 .
  Assign component P_CHA_0CALDAY of structure c_s_data to <fs_0calday>.
  Assign component P_kyf_RB_wkdc of structure c_s_data to <fs_wkdc>.
<fs_0calday> = sy-datum.
  CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
    EXPORTING
    CORRECT_OPTION                     = '+'
      DATE                               =         <fs_0calday>
      FACTORY_CALENDAR_ID                = '01'
   IMPORTING
     WORKINGDAY_INDICATOR               =  l_flag
  EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE       = 1
  if l_flag = '+'.
      <fs_wkdc> = 0.
  else.
      <fs_wkdc> = 1.
  endif.         
When I execute my query in RSRT transactionI am getting the following error.
"The function call of DATE_CONVERT_TO_FACTORYDATE failed; a field may have been assigned to the parameter DATE whose type is not compacitable".
When I tried to debug the code I found the type of <fs_0calday> is structure of c_s_data but I dont know how to solve this error. Any help on this is appreciated.....
Regards..
Bala

Hi,
Instead of assigning type as any to your field symbol <fs_0calday>.
You will have to assign the same type as type of type of export parameter DATE of FM DATE_CONVERT_TO_FACTORYDATE.
Just change the attribute type and execute your query again.
Regards,
Durgesh.

Similar Messages

  • Create Virtual Keyfigure using BADI

    Hi All,
    I Am tring to implement a virtual keyfigure using BADI, here is what i did created a Enhancement for BADI RSR_OLAP_BADI but i am not sure how to write the code for methods DEFINE and COMPUTE, i am just trying to populate value 100 for Virtual Keyfigure ZVIRT (Just testing) and i am using this keyfigure in my ODS.
    here is the define method i have:
    METHOD IF_EX_RSR_OLAP_BADI~DEFINE .
      DATA: l_s_chanm   TYPE rrke_s_chanm,
            l_kyfnm     TYPE rsd_kyfnm,
            l_s_chanm_used TYPE rschanm.
      FIELD-SYMBOLS:
            <l_s_chanm> TYPE rrke_s_chanm,
    CASE i_s_rkb1d-infocube.
    WHEN 'CUBEXYZ'.
    ENDCASE.
    ENDMETHOD.
    Compute Method:
    METHOD IF_EX_RSR_OLAP_BADI~COMPUTE .
    ENDMETHOD.

    found this code in other post thought this would be helpful for others, this works.
    The coding for DEFINE is
    DATA: l_s_chanm TYPE rrke_s_chanm,
    l_kyfnm TYPE rsd_kyfnm.
    FIELD-SYMBOLS:
    <l_s_chanm> TYPE rrke_s_chanm.
    CASE i_s_rkb1d-infocube.
    WHEN 'MYCUBE'.
    characteristic
    l_s_chanm-chanm = 'ZVIRTUAL'.
    l_s_chanm-mode = rrke_c_mode-no_selection.
    APPEND l_s_chanm TO c_t_chanm.
    l_s_chanm-chanm = 'ZPMORDER'.
    l_s_chanm-mode = rrke_c_mode-read.
    APPEND l_s_chanm TO c_t_chanm.
    The coding for compute is:
    field-symbols: <f_virt> type /bic/oizvirtual,
    <f_ord> type /bic/oizpmorder.
    if P_CHA_zvirtual > 0.
    assign component P_CHA_zvirtual of structure C_S_DATA to <f_virt>.
    if P_CHA_zpmorder > 0.
    assign component P_CHA_zpmorder of structure C_S_DATA to <f_ord>.
    <f_virt> = <f_ord>+2(3).
    else.
    clear <f_virt>.
    endif.
    else.
    clear <f_virt>.
    endif.

  • Is there a way to create a virtual network using C# and the Azure SDK/API?

    I don't see a clear way to create an Azure Virtual Network using the SDK.
    I have all the methods to create the virtual network configuration, but no way to submit it:
    IList<string> VirtualNetworkAddressPrefixes = new List<string>();
    IList<string> LocalNetworkAddressPrefixes = new List<string>();
    IList<NetworkListResponse.DnsServer> DNSServers = new List<NetworkListResponse.DnsServer>();
    IList<NetworkListResponse.Subnet> Subnets = new List<NetworkListResponse.Subnet>();
    NetworkListResponse.Gateway Gateway = new NetworkListResponse.Gateway();
    IList<NetworkListResponse.LocalNetworkSite> LocalSites = new List<NetworkListResponse.LocalNetworkSite>();
    IList<NetworkListResponse.Connection> Connections = new List<NetworkListResponse.Connection>();
    VirtualNetworkAddressPrefixes.Add("a.b.c.d/cidr");
    DNSServers.Add(new NetworkListResponse.DnsServer() { Name = "TestDNS1", Address = "a.b.c.d" });
    Subnets.Add(new NetworkListResponse.Subnet() { Name = "Subnet-1", AddressPrefix = "a.b.c.d/cidr" });
    Subnets.Add(new NetworkListResponse.Subnet() { Name = "GatewaySubnet", AddressPrefix = "a.b.c.d/cidr" });
    Connections.Add(new NetworkListResponse.Connection() { Type = LocalNetworkConnectionType.IPSecurity });
    LocalNetworkAddressPrefixes.Add("a.b.c.d/cidr");
    LocalSites.Add(new NetworkListResponse.LocalNetworkSite()
    Name = "On-Prem",
    Connections = Connections,
    VpnGatewayAddress = "a.b.c.d",
    AddressSpace = new NetworkListResponse.AddressSpace() { AddressPrefixes = LocalNetworkAddressPrefixes }
    Gateway.Sites = LocalSites;
    Gateway.Profile = GatewayProfile.ExtraLarge;
    NetworkManagementClient netMgmtClient = new NetworkManagementClient(CloudCredentials);
    NetworkListResponse netlistresp = GlobalSettings.mainWindow.netMgmtClient.Networks.List();
    netlistresp.VirtualNetworkSites
    .Add(new NetworkListResponse.VirtualNetworkSite()
    Name = "TestVirtualNetwork",
    AddressSpace = new NetworkListResponse.AddressSpace() { AddressPrefixes = VirtualNetworkAddressPrefixes },
    DnsServers = DNSServers,
    Subnets = Subnets,
    AffinityGroup = "East US",
    Gateway = Gateway,
    Label = "LabelValue"
    I have also created the entire XML response and sent it to the NetworkManagementClient -> Networks.SetConfiguration() method, but it appears this command expects the virtual network to already be in existence. If anyone could give guidance, it would be
    appreciated.

    Hi,
    As discuss above , we have to create the XML response  ,before that first you have to
    GetConfiguration() details of existing virtual network. 
    string.format("@<NetworkConfiguration xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration'>
                <VirtualNetworkConfiguration>
                <Dns />
                <VirtualNetworkSites>
                <VirtualNetworkSite name=""{0}"" Location=""{1}"">
                <AddressSpace>
                <AddressPrefix>10.0.0.0/8</AddressPrefix>
                </AddressSpace>
                <Subnets>
                <Subnet name=""Subnet-2"">
                <AddressPrefix>10.0.0.0/11</AddressPrefix>
                </Subnet>
                </Subnets>
                </VirtualNetworkSite>",Networkname,location)+(@"<VirtualNetworkSite name=""demodsf1"" Location=""West Europe"">
            <AddressSpace>
              <AddressPrefix>10.0.0.0/8</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name=""Subnet-1"">
                <AddressPrefix>10.0.0.0/11</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>  </VirtualNetworkSites>
                </VirtualNetworkConfiguration>
                </NetworkConfiguration>")
    you have to append the node for existing node with new values , i got it its adding new virtual network 
    Best regards,

  • [Enhancement in BW]: How to use BaDI : RSU5_SAPI_BADI

    Hi Everybody,
    Right now, could you kindly please tell me how to i use customer exit but using BADI, particularly for BADI : RSU5_SAPI_BADI.
    <b>I just wanna use the customer exit on variable (variable user-exit).</b>
    So far i've tried these steps (might you correct me/advise):
    1. tcode : SE18
    2. Enter the Badi Name : RSU5_SAPI_BADI
    3. (Toolbar) enhancement implementation -> Create
    4.  ... (After that i don't know what i've to do ..)
    Could you tell me step-by-step to make it ?
    Such as what i should fill-in for Implementation Name and any parameter should i fill in there and how to debug it ???
    Many-many thanks all for the attention.
    Hopefully i can make it :).
    Kind regards,
    Niel.

    Check out this link:
    <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3001894b-b1fb-2910-77ba-e80b6f2053b7">https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3001894b-b1fb-2910-77ba-e80b6f2053b7</a>

  • Custom Screen using BADI seen in ME23N, ME22N Display, but not in ME21N

    Hi,
    I have developed a custom screen for purchase order using badi ME_PROCESS_PO_CUST and ME_GUI_PO_CUST.
    But, its not visible in ME21N, whereas its dipalyed in ME23N, ME22N .
    Please advise.
    Thanks,
    Shivaa....

    In TC CMOD you can create a new proyect and use the component MEREQ001 with this component you can see adicional tab in those TC.

  • Can multiple Virtual Devices use the same IVI Driver Sessions?

    I am using Switch Executive 2.0 and I'm having problems creating multiple Virtual Devices.
    I have created a virtual device on a development computer that has no hardware connected to it.  This virtual device uses specific drivers to simulate the devices.  The problem I'm having is that when I create a second virtual device and try to add the same IVI Switches as the first Virtual device, I'm getting the following error:
    An error has occurred while attempting to access the device deviceA_ivi.
    Error -223116 occurred:
    Internal Software error occurred in Switches software.  Please contact National Instruments Support.
    File name: .\source\mxsWrappers\tMXSObject.cpp
    Line Number 192:
    Status Code: -223116
    Can someone please explain why?

    Can you please elaborate on how did you create those simulated devices? Namely, what does your IVI configuration look like? What does the driver session for the logical name look like? What's the software module? What's the hardware module? What is the driver setup string, and what is the simulation mode for the device in question?
    -Serge
    Srdan Zirojevic

  • How to set up different virtual LANs (using the E3200)?

    Hi.
    I would like to set up different virtual LANs (using the E3200) so that I can have two different networks that can't access each other.
    The E3200 is connected to a modem for internet access.
    I would like both networks to have access to the internet.
    Does the E3200 alone support creating virtual LANs?
    If not, is there another way I can meet the requirement using the E3200 alone (using something other than virtual LANs)?
    I'm ultimately thinking that I would need at least one other router.
    So for example,
    Router A (E3200) is connected to the modem and setup for DHCP using a LAN IP range 192.168.1.1/24.
    Router B is connected to Router A and setup for DHCP using a LAN IP range 192.168.2.1/24.
    In this way devices connected to Router A should not have access to devices connected to Router B and visa-versa, correct?  For example, Device X connected to Router A cannot ping or browse files on Device Y connected to Router B and visa-versa, correct?
    Would I need to setup anything else on Router B?  For example, do I need to setup DNS settings so that devices connected to Router B can connect to the internet without issue?  Would I need to specify that these virtual LANs are not bridged, and on which router, or both?
    I already know how to set up a static IP, DHCP, LAN IP ranges, and static DNS settings on a router, etc.
    In regards to wireless devices, I am thinking they would follow the same pattern; so wireless devices connected to Router A (E3200) have access to other wired and wireless devices connected to Router A but not to wired or wireless devices connected to Router B and visa-versa.  However, if wireless devices currently don't have access to wired devices also connected to Router A, then that is fine for now.
    Thank you very much!
    -Rami
    Solved!
    Go to Solution.

    The E3200 has no VLAN support according to the manual. There's no way to configure two separate networks with this router alone.
    You will need to add network electronics.
    Ex:
    Managed Switch with VLAN
    Another wireless router with VLAN
    If your modem supplies multiple public or private IP addresses then you could put a switch after the modem and two wireless routers attached to the switch.
    Please remember to Kudo those that help you.
    Linksys
    Communities Technical Support

  • Display error message in WEBUI using BADI - ORDER_SAVE-CHECK_BEFORE_SAVE

    Hi,
    I am trying to display error message using BADI - ORDER_SAVE (Method-CHECK_BEFORE_SAVE) based on certain conditions when the document is saved from WEB UI.
    I have written it like below:
    If (some conditions).
    Message E000 with 'Error in SAVE' RAISING DO_NOT_SAVE.
    endif.
    I mentioned my message class everything in class, and it is fine.
    However, it is not displaying my error message. It is displaying standard information message saying "Document Could not be saved'.
    Could you please help me out, how can I display my custom message.
    Thanks,
    Sandeep

    Hi Sandeep,
    U can use FM to raise a message from order save badi.
    Inside the if condition, u can raise do_not_save.
    If (some conditions)
          CALL FUNCTION 'CRM_MESSAGE_COLLECT'
            EXPORTING
              iv_caller_name = 'ORDERADM_H'
              iv_ref_object  = iv_guid
              iv_ref_kind    = 'A'
              iv_msgno       = '000'
              iv_msgid       = 'zcrm'
              iv_msgty       = 'A'
              iv_msgv1       = c_text1
              iv_msgv2       = c_text2
              iv_msgv3       = c_text3
            EXCEPTIONS
              not_found      = 1
              appl_log_error = 2
              OTHERS         = 3.
          IF sy-subrc NE 0.
          ENDIF.
          RAISE do_not_save.
    ENDIF.

  • Having trouble with creation of a cloud service with multiple virtual machines using java sdk.

    I am creating a cloud service on azure with 2 virtual machines using java sdk API. Service created successfully.
    My input endpoint details are as follows.
    INPUT ENDPOINTS
    Head : 191.238.144.47:2400
    Head : 191.238.144.47:22
    Node0 : 191.238.144.47:43211
    For Head instance port 2400 is for HTTPS and port 22 is for SSH and for Node0 instance port 43211 is for SSH.
    But I am having problem with doing a ssh on Head instance. Sometimes it works sometimes doesn't. Same problem with HTTPS also.
    I have some application running over there but when i try to access it thru browser sometimes it works but most of the time doesn't. When I restart the instances from azure portal, its works after
    that(not always but most of the time). 
    Now I am confused what is going on there. I am creating cloud service and virtual machines using java sdk and setting input endpoints also. After creation of all instances i restart every instance programmatically .
    I am not sure whether restart is required or not. It must be something to do with input endpoints only but not able to get the right thing i guess. When i do the same thing thru azure portal(creation of cloud service with virtual machines and setting up input
    end points) everything works fine but not achieving the result when implementing it by java sdk API. Please help me.

    HI Nithin,
    Thanks for your reply. I am setting the endpoints after creating my instances using update call. Here's the code snippet.
    AzureService aServ = new AzureService(session);
     if(aServ.checkNameAvailability(clusterName)) {
               aServ.createHostedService(clusterName, "dbX cluster");         
             // Creating head instance
             aServ.createHead(clusterName, imgName, headType, userName, pswd);  
            // Setting end points for head node
             String name = "ssh";
             int port = 22;
             aServ.updateVMInputEndpoint(clusterName, "Head", name, port);
             // Restarting head instance
             aServ.restartVM(clusterName, "Head");
           String roleName = "Node";
           String tmpRoleName = "";
           for(int i=0; i<noi; i++) {
                      port = 43210+(i+1);
                      tmpRoleName = roleName + i;
                   // Creating node instance
                    aServ.createVM(clusterName, tmpRoleName, imgName, nodeType, userName, pswd);
                  // Setting end points for node instance
                   aServ.updateVMInputEndpoint(clusterName, tmpRoleName, name, port);
                  // Restarting node instance
                 aServ.restartVM(clusterName, tmpRoleName);
          // Method to update the input endpoint details 
          public void updateVMInputEndpoint(String clusterName, String vmName, String name, int port)
            throws Exception {
                    VirtualMachineGetResponse resp = computeManagementClient.getVirtualMachinesOperations().
                                                            get(clusterName, clusterName, vmName);
                    VirtualMachineUpdateParameters updateParameters = new VirtualMachineUpdateParameters();
                    //get the configuration list
                    ArrayList<ConfigurationSet> configlist = resp.getConfigurationSets();
                    //get inputendpoint list and update it
                    ArrayList<InputEndpoint> endpointlist = configlist.get(0).getInputEndpoints();
                    InputEndpoint inputEndpoint = new InputEndpoint();
                    inputEndpoint.setEnableDirectServerReturn(false);
                    inputEndpoint.setPort(port);
                    inputEndpoint.setLocalPort(port);
                    inputEndpoint.setName(name);
                    inputEndpoint.setProtocol(InputEndpointTransportProtocol.TCP);
                    endpointlist.add(inputEndpoint);
                    // Open port for https on head node
                    if(vmName.equals("Head")) {
                            inputEndpoint = new InputEndpoint();
                            inputEndpoint.setEnableDirectServerReturn(false);
                            inputEndpoint.setPort(2400);
                            inputEndpoint.setLocalPort(2400);
                            inputEndpoint.setName("https");
                            inputEndpoint.setProtocol(InputEndpointTransportProtocol.TCP);
                            endpointlist.add(inputEndpoint);
                    updateParameters.setConfigurationSets(configlist);
                    //required for update
                    OSVirtualHardDisk osVirtualHardDisk = resp.getOSVirtualHardDisk();
                    updateParameters.setOSVirtualHardDisk(osVirtualHardDisk);
                    updateParameters.setRoleName(resp.getRoleName());
                    OperationResponse updtResp = computeManagementClient.getVirtualMachinesOperations().update(clusterName, clusterName, resp.getRoleName(), updateParameters);
    And every time i am creating a new cloud service along with head and node instances. Region is "South Central US".
    I am setting ProvisionGuestAgent field to true at instance creation time. Thank you.

  • Restrict creation of appraisals for inactive employees using BADI

    Please could someone guide or assist me.
    When we use Tx APPCREATE to create an appraisal for an employee, it allows us to create an appraisal for an inactive employee. When we drop down the appraisee field (search for the appraisee), we can view & select employees that are inactive.
    I would like to exclude the inactive employees from the appraisee list.
    I have tried to use BADI HRHAP00_TMPL_RESTR, and created an implementation, but it doesn't seem to be called when i created the appraisal, i have tried debugging it to see if i get out to this badi, but no luck.
    Any help in this regards will be greatly appreciated.
    Regards,
    Chantal

    Hi Chantal
    As far as I know, you are using the right BADI for your requirement. Can you plz. try creating appraisal documents through PHAP_CREATE_PA or PHAP_PREPARE instead of APPCREATE Tcode.
    BTW, have you incorporated the BADI (filter) to your appriasal template?
    Hope this helps
    Best Regards
    Reddy

  • What are most commonly used BADIs for Opportunities and BPs?

    Dear all,
    What are mostly used BADI's for Oppotunity Management and Business Partner Maintenance, and what is the use of those BADIs.
    what is the use of BAPI's in CRM, suggest me BAPI names and their usage
    Your suggestions will be highly appreciated
    Best wishes
    Raghu ram

    Hi Hari,
    the variable which has to be created depends on the business requirement and differs based on the report requirement.
    for more informatrion on variables you can refer to following docs,
    characteristics variables
    http://help.sap.com/erp2005_ehp_02/helpdata/en/5c/8db08a555411d189660000e829fbbd/frameset.htm
    text variables
    http://help.sap.com/erp2005_ehp_02/helpdata/en/5c/8db0a4555411d189660000e829fbbd/frameset.htm
    formula variables
    http://help.sap.com/erp2005_ehp_02/helpdata/en/5c/8db0b1555411d189660000e829fbbd/frameset.htm
    http://help.sap.com/erp2005_ehp_02/helpdata/en/5c/8db0a4555411d189660000e829fbbd/frameset.htm
    :->
    NM

  • Added custom screen in PO using BADI ME_GUI_PO_CUST and ME_PROCESS_PO_CUST

    Hi All,
    I have added custom screen with two z fields at item level using BADI ME_GUI_PO_CUST and ME_PROCESS_PO_CUST i can see my screen in tcodes ME21N , ME22N , ME23N but I am not able to save data.
    and also screen is coming in change mode even in ME23N .
    thanks.

    Hi,
    I have added two xfields at item level.
    This is the code i have added in zimplementation ZME_GUI_PO_CUST .
    IN Zimplementation ME_PROCESS_PO_CUST I have added code only in method FIELDSELECTION_ITEM . after doing this I can see only screens in ME21N, ME22N, ME23N but when enter data in zfields and trying to save it is giving me message no data has changed.
    method IF_EX_ME_GUI_PO_CUST~SUBSCRIBE.
    DATA: ls_subscriber LIKE LINE OF re_subscribers.
    we want to add a customer subscreen on the item detail tab
      CHECK im_application = 'PO'.
      CHECK im_element     = 'ITEM'.
    each line in re_subscribers generates a subscreen. We add one subscreen in this example
      CLEAR re_subscribers[].
    the name is a unique identifier for the subscreen and defined in this class definition
      ls_subscriber-name = subscreen1.
    the dynpro number to use
      ls_subscriber-dynpro = '0001'.
    the program where the dynpro can be found
      ls_subscriber-program = 'SAPLYMEPOBADIEX'.
    each subscreen needs his own DDIC-Structure
      ls_subscriber-struct_name = 'MEPO_BADI_STRUCT'.
    a label can be defined
      ls_subscriber-label = text-001.
    the position within the tabstrib can be defined
      ls_subscriber-position = 4.
    the height of the screen can be defined here. Currently we suport two screen sizes:
    value <= 7 a sevel line subscreen
    value > 7  a 16 line subscreen
      ls_subscriber-height = 7.
      APPEND ls_subscriber TO re_subscribers.
      ENDIF.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL.
      DATA: l_item       TYPE REF TO if_purchase_order_item_mm,
            ls_mepoitem  TYPE mepoitem,
            ls_customer  TYPE mepo_badi_exampl.
    system asks to transport data from the business logic into the view
      CASE im_name.
        WHEN subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast l_item im_model.
          CHECK NOT l_item IS INITIAL.
    transport standard fields
          ls_mepoitem = l_item->get_data( ).
    transport customer fields
          CALL FUNCTION 'YMEPOBADIEX_GET_DATA'
            EXPORTING
              im_ebeln = ls_mepoitem-ebeln
              im_ebelp = ls_mepoitem-ebelp
            IMPORTING
              ex_data  = ls_customer.
    store info for later use
          MOVE-CORRESPONDING ls_mepoitem TO dynp_data_pbo.
          MOVE ls_customer-badi_bsgru TO dynp_data_pbo-badi_bsgru.
          MOVE ls_customer-badi_afnam TO dynp_data_pbo-badi_afnam.
        WHEN OTHERS.
      ENDCASE.
    endif.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
      CASE im_name.
        WHEN subscreen1.
          CALL FUNCTION 'YMEPOBADIEX_PUSH'
            EXPORTING
              im_dynp_data = dynp_data_pbo.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    endmethod.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
      CASE im_name.
        WHEN subscreen1.
          CALL FUNCTION 'YMEPOBADIEX_POP'
            IMPORTING
              ex_dynp_data = dynp_data_pai.
          IF dynp_data_pai NE dynp_data_pbo.
    something has changed therefor we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
          ENDIF.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    endmethod.
    method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL.
    DATA: l_item       TYPE REF TO if_purchase_order_item_mm,
            ls_mepoitem  TYPE mepoitem,
            ls_customer  TYPE mepo_badi_exampl.
    data have to be transported to business logic
      CASE im_name.
        WHEN subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast l_item im_model.
          CHECK NOT l_item IS INITIAL.
          ls_mepoitem = l_item->get_data( ).
    standard fields changed?
         IF dynp_data_pbo-matkl NE dynp_data_pai-matkl OR
            dynp_data_pbo-plifz NE dynp_data_pai-plifz OR
            dynp_data_pbo-webaz NE dynp_data_pai-webaz.
    update standard fields
           ls_mepoitem-matkl = dynp_data_pai-matkl.
           ls_mepoitem-plifz = dynp_data_pai-plifz.
           ls_mepoitem-webaz = dynp_data_pai-webaz.
            CALL METHOD l_item->set_data( ls_mepoitem ).
         ENDIF.
            CALL FUNCTION 'YMEPOBADIEX_GET_DATA'
              EXPORTING
                im_ebeln = ls_mepoitem-ebeln
                im_ebelp = ls_mepoitem-ebelp
              IMPORTING
                ex_data  = ls_customer.
            ls_customer-badi_bsgru = dynp_data_pai-badi_bsgru.
            ls_customer-badi_afnam = dynp_data_pai-badi_afnam.
            CALL FUNCTION 'YMEPOBADIEX_SET_DATA'
              EXPORTING
                im_data = ls_customer.
         ENDIF.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
    method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM.
    DATA: l_persistent TYPE mmpur_bool.
    CONSTANTS:
    FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.
    l_persistent = im_item->is_persistent( ).
    *IF l_persistent EQ mmpur_yes.
    READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY
                         metafield = MMMFD_YYMAN_NUM."fd_cust_01.
    IF sy-subrc IS INITIAL.
    <fs>-fieldstatus = '*'. " Display <-- this one was as per the sample code given.
    <fs>-fieldstatus = '+'. " Input <-- this i added to make the field mandatory.
    ENDIF.
    READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY
                         metafield = MMMFD_YYMAN_DES."fd_cust_01.
    IF sy-subrc IS INITIAL.
    <fs>-fieldstatus = '*'. " Display <-- this one was as per the sample code given.
    <fs>-fieldstatus = '+'. " Input <-- this i added to make the field mandatory.
    ENDIF.
    *ENDIF.
    ENDIF.
    endmethod.

  • Customer screen using BADI :  ME_GUI_PO_CUST

    Hi
    I am implementing BADI : ME_GUI_PO_CUST to create custom screen at item level.
    Pls tell me the steps to be followed to get custom screen using BADI
    Thanks
    Vinay.

    Hi Vinay,
    go to transaction SE18, then enter your BADI.The in menu go to Goto -> Sample Code -> Display. You will see example of implementation of this BADI. All these examples are very well commented. Basically you will have to create your own function group with your new screen and call this screen from methods of BADI.
    Cheers

  • CFMX 6.1's Virtual Memory Use problem!!

    I appologise for the long post in advance...
    Ok... so I have this script that, using cfdirectory, will
    check a directory for any files that may have been uploaded, if
    there are files, it loops through the results and reads the files
    one at a time, line by line, using the FileReader.cfc (Uses the
    Java FileInputStream, InputStreamReader, and BufferedReader to
    provide a way to incrementally read large files). The files are
    just pipe "|" delimited data, each line represents a record for a
    db table.
    Now as it's reading each line, it will perform some basic
    string parsing to clean up the file line to make sure the data is
    valid, blah blah blah and then it will write that "cleaned" line to
    another file using FileWriter.cfc (Java component once again). Once
    it's completely done reading the original file, it will close it
    and it will open the new "cleaned" version of the file, read it
    (FileReader.cfc), create an INSERT statement and then update the
    database table.
    Now... this all works GREAT... until it has to loop through
    more than a few files... 3 - 4 files are NO problem! works like a
    charm, but throw 6 - 8 files at it and it dies, not a timeout mind
    you but an actual "java.lang.OutOfMemoryError" (now, I've tried
    making all the files exactly the same (just changed the name) and
    the weird thing is, it takes longer and longer to process each as
    it goes through the loop... I have the script write some stats as
    it's looping:
    FILE 1 STATS
    Name: COA0607_Intranet1.DAT
    Status: Import Successfull
    Line Count: 32,971
    Processing Time: 74,237ms
    FILE 2 STATS
    Name: COA0607_Intranet2.DAT
    Status: Import Successfull
    Line Count: 32,971
    Processing Time: 82,018ms
    FILE 3 STATS
    Name: COA0607_Intranet3.DAT
    Status: Import Successfull
    Line Count: 32,971
    Processing Time: 94,476ms
    FILE 4 STATS
    Name: COA0607_Intranet4.DAT
    Status: Import Successfull
    Line Count: 32,971
    Processing Time: 145,108ms
    I know what you guy are probably thinking; "Woah man... CF
    isn't really meant to do that kind of processing...", I know, trust
    me I know... however, I really neeeeeed it too lol.
    Ok, so as the script is running, I watch the Virtual Memory
    use of jrun.exe, processing say 3 - 4 of these files brings up the
    usage to approx 300,000k which yes, is a LOT but that's fine...
    this process is meant to run at night via a Scheduled Task...
    When I run more than 4 files, things start to get ugly, keep
    in mind that these are EXACTLY the same files just re-named
    differently. The script will start lagging BIG time and on the last
    file (usually the last file) I'll see the memory usage spike from
    350,000K all the way up to 600,000K and that's when it throws the
    "java.lang.OutOfMemoryError" and dies... I've tried commenting out
    the part of the script that updates the db, but still get the same
    problem...
    So... what gives? How come CF Server does this??? I mean, it
    runs fine for the first few files... and then WAM, it dies... sorry
    for the long post... any insight here is VERY much appreciated...
    it would be AWESOME if the wonderful folks at Adobe could shed some
    light on this for me : )
    CFMX 6.1 version: 6,1,0,83762
    Windows XP Pro SP2
    Intel P4 2.8Ghz
    1Gb of Ram

    quote:
    Originally posted by:
    Mr Black
    300M memory usage while using "incremental" file reader??
    Looks like it is "incremental" only in the sense that it increments
    memory usage. Did you try non-Java C/C++ file reader tags?
    Well I did try cffile originally... and it didn't even run...
    lol

  • How to determine the purchasing group using BADI BBP_PGRP_FIND

    Hello Friends
    We use SRM Server 5.5 (Classic scenario).
    As you know that, purchasing group has the responsible product categories in PPOMA_BBP, when user creates the shopping cart to determine the purchasing group. 
    In our case, we should determine the purchasing group using other criteria.
    MM side is OK to determine the purchasing group using specific criteria.
    Because Material Master has the purch. Group information. 
    In case of SRM, we should develop the logic using BBP_PGRP_FIND BADI.
    But I’m not sure how to use this badi.
    We want to determine the purchasing group based on the following logic.
    If described shopping cart without product ID
    Do Standard purchasing group determination logic.
    Else
    Assign the purch group from MARC- EKGRP (Purchasing Group)
    Is it possible to determine above the logic?
    If yes, Could you give me some information?
    Thank you,
    Best regards,
    SH
    Message was edited by:
            So Hee Lee

    Thank you for your answer.
    I found the way to develop the our logic using BADI: bbp_pgrp_find.
    But I’m not sure the following logic is correct.
    To differentiate described req. or product id req, We check the E_ITEM – PRODUCT using BBP_PD_SC_GETDETAIL.
    IF E_ITEM – PRODUCT is blank, Read the category ID to find the purchasing group.
    To find the purch. Group, we can use FM:  BBP_OM_DETERMINE_RESP_PGRP.
    Import parameter: IS_RESP_ITEM_DATA – Category _ID
    Export parameter: ES_PURCH_DATA
    ELSE
    CALL the customer function to read the R/3 purchasing group from MARC- EKGRP
    Search the HRT5500-TABNR using purchasing group from R/3.
    Search the HRP5500 – OBJID using HRT5500-TABNR
    Call the FM:  BBP_OM_DETERMINE_RESP_PGRP
    Import parameter: IS_RESP_ITEM_DATA – PROC_GROUP – OBJID
    Export parameter: ES_PURCH_DATA
    Thank you
    Best Regards
    SH

Maybe you are looking for