Help making a dashboard read-only on conditions

i have a situation where i need to prevent changes being made if a job exists against a release on a sales order - we have a ‘shape’ added which gives a flag which is an indicator that other data exists and needs to be removed before making changes - this is understood througout the business but not always followed!!!

the ‘Stacks’ Exist’ shape is driven by a calculated field which is either true or false, if its true it displays, if its false it does not.

the ‘Panels’ button launches a dashboard where we enter sizes relating to our manufacturing process - this then calculates the quantity required for the release and ultimately the job.

Here is what i would like to do:

Option 1:
make the ‘Panels’ button disabled if either the ‘stacks exist’ is true or if there is any job against the release.

downside to this is you cant then go in and ‘view’ what was ordered previously without printing out the sales order acknowledgement

Option 2:

same critera as above but instead of disabling the ‘Panels’ button, force it to either open the dashboard in read only mode or a read only version of the dashboard.

Option 2 is preferred for visibiliy etc but i dont know what is feasible. I have tried to add conditions etc but i get lost and no idea where to fire what from and how it should all link up.

Any help will be massively appreciated!

I haven’t done this, but base forms do it all the time, so feasibility is high. You just have to recreate it.

Thinking through your scenario, you can correct me where I’m wrong, this would be my first approach…

You’re starting from Sales Order Entry. You have a button there to launch another dashboard (on-click event with an app-open action?).

I would add a condition BEFORE the app-open to check your criteria (StacksExist = true and/or job exists). If TRUE, run your app-open and add a value-In component to that app-open action. You want to pass a value to the dashboard you’re opening to tell it whether to be ReadOnly or not.

If your criteria are not met, on the false side of the condition, you again put your app-open either without any value-in, or use the same setting but set the value to false.

~*~

On your dashboard side, you would need an event to capture the value-in and row-update it to something like TransView.SysReadOnly (Epicor uses that one all the time).

That being said, because Epicor uses that one, you may want a variation so you’re not inadvertently hijacking a view.column epicor uses. Since you’re on a custom dashboard, you may be okay?? But… may want to use TransView.ReadOnly just to be safe.

You can then “disable” the key dataviews (rows) based on that passed in value via Data Rules.

Here’s an example:

If TransView.ReadOnly equals a value of true… disable rows on the Action Data View.

You can even cherry pick specific columns you may want to leave active if you want SOME functionality to survive.

So, again, I haven’t built this out in a customization myself, but Epicor does it all the time. You just have to set up both sides of the exchange.

The Sales Order Entry event checks the conditions and passes the corresponding value when it performs the app-open action.

The dashboard receives the value-in, places it into a dataview.column, and based on the value of that dataview.column, a Data-Rule can shut things down.

Another route (which is probably much more straight forward) would be to publish your dashboard to two different menus. One of those menus is set to ReadOnly in menu maintenance.

Again, you’d have your event in SO Entry to check your conditions…

If true, open the ReadOnly menu.

If false, open the open menu.

Again, haven’t tested this myself, but again, it is pretty standard Epicor practice (Part Entry vs Part Tracker).