abas-ERP: Command in user menu for specific screen priority - erp

I need a command which calls a screen in a specific priority.
In detail:
I'd like to offer a menu entry to our users were they can simple change the work day calendar in employee data sets and nothing else. I know the correct way would be creating a lower prio screen and grand the user such prio for accessing employees. But these users are allowed to change more than the work day calendar! I just like to reduce the fields in screen for a more simple recording and maintaining of absence from work.
So they should be able to view and change the normal employee screen but with a special command (from command view) the should open the same employee but with reduced number of field. Simple: separated screens for different use cases.
I believe I have to solve it by providing a service program in infosystem or similar but I'd like to ask you for a better way of solution before.

In this case you can work with different screen context modes.
Please keep in mind, that screen modes works just within new screen descriptions.
(almost) Every element in the screen editor has an option called visibility scope (Sichbarkeit -> Geltungsbereich)
For example you could define a scope called EXTENDEDPERMISSION.
Then the element would be only visible, when you set the screencontext in FO to "EXTENDEDPERMISION"
..: set one screen context
.formula P|maskkontextfop = "EXTENDEDPERMISION"
..
..: set some screen contexts
.formula P|maskkontextfop = "VIEW1 VIEW2 LIGHTVIEW"
You can set the screen context in every event you'd like to.
For more infos you can search for "maskkontextfop" in the online help.
But keep in mind, that the user still can access all variables over the dynamic selection as long as you grant them the permission to these fields!
So if you really want, that a user (under no circumstances) gains access to some fields, you'll have to configure the right permissions.

Related

Deactivate read-only & non-realtime mode in firebase [duplicate]

Read-only & non-realtime mode activated to improve browser performance
Message pops up in my project and I'm unable to delete the nodes as well
Also I read this https://groups.google.com/forum/#!topic/firebase-talk/qLxZCI8i47s
Which states :
If you have a lot of nodes in your Firebase (say thousands), we need to create a new element for each node and modern browsers simply have limitations of how many DOM elements you can add to a page
It says:
To resolve this problem, don't load your Firebase Dashboard at the root of your Firebase, but instead load it lower down in the hierarchy
I do not get what it means
How do I get back to my Realtime Dashboard?
If you want to delete a high level node when this is activated, I recommend doing this.
Open up a text editor and type in { }. Save this file as "blankJSON.json".
Go to high level node you want deleted and select it, once it opens up and shows you all the nodes that need to be removed, select the three bars at the top right and select "Import JSON", (It would be safe to first "Export JSON" If you don't have backups, in case you make a mistake here). Import the JSON file we created earlier titled "blankJSON".
This will delete all of the data inside.
Once again, I highly suggest you make a backup before doing this, It's extremely easy to make a backup and also it is much easier than you would think to upload this blankJSON to the wrong node and then erasing a bunch of important data.
When it detects that it's downloading too many nodes from your database, the Firebase Console stops using real-time mode and switches to read-only mode. In this mode it requires less work from the browser, so it is more likely that the browser will stay performant.
To get back to realtime mode, you have to go to a location that has fewer nodes. So say that you start loading the database at the root, that means that "pseudo address bar" at the top of the data tree will say:
https://<your-project>.firebaseio.com/
And then will show the list of items. Now click on the URL in that pseudo address bar and change it to:
https://<your-project>.firebaseio.com/<one-of-your-keys>
And hit enter. The data tree will reload with just the node from one-of-your-keys and down and will likely switch to realtime mode again.
Every node key in firebase is a link, you can open a sub-node in a new tab and then edit that sub-node and its children.
Right click on a sub-node you want to edit or delete
Select open link in a new tab
Edit the sub-node in the new tab
1) Click on the Node you want to mass delete
2) Import an empty .json file (just containing curly braces, {} )
3) The node value will be set to null, in other words it is deleted or rather overridden with an empty node!
What you can do is to have an OnClickListener and call the remove value method to your DatabaseReference, like this:
mCart.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
mDatabaseReference.removeValue();
}
});
I have the same problem... I'm a bit surprised because I though Firebase could easily scale to support huge amount of data (example million users, etc.).
I have a node with 80000 sub-nodes (each object has his own push-id) and I cannot delete or perform any action on it because the real-time doesn't work in Firebase console.
I think the only way to udate or delete the data it's to do it via JAVA code :(
Multiple times trying to load the specific keys can be tiresome. There is a python library that could do this for you easily.
http://ozgur.github.io/python-firebase/
I needed to delete a lot of keys and this helped me do that in one go.
What I do is export the entire tree, edit/add the node I want using an editor, then import the JSON and overwrite the previous node/tree. Problem solved! Risky though 😁

CICS Subprograms

