Skip to Content
author's profile photo Former Member
Former Member

BPS -> IP Dataslice question....

Ok here is the deal....

In BPS I used to create an exit function that would deactivte and re-activate dataslices. This was useful when I wanted to show users data and update them with planning functions but not with user input. For example, If I am doing cost center planning, I want to show the user all cost elements for their cost center, however, I do not want them updating the salary and benefits costs, because those are to be calcuated by the headcount planning screen. What I would do in this case is create a dataslice on those accounts and when I run the planning sequence for calculating salary and benefit data, I would put a step in front of the calc that de-activated the DS and one after that reactivated it. This worked great.

Now I am using IP. I want to do the same thing. I have located the table that contains the DS information and the field used to show if a DS is active. What I cannot find is the IP equivilant to UPC_DATASLICE_DESTROY. I ran this in my exit to clear the buffer so my changes would be effective immediatly in the session I was in.

What I am looking for is the IP eq to UPC_DATASLICE_DESTROY or a way to do this same thing in IP.

I am aware that I can set values in the queries to be updated by functions and not user input, however this does not work when I have only selected accounts I want to apply this to.

Thanks,

Mike.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

4 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Jan 09, 2007 at 11:22 PM

    Michael,

    I haven't had the specific requirement you are asking about but here are a few apporaches I would look into.It looks like there are a few function modules that are delivered in IP for DataSlices.Please look into these:

    RSPLSDS_PLDS_CHANGE

    RSPLSDS_PLDS_CHECK

    RSPLSDS_PLDS_CREATE

    RSPLSDS_PLDS_DELETE

    RSPLSDS_PLDS_EXISTS

    RSPLSDS_PLDS_LOAD

    RSPLSDS_PLDS_ROLLBACK

    RSPLSDS_PLDS_SAVE

    Second one is, have you tried writing a function module to update the field "Used" in RSPLS_DS to activate or inactivate a Dataslice.Third approach is, instead of input query, you could give your users a regular query where they can see the data without updating it, they can push the function button to update the specific accounts, save them and refresh the report to see the updated data.This way, you can skip dataslices altogether.

    Hope this helps.

    Cheers

    Srini

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 10, 2007 at 08:58 PM

    Hi Srini,

    Thanks for the suggestions. I have already created a program that updates the used field. My main problem is that this change is not recognised within IP because of the data in the buffer. This is what i used upc_dataslice_destroy for in BPS. I looked into the FM's you listed again and I was unable make those do what I wanted either. I also investigated the class cl_rspls_plds. I have considered your option 3, however it does not allow for partial input of a charicterictic such as account. For example I want 10 accounts to be locked while the rest are ready for input.

    Mike.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 15, 2008 at 03:44 PM

    Great question Mike. I have the same issue, so let's hope someone got a good suggestion.

    Martin

    Add a comment
    10|10000 characters needed characters exceeded

    • Hi Dries,

      I don't know why you want to call the is_protected method to switch on/off the exit data slice. The is_protected method will be called by the system to check whether this records is protected or not. This has nothing to do with problem to activate/deactivate the data slice.

      You need

      1. Your exit class: This class a an additional public attribute n_is_active. You fill this attribute by a call back from a FOX. With a reference to instance of your exit class you can set this attribute. How to get this instance was answered above. This has nothing to do with the is_protected method.

      2. In the implementation of the is_protected method you simply have to use the public attribute:

      ...

      clear e_mesg.

      clear e_noinput.

      check n_is_active = abap_true.

      ... "do your real check here

      So only when the n_is_active flag is set you do a real check, if not the is_protected methods 'protects nothing'.

      Regards,

      Gregor

  • author's profile photo Former Member
    Former Member
    Posted on Aug 12, 2008 at 03:50 PM

    Hello All,

    Interesting to see my question pop up at the top of the list again. Also intersting to see how many times it has been viewed.

    Since I last posted this message I have come up with 2 solutions on my own to solve this issue. 1 simple, 1 complex. First the simple.

    In my scenario I had 2 layouts 1 for salary planning, 1 for cost element planning. I wanted to be able to calculate and post values to locked cost elemnts from the salary plannig layout to the cost center planning layout within an application.

    Here is my simple step by step solution:

    1) create a new charicteristic called Record Type.

    2) Perform all salary planning including calculation and posting to the accounts on a specific record type. I used "S" for salary.

    3) Create a data slice that locks the accounts for salaries and inculde in the selection record type #.

    4) Perform all cost element level planning on an agg level that does not include record type. Thus aggregating the salary amounts from salary planning in record type # and locking the accounts.

    This is easy and it works well.

    The more complex solution:

    I use this for locking and unlocking actual data in my plan dynamically when running planning sequences.

    1) Create a custom function type that updates a value in the the shared memory. this value is an indicator that a dataslice is either locked or unlocked.

    2) Create an exit variable on a charicteristic in your cube (i use version). This exit variable checks the buffer value and returns either a valid value (if the slice is locked) or a bogus value (if the slice is unlocked).

    3) use this exit variable in conjunction with the values you want to lock.

    4) in your planning sequence call the custom function as the first and last step to set and unset the shared memory value.

    This solution is very useful for plan setup functions etc. when you need to allow postings to actual values etc. It will also work in the first scenario, however you have to create an exit dataslice and not use the buffer, which has obvious performance impacts.

    M.

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.