Most of you might be already familiar with this, but thought of sharing again.
We come across many scenarios where field property needs to be controlled by peoplecode to match with the business logic. I want to mention about controlling a related display field.
Say I have Employee Id as the control field and Name as the related display field. For user friendly behavior, I hide the Employee Id field and display only the related field. So the name is displayed on the page instead of the employee id which is difficult to understand.
Now I need to hide this name from the page based on some user actions. As you have thought it is a very simple job, just write a code as seen below.
RECORD.FIELD.Visible = False;
Here comes the complex scenario. Suppose I have my Project Manager Id and HR Manager Id on the same page. I want to display the name for both Project manager and HR manager. For that I assign the same related display field, say PERSONAL_DATA.NAME, to both the fields.
My requirement still remains the same. I want to hide only the name for the employee and the project manager and HR manager name should still be visible. But all the name fields are same (PERSONAL_DATA.NAME).
If I use the previous code, which name will become hidden? Employees, project manager’s or HR manager’s? It will hide only the name which comes first in the page order.
Here is a method to tackle it.
Say the display control fields be:
Employee – EMPL_ID
Project Manager – PROJ_MGR_ID
HR Manager – HR_MGR_ID
To hide the name of the employee you can use the below code.
Local Field &fRelDisplayField;
&fRelDisplayField = GetField(RECORD.EMPL_ID).GetRelated(PERSONAL_DATA.NAME);
&fRelDisplayField.Visible = False;
This will hide only the employee’s name and other two names will remain visible. To hide other fields replace EMPL_ID in the above code with appropriate field.