cancel
Showing results for 
Search instead for 
Did you mean: 

Executing Planning function on a Different AggregationLevel on Save on Promotion

Former Member
0 Kudos

Hi Experts,

We've a planning layout on an Aggregation Level 1, which is directly based on a Planning DSO 1. I wanted to execute a Planning function which is based on Aggregation Level 2, which is based on a MultiProvider having two Planning DSO's 1 and 2. This Planning function will copy data from DSO1 to DSO2. This shall be executed on Save.

Now when I save the promotion, it goes to the dump of "Unassigned Field Symbol".

In this case, I can't even implement the BADI: RSCRM_IMP_QUERY for InfoProvider restriction to which the data needs to be saved because the query is based on Aggregation Level 1 which is directly based on DSO1.

It would be great to share your expert thoughts here.

Thanks & regards,

Jomy

Accepted Solutions (0)

Answers (1)

Answers (1)

0 Kudos

Have you tried implementing the badi RSCRM_IMP_EVT_PLANNING_FUNCT, and change your info provider selection? you also need to set the filter as custom when you register the PF

Former Member
0 Kudos

Hi Karthik,

Yes in RSCRM_EVENTCUST, I've maintained custom as QFilter for this Planning Function and I've also implemented the BADI: RSCRM_IMP_EVT_PLANNING_FUNCT with the below code:

DATA: lw_var     TYPE rscrms_imp_selection,

           lw_var_ran TYPE rscrms_imp_range_value,

           lt_var_ran TYPE rscrmt_imp_range_value.

CLEAR: lw_var_ran, lw_var, lt_var_ran.

     IF iv_query_id EQ 'YTPMP_AC01_Q0001'  .

      IF iv_planning_function EQ 'YTPMMP_PF_03'.

         lw_var-name = '0INFOPROV'.

         lw_var_ran-sign = 'I'.

         lw_var_ran-option = 'EQ'.

         lw_var_ran-low = 'YTPMPD02'.

         APPEND lw_var_ran TO lt_var_ran.

         lw_var-values = lt_var_ran.

         APPEND lw_var TO ct_variables.

      ENDIF.

   ENDIF.


But it still somehow dumps, do you think something more needs to be done.


Thanks & regards,

Jomy

0 Kudos

where exactly you get the dump? and could u copy the code part where it dumps?

also in ur badi, when u add the infoprovider did you remove others and made sure it had only the one you need?

Former Member
0 Kudos

HI Karthik,

It dumps at the below code:

    The termination occurred in ABAP program "CL_RSDRC_TREX_QUERY_LAYER=====CP",

     in "_GET_PARTPROVS_WITH_TREX_PART". The main program

    was "SAPMSSY1".

  11   LOOP AT l_ts_partprov ASSIGNING <l_partprov>.

   12     IF i_r_ipro->n_s_dta-cubetype = rsd_c_cubetype-hcpr

   13       AND i_r_ipro->is_execution_on_part_possible( ) = rs_c_false

   14       AND i_r_ipro->is_part_in_columnview( i_partprov = <l_partprov>-partprov ) = rs_c_true.

   15       IF rs_c_false = cl_rsdrc_trex_query_layer=>_has_partprov_trex_part(

   16                                     i_partprov   = i_r_ipro->n_infoprov

   17                                     i_th_sfc     = i_th_sfc

   18                                     i_actualdata = <l_partprov>-actualdata

   19                                     i_cubetype   = i_r_ipro->n_s_dta-cubetype ).

   20

   21         DELETE l_ts_partprov.

   22       ENDIF.

   23     ELSE.

   24       READ TABLE i_r_ipro->n_ts_part ASSIGNING <l_s_part>

   25       WITH KEY partprov = <l_partprov>-partprov.

   26

>>>>>       _map_sfc_to_part(

   28         EXPORTING

   29           i_infoprov   = <l_s_part>-infoprov

   30           i_partprov   = <l_partprov>-partprov

   31           i_th_sfc     = i_th_sfc

   32         IMPORTING

   33           e_th_sfc     = l_th_sfc ).




I did not understood your last ask:

"Also in ur badi, when u add the infoprovider did you remove others and made sure it had only the one you need?"


It's under a IF ELSE right and hence shouldn't be an issue, i believe as shown below:


DATA: lw_var     TYPE rscrms_imp_selection,

           lw_var_ran TYPE rscrms_imp_range_value,

           lt_var_ran TYPE rscrmt_imp_range_value.

CLEAR: lw_var_ran, lw_var, lt_var_ran.

     IF iv_query_id EQ 'YTPMP_AC01_Q0001'  .

      IF iv_planning_function EQ 'YTPMMP_PF_03'.   

         lw_var-name = '0INFOPROV'.

         lw_var_ran-sign = 'I'.

         lw_var_ran-option = 'EQ'.

         lw_var_ran-low = 'YTPMPD02'.

         APPEND lw_var_ran TO lt_var_ran.

         lw_var-values = lt_var_ran.

         APPEND lw_var TO ct_variables.

      ENDIF.

  ENDIF.


Let me know what you think.

Really appreciate your help here.


Thanks & regards,

Jomy

0 Kudos

What i mean is you add info prov to ct_variables, but what do you see in ct_data_selection?

does the infoprov has your DSO2 or DSO1 ?

in my case we had the other way round ie the query is based on the agglevel on top of MP which has both DSO1 & 2. Not sure of you can also do that.

Former Member
0 Kudos

Hi Karthik,

Are you saying we can't execute a planning function which is on a different aggregation level which is based on MP?

One more observation:

When I skip this code where dump happens, then everything works perfectly fine. This means something gets set in some table for it to go over this code.

Really appreciate your help here.

Thanks ,

Jomy

Former Member
0 Kudos

Hi Experts,

Really appreciate, if someone can guide on this issue.

Some observations:

a) The control comes to this point and if I bypass this code, then this works for ever unless and untill I reactivated the MultiProvider and Aggregation Level.

b) In the case of dump, the dumps happens because of unassigned field symbol  <l_s_part>-infoprov .

    This is because Read Table read table i_r_ipro->n_ts_part has all part providers but not the Aggregation Level itself but reading of the table happens with below key:

with key partprov = <l_partprov>-partprov which is nothing but the Aggregation Level.

Thanks & regards,

Jomy