Hide button on screen based on group/role

 8 Replies
 0 Subscribed to this topic
 12 Subscribed to this forum
Sort:
Author
Messages
Rudy
Basic Member
Posts: 5
Basic Member
    Need some assistance. I have a button on the HR11 screen that will launch a webpage. This works fine. But, we are rolling out in a phased approach to 40+ offices, 1-2 at a time and the powers that be do not want anyone seeing the button until it is their turn to go live. We are talking about 2-4 people per branch. Using the hammer approach I was able to get the code working below but it requires me to add user IDs every time a new office goes live. This requires a lot of extra red tape going thru QA and production control not to mention the extra coding on 5 screens that we have the button on.
    I am looking for a way to put the users in a role or group and be able to authenticate them in that role or group, but can’t seem to find a way. If I use portalWnd.oUserProfile.getAttribute("???") for group or role then it brings back only one out of the several that they are in. So it is not a guarantee that I get the group that I would use for the button group/role.

    Questions: 1) is there any way to loop through all of their groups/roles to match a particular one. 2) Is there a better mousetrap than the one I am using below?
    Thanks, Rudy

    Code:
    function FORM_OnAfterDataInit()
    {var str1="UserID1,UserID2,UserID3,UserID3 ";
    var UserId=portalWnd.oUserProfile.getAttribute("id"); //gets logged in user ID //alert(portalWnd.oUserProfile.getAttribute("group"));
    //UserId="u3lxd";
    var iOk=str1.indexOf(UserId); //searches for a string w/in a string
    if (iOk==-1)
    {
    var objButton = lawForm.getFormElement("push11");
    objButton.value=""; //hides button on screen
    }
    }


    David Williams
    Veteran Member
    Posts: 1127
    Veteran Member
      Can you add a Service to their Lawson Security "Manage Identies" (like ProductLine_REQUESTER) and do a quick look up to see if the user logged in has the value that indicates they should see the button?
      David Williams
      John Henley
      Posts: 3353
        What about their Portal Role?
        Thanks for using the LawsonGuru.com forums!
        John
        Rudy
        Basic Member
        Posts: 5
        Basic Member
          When I add the below code, i get a blank value. I went in to the manage identities and did not see anywhere to add anything to ProductLine_REQUESTER.

          var ValidUser=portalWnd.oUserProfile.getAttribute("ProductLine_REQUESTER");
          alert(ValidUser);
          Rudy
          Basic Member
          Posts: 5
          Basic Member
            Also, do you have any idea where I can get a list of all of the elements that I can bring back using: portalWnd.oUserProfile.getAttribute("??????");
            Gary Davies
            Veteran Member
            Posts: 248
            Veteran Member
              Hi Rudy, still struggling with this one huh? Do not try to add anything to the REQUESTER agent. That is predefined for use in RSS. The suggestion was to create a new agent similar to that and populate it. Not practical because you will have to maintain the values when it is already there in your groups.

              Did you try what I suggested previously of calling servlet/Profile and parsing the group attributes out of the XML returned?
              Rudy
              Basic Member
              Posts: 5
              Basic Member
                Did you try what I suggested previously of calling servlet/Profile and parsing the group attributes out of the XML returned?

                No. was unable to find any examples to get a start. Thanks.
                Rudy
                Basic Member
                Posts: 5
                Basic Member
                  Finally got it to work by parsing out the XML data from the servlet/Profile? servlet as mentioned above by Gary. I am new to JS so the code could probably be a little tighter.
                  function FORM_OnAfterDataInit()
                  {
                  var bOk=FindGroup();
                  if (bOk==false)
                  {
                  var objButton = lawForm.getFormElement("push11");
                  objButton.value="";

                  }
                  }

                  function FindGroup()
                  {
                  var sProdLine=portalWnd.oUserProfile.getAttribute("productline");
                  var bDisplay = false
                  var sTarget_Group="myGroup"
                  var sServer="";
                  var sDomain="test.local";

                  switch (sProdLine) {
                  case "PROD9":
                  sDomain="company.net";
                  break;
                  case "QA9":
                  sServer="qa-";
                  break;
                  default:
                  sServer="dev-";
                  }

                  var sDME="http://"+sServer+"hrportal."+sDomain+"/servlet/Profile?";
                  var vDMEInfo = portalWnd.httpRequest(sDME);
                  var oRecs = vDMEInfo.getElementsByTagName("ATTR");

                  //alert("length=" + oRecs.length);
                  for (var i = 0; i < oRecs.length; i++) {
                  if (oRecs.getAttribute("value")==sTarget_Group)
                  {
                  bDisplay=true
                  //alert(i+"--"+oRecs.getAttribute("name")+"="+oRecs.getAttribute("value"));
                  }
                  }

                  return (bDisplay);
                  }
                  David Williams
                  Veteran Member
                  Posts: 1127
                  Veteran Member
                    This actually met a need I had so I appreciate you figuring it out. I found that I had to revise your script to indicate the record number but otherwise it worked great.

                    // if (oRecs[i].getAttribute("value")==sTarget_Group)

                    Thanks
                    David Williams