SO Screen Challenge Results

In an earlier article, I challenged my readers to come up with the widest variety of solutions to a problem I posed, and discuss what I thought was the best solution. I apologize that it took me so long to get back to this, but I have been ridiculously busy lately. Anyway, on to the “solutions.”

  1. Use ECM Auditing to discover the problem users and educate them not to make this mistake again. This was suggested by Scott and seconded by Stephen. While I am committed to user education, I would prefer to make it impossible to make a mistake than trust someone not to make them.
  2. Use Form Customizer (FCUST), which Andrew suggested. However, after I investigated this, I found out that you cannot disable any controls, only make them invisible which was one of the prerequisites.
  3. Use FastForms to deal with this. However, you cannot lock a control with FastForms either. One idea I tested was to create a pull down control over the M2M Terms pull down making it impossible to click on the original. The FastForms pull down would be locked. However, this is not fool proof because a determined user could tab into the underlying Terms pull down manually and change it. I also tried to draw a FastForms frame over it to block the pull down, but wasn’t successful.
  4. Events and Actions. There may be a way to do this via E & A, but I couldn’t figure out how to do it. I’ll be writing an article soon on Events and Actions and the pitfalls associated with it.
  5. There are several different ways to solve this via Visual Basic for Applications (VBA). One could use VBA to draw an object, such as a pull down in an manner similar to the FastForms solution, over the original pull down making it impossible to click on. However, this solution has the same problem as number 3.
  6. Another VBA method involves using the programatic change event on the pull down itself. You could then pop up a warning box telling the user that they are not allowed to change the value.
  7. Yet another VBA method involves gotfocus and setfocus. You could simply write code for the gotfocus event of the terms pull down that immediately sets the focus to the next control in the tab order. This would effectively keep the users from editing it.
  8. Use a SQL Script. This is the most fool proof method as far as I am concerned as a savy user could disable VBA, FastForms, and even Events and Actions on their local machine. The SQL script would be assigned to a nightly job on your server which detects values in your Sales Order Master (SOMAST) table that are inconsistent with your Customer Table (SLCDPM). If it finds any, it would e-mail the manager in charge to fix that error. This solution could also be used with any of the above as a back up as well.
  9. Simply use VBA to lock the control on the initialization of the form (INIT). This was the method I originally chose, and the method first offered by Dennis Boyle. However, our code varies slightly. Mine is shown below.
    If Trim(Eval("FDecrypt(oUser.fcUName, oSession.cEncryptKey)")) = "D.STEIN"  Then
      ThisForm.m2mpageframe1.page3.cbofprodcl.Enabled = True
      ThisForm.m2mpageframe1.page3.cbofprodcl.Enabled = False
    End If

    My hope is that this little exercise will illustrate for you that there are almost always several solutions to a problem, and that all of them have their pros and cons. Now that I’ve listed mine, do any of you have any other suggestions for this problem or challenges you’d like to submit for further “contests?”

Leave a Reply




You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>