I have a requirement that states to have a Menu Screen containing 10 options and user can select a option and jump to appropriate screen.I have created a Trans-ID for Menu Screen.Do i need to create Trans-ID for all the 10 options?.I have searched for this type of Requirement and all of them involves creating the Trans-ID for each sub screen so that the screen can be refreshed and return to same screen until user selects to go back to main-screen.
I am new to CICS-COBOL Programming and not sure why we need to create Trans-ID for each screen.Is this the global format or is there any other approach available?
No, you don't need to use a tranid per screen/function in this scenario. You could actually use one transid and even one program in a pseudoconversational style.
You would use a commarea to hold the state of the interaction with the user at the terminal, so when the user picks an option and the next 'leg' of the pseudoconversation invokes the transaction and program again, you can determine in that program what has just been received from the terminal, what to do with it and what response to send back to the terminal. This process simply repeats until the business function completes and you can end with the default menu again.

Hide Area and Iteration Names users don't have permission to view

I have end users going in as stakeholders and adding new work items. we have a long list of areas and iterations.
I have created a custom group and denied them access to all areas and iterataions except the one they need but when they go create workitem, they can still see all the areas and iterations.
Yes, they cannot save workitem under an area/iteration that they don't have access to but is there a way to display only those areas and iterations that they have access to?
There is no such work item rule by default to hide Area and Iteration Names, you would need to customize your own work item control. The source below can help you start how to customize a work item control:
https://witcustomcontrols.codeplex.com/

iOS: Accessibility support for dynamic labels / validation errors?

I want to enable accessibility support in my app where i have In-line validation message (e.g As per below screenshot) when user enters something invalid data. My app doesn't show any error message.
What can be best and intuitive way to inform visual impaired/blind user about wrong data entries. e.g. Username & password mismatch, invalid.
First off, there is no "correct" way to do this. There are just a bunch of ways that work. The "best" way to do this, would be for iOS to have a "required" trait (IMO). But this is not supported, so we have to work with what iOS has given us... hints and labels.
Step 1:
Tell the user what is required. I would do this by adding the information to the hint. I like to add information to the hint that only non-familiar users need. "Power users" of your application will get use to what fields are required (assuming you're going to have return users, some views are just "hit and run" types). But, point being, don't flood users with unnecessary information. Users who visit a particular view frequently will get use to what is required, so keep non-crucial information in the hint. What you want is voiceover to read out the text input fields like this: "Email(accessibilityLabel) text field (the type of object), (pause) This field is required.(hint)" Don't wait until after a failure to provide this information to VoiceOver users. It should just always be set this way. If the type of failure changes, change the hint to adapt to this particular type of failure. If you'd like to keep the hint in sync with the Red highlighted labels, you can consider overriding the functions from the UIAccessibilityProtocol to pull out this information EX:
- (NSString*)accessibilityHint {
return myUILabel.text;
}
This should cause to keep the hint of the object, and the text of your UILabel in sync.
Step 2:
Mark all elements that are not the text input fields, as not accessibility elements. All of the information a user needs about those fields is either stored in the type of the field (a text input field), the label (email/password), or the hint (whether or not it is required). Therefore, we don't want VoiceOver to look at the other elements, because this would be duplicate information.
Step 3:
Use the following line of code:
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, anAccessibilityElement);
In your login action. On a failed login action, you should shift voiceover focus to the element that caused the failure. This informs the user that their action was attempted, and that it failed. It also allows them to easily know which element caused the failure, and that it needs fixed. In the event of multiple failures, make sure you shift focus to the first failure!

Loading select options after setting value

My program flow requires that I first set the value of a select option in the Viewmodel and then I load the available options into the Viewmodel. This causes problems, typically the first available option will be seen in the selection list after this, while the selected option value stays at the specified value.
I was hoping that setting the new "valueAllowUnset" would help, but instead my page becomes unresponsive when using it.
Therefore I currently set the original value again after loading the options. Strangely, this only works when I set the value, set a different value and then set the value again, e.g.
self.data()[field](orgValue);
self.data()[field]({});
self.data()[field](orgValue);
(I store values for multiple selection lists in the self.data observable and access them with the property index "field".)
I tried to strip this down to a simple JSFiddle (http://jsfiddle.net/timvdh/HN6DE/), but the behavior does not show there, although the example pretty much resembles my actual application. However, I am using about 30 select lists there.
So I was hoping, that someone can make an educated guess about what goes wrong in my application, I am hoping that the fact that I have to set the original value three times maybe gives a clue.
EDIT: This fiddle demonstrates, that setting the selected option before and after filling the options list does work with "valueAllowUnset": http://jsfiddle.net/timvdh/HT5Tp/
I am using JQuery Mobile with knockout.js and that caused the problem (sorry I did not even think about JQM being the problem in the first place). I am now setting the option before filling the list and after filling the list I call
$("#selectmenuID").selectmenu("refresh");
to display the option.
The hanging browser was not caused by knockout, there are additional subscriptions to the selectmenus in my app. "valueAllowUnset" changed the behavior of the selectmenus and triggered loops caused by problems in my code.

Resources