Skip to Content

Hi everybody, this is about how i got an SM30 maintenance tableview, to accept changes from multiple users at the same time.

It’s my first ever blog, so don’t expect too much.

Maybe I should start with the admittance that DDIC related development is not my field of experience – but nevertheless, I’d like to share the following, because a reasonably thorough search on SCN didn’t bring any satisfying result.

Tableview V_T001B_COFI is a maintenace view that allows users, to assign timeslots for accepting posts, depending on various key values. The view features a subset of the table entries of table T001B.

V_T001B_COFI_Change View _Posting Periods_ Specify Time Intervals__ Overview.png

When the request was brought to me, that the maintenance of posting periods in tableview V_T001B_COFI should be enabled for multiple users at the same time, I started to search SCN for similar threads. That’s where I came across this one.

The outcome however, was not satisfactory, since any number of users could have made concurrent changes, leaving the lastone to press ‘SAVE’  as the winner.

So I started to reanalyse the problem.

I would need to create key specified locks.

My first impulse was, to create a new maintenance dialog, complete with an enqueueing object, specifically taylored to my needs – that is, locking entries keyspecific.

The maintenance dialog would then have to ensure, that no two users could maintain the same entries. Thatwas the easy part, as far as the maintenance in my own dialog would go.

In addition it was necessary, that any maintenance started by using the standard view (V_T001B_COFI) would still prevent any other user from editing any entry – whilst on the other hand, the key specific  lock would have to prevent the standard maintenance as well.

I knew that I could achieve that, by cleverly combining the use of the FMs to be generated by the enqueueing object, together with FM ‘ENQUE_READ’. But still it felt clumsy.

So I started to reanalyse the problem.

I didn’t need to have control over every single tableline to be locked seperately – a subset, in this case by tablefield BUKRS would be completely sufficient.

And there it was – the keyword subset. I remembered coming across in DDIC, when building a maintenance tableview.

So my new aproach started by copying tableview V_T001B_COFI to Z_T001B_COFI, with the only difference , setting the maintenance attribut (RDONLY) for viewfield BUKRS to ‘S‘.

Z_T001B_COFI-PERFORMANCE_ASSISTANT.png

Z_T001B_COFI_Dictionary_ Display View.png

Following that, I created a maintenance dialog without any fancy stuff.

When I started the tableview Z_T001B_COFI, a popup dialog prompted me to provide the variant(BUKRS) and the next thing was a maintenance screen with only those entries, matching the variant.

Z_T001B_COFI Change View _Posting Periods_ Specify Time Intervals__ Overview.png

A quick glance on the enqueued object showed the difference. Where the standard View had produced an entry, specified only by tablename, client and record type, there was now the variant as additional discriminator.

T001B_ENQUEUE ARGUMENT.png

A little bit of testing revealed, that all my preliminary enqueueing requirements where fully met. Without any additional enqueueing object or  modification, the request was fullfilled.

  Mission accomplished 🙂

Sometimes, it pays to think twice before starting to code and for me, it signalled that I should get myself a bit more into DDIC.

To report this post you need to login first.

27 Comments

You must be Logged on to comment or reply to a post.

    1. Jörg Wulf Post author

      Thanks Eitan,

      isn’t that always the problem? There is so much to know and only so much you can actually gather.

      If it wasn’t for the profane need to earn some money, i could spend days and days on reading, experimenting and collecting knowledge.

      BR – Jörg

      (0) 
  1. Suhas Saha

    I have seen this popup for many maintenance views, but never realised that this behaviour was due to the “subset” property 🙂

    It’s my first ever blog, so don’t expect too much.

    Now that the first blog is done & dusted, can we start expecting similar content? 😉

    (0) 
    1. Jörg Wulf Post author

      Thanks Suhas,

      As for the follow up, it depends.

      If i happen to come across something, that i feel is not common knowledge, i will come again..

      (0) 
  2. Jelena Perfiljeva

    Sometimes, it pays to think twice before starting to code

    It always pays to think twice (or more!). 🙂 Thanks for sharing, very interesting and educational.

    Hey, and don’t sell yourself short with “it’s my first blog”. Did Hemingway start his first novel with “it’s my first novel, so don’t expect much”? Don’t think so. 🙂

    (0) 
    1. Jörg Wulf Post author

      Well thanks anyhow Jelena,

      there’s hardly any more one can do, then give ones best. A Hemningway will certainly not result but i keep trying.

      (0) 
  3. Gareth Ryan

    Wow – what a cool entry for a first blog post!

    Great to see an old stalwart like SM30 still getting some love – no doubt this would be a really handy feature on lots of systems.

    Cheers,

    G.

    (0) 
    1. Jörg Wulf Post author

      Thanks Gareth,

      speaking of old stalwarts – for those of us, who still remember the behaviour of old SM31 (no save, no cancel – press Enter and either all is well or the damage is already done) the introduction of SM30 was already a hint of paradise. Still, there’s always room for improvement. 🙂

      (0) 
  4. Custodio de Oliveira

    Hi Jorg,

    As I can see you published this blog post more than 24 hours ago. Is there any reason why it’s not featured on front page yet?

    This is one of the best tips (sorry, it’s obviously much more than a tip) I’ve seen in a long time. Until today my default answer for this problem would be “no can do, live with it” – although I can’t really remember anyone asking me such thing in the last 10 years. Here’s the lesson for me: review your certainties from time to time.

    Thanks for sharing.

    Cheers,

    Custodio

    (0) 
    1. Jörg Wulf Post author

      Hi Custodio,

      thanks for the praise.

      You know that saying:

      “Everyone knew it was impossible. Then came along a fool who didn’t know it, and he did it.”  — Marcel Pagnol

      Well, nobody told me it couldn’t be done 😉

      BR – Jörg

      (0) 
  5. nabheet madan

    Back after long time…And reading this blog made my day. Till this time i know it can not be done… But conclusions are meant to be broken.

    Well done and keep sharing your experience 🙂

    Nabheet

    (0) 
  6. ASHISH AHIRE

    Very nice information Jörg Wulf , 6 months ago i’d same requirement and I used enque_read 🙁 but it’s really good info i’ll use it future requirement  ……… keep exploring and share it on SCN 🙂 we’re waiting ….. 😉

    BR

    Ashish

    (0) 
  7. Tom Van Oevelen

    Hello Jörg
    Very interesting. Thanks a lot.
    Additional question though: what is the best way to add authoration check on top of this? I.e. to make sure that the current user is authorized to change the data of the chosen company code?
    Thanks in advance for any clue.
    Krgs – Tom

    (0) 

Leave a Reply