March 17, 200421 yr HI I have a separate search screen and the problem is that if you do a search and there are no matches you get a dialog box with "Modify Find", "Continue" and "Cancel" options. If you click cancel the search page displays an entry which can be editted if someone thinks they are still in the search layout. How can I make this cancel take them to another layout or run a script which goes back to finding. Thanks Simon Version: Developer v6 Platform: Windows 2000
March 17, 200421 yr Hi Simon, First you'll need to include the script step 'Set Error Capture [On]' prior to the Perform Find[ ] step in your script. That will suppress the dialog. Then, immediately after the Perform Find step, you'll need to check for error code 401 (which indicates that there were no matching records). If error 401 is returned, you'll then be able to have your script gracefully return users whence they came. Eg: Perform Find[ ] If ["Status(CurrentError) = 401"] Show Message ["your custom error message here"] Go to Layout ["some other layout"] Exit Script End If Exactly what actions you include in between the If[ ] and End If is up to you...
March 17, 200421 yr Author Thats exactly what I want - however how do I revert to modify last find. As it I add this (modify last find) into the If[] if the next search is not in the database it doesn't show a custom message and goes back to the normal "modify find" or "cancel" dialog. Thanks Simon
March 17, 200421 yr Author This is the code I have Set Error Capture[On)[ Freeze Window Go to Layout ["Find"] Refresh Window [] Go to Field[select/perform, "SurName"] Toggle Status Area[Hide, lock] Enter Find Mode[Pause] Perform Find[Replace found set] If ["Status(CurrentError) = 401"] Show Message ["Not found"] Perform Script ["GoToFind"] - THAT IS THE NAME OF THS SCRIPT Exit Script End If Go to Layout["ContactsList1"] Toggle Status Ares[show, lock] The problem is as I said I want to beable to perform "modify last find" and also the line Go to Field [select/Perform, "SurName"] doesn't work when it performs the script in the IF[] it seems to go to the field above it that being FirstName?? Thanks Simon
March 17, 200421 yr Hi, I suggest you try re-arranging the script more along the lines of the following: Set Error Capture[On] Go to Layout ["Find"] Toggle Status Area[Hide, lock] Loop Enter Find Mode[] Go to Field[select/perform, "SurName"] Pause/Resume Script [] Perform Find[Replace found set] Exit Loop If ["not Status(CurrentError) = 401"] Show Message ["Not found" buttons: "Try Again", "Cancel"] If ["Status(CurrentMessageChoice) = 2"] Go to Layout["original layout"] Toggle Status Ares[show, lock] Exit Script End If End Loop Go to Layout["ContactsList1"] Toggle Status Ares[show, lock] There are many possible permutations, but the above may give you some more ideas to work with.
March 17, 200421 yr Move the Enter Find Mode [ ] step above the Loop step, add an Else step after the Exit Script step and a Modify Last Find step after the Else step. If the cursor is going to the 'wrong' field, then your field order is probably not the way you think it is. Go into layout mode and verify that the field next to the Surname label is in fact the Surname field.
March 17, 200421 yr Ray-> Your method uses If ["Status(CurrentError) = 401"]. I've been using If ["Status(CurrentFoundCount) = 0"]. Is there an advantage to referencing the CurrentError instead of the CurrentFoundCount? TIA, Sam Version: v7.x Platform: Mac OS X Panther
March 17, 200421 yr I use If [status(CurrentError)]. I think it's all up to preference, and I always prefer to use a boolean argument, if possible. If you perform a find and there is an error, either no criteria was entered or no records were found. I respond to both situations in the same way, and both errors are caught with the boolean expression. If you wanted to be more anal about error-checking, then you could use 400 and 401 or 400 and Status(CurrentFoundCount). But I would say it's all up to your programming style.
March 17, 200421 yr Author I had always used If ["Status(CurrentFoundCount) = 0"] statement aswell. In my opinion it is a bit neater. I've actually come up with another way to do the modify find last which I'll post up but thanks for the input -Queue- Simon
March 18, 200421 yr As Queue says, the tests Status(CurrentError) = 401 and Status(CurrentFoundCount) = 0 are functionally interchangeable. Both expressions produce a boolean result so there's an element of personal preference involved. Although I have had occasion to use both, I tend to favour the Current Error check in most situations because: a) I'm most often using it in a sequence along with other error checks so I'm already 'thinking in those terms', and : It's marginally shorter to type.
March 18, 200421 yr I think defensively: there *may* be a find error that returns the whole found set, in which case a check on FoundCount won't work as expected. (I don't know if there really is such an error condition, but that's the way I think.)
Create an account or sign in to comment