Forum Discussion

NirajShah's avatar
NirajShah
Qrew Cadet
7 years ago

Rich Text Formula Field for Approve / Reject button and redirection

I'm trying to setup a rich text formula field that will allow the user to "approve" or "reject" a case. When the user chooses "approve", I'd like the button to add values to three fields on the current record, do a redirect to another record on a different table and update a value of a field on that table with a value from the original record, and then do another redirect back to the original record which has been updated with the initial edits. 
For "reject", only the values are added to three fields, and no redirect is needed.

Here is what I have so far:

var text approve =  URLRoot() & "db/" & [_DBID_] & "?a=API_EditRecord&apptoken=XXXXXX&rid=" & URLEncode ([Record ID#])

& "&_fid_xx=" & URLEncode("Approved")

& "&_fid_xx=" & URLEncode(Now())

& "&_fid_xx=" & URLEncode(User())

& "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a= API_EditRecord&apptoken=xxxxxxrid=" & URLEncode ([Related Store Item])

& "&_fid_xx=" & URLEncode([# of Features Requested])

& "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=dr&rid=" & [Record ID#]);

var text reject =   URLRoot() & "db/" & [_DBID_] & "?a=API_EditRecord&apptoken=XXXXXX&rid=" & URLEncode ([Record ID#])

& "&_fid_xx=" & URLEncode("Rejected")

& "&_fid_xx=" & URLEncode(Now())

& "&_fid_xx=" & URLEncode(User())

& "&z=" & Rurl();

Not sure where this is going wrong with the formatting or syntax errors.

21 Replies

  • Looks like bracketology to me, Niraj. Without diving too deep into your code, it appears that you've nested some URLEncodes inside each other and they're not all closing where you probably want them to.

    & "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=API_EditRecord&apptoken=xxxxxxx&rid=" & URLEncode ([Related Store Item])
    & "&_fid_14=" & URLEncode([# of Features Requested]));
    & URLEncode("&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=dr&rid=" & ([Record ID#]));

    The first URLEncode in that portion isn't closed until the end of the following line (could be intentional). The final line is short a close paren. You also have what looks like a stray ; at the line before the one you said is throwing the error.
  • FWIW,  I do not believe i have ever been successful building href type links which contain nested URL with redirects. You may need to settle for a formula URL field called Toggle Approval, or else two separate buttons, one of which would calculate to null at any time, and hence be blank.  ie if you have an IF that calculates to null if the record is already approved, the  it would be blank and the other button would display.

  • Thanks for all the feedback, I think I'm close to figuring this one out. Here's where I am now; 

    Here is the meat of my formula that I'd love feedback on. The version below was accepted by QB but for some reason fid 14 did not populate when the approve option was selected but did when reject was selected. As I commented below the redirect I have in the approve is not populating the target table and goes to an xml page (see below):

    This XML file does not appear to have any style information associated with it. The document tree is shown below.

    <qdbapi>
    <action>API_EditRecord</action>
    <errcode>0</errcode>
    <errtext>No error</errtext>
    <rid>1</rid>
    <num_fields_changed>0</num_fields_changed>
    <update_id>1545345688859</update_id>

    </qdbapi>

    var text approve =  URLRoot() & "db/" &  [_DBID_] & "?a=API_EditRecord&apptoken=xxxxxxxx&rid=" & URLEncode ([Record ID#])
    & "&_fid_12=" & URLEncode("Approved")
    & "&_fid_13=" & URLEncode(Now())
    & "&_fid_14=" & URLEncode(User())
    & "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=API_EditRecord&apptoken=xxxxxx&rid=" & URLEncode ([Related Store Item]))
    & "&_fid_14=" & URLEncode([# of Features Requested]);
    //the redirect is not populating the fields and when i add another redirect it comes back with a syntax error

    var text reject =   URLRoot() & "db/" & [_DBID_] & "?a=API_EditRecord&apptoken=xxxxxx&rid=" & URLEncode ([Record ID#])
    & "&_fid_12=" & URLEncode("Rejected")
    & "&_fid_13=" & URLEncode(Now())
    & "&_fid_14=" & URLEncode(User())
    & "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=dr&rid=" & ([Record ID#]));


    Funny thing is, when I remove the redirect from the approval, fid 14 is populating fine. 


    • AlexCertificati's avatar
      AlexCertificati
      Qrew Cadet
      I'm past the point of following exactly what you're trying to do here, but I notice that your approve code is defining fid_14 twice, is that intentional? You're trying to define 14 as the user field and then also do a redirect that subsequently defines it as something completely different?
    • NirajShah's avatar
      NirajShah
      Qrew Cadet
      Good point - and this may be where I am messing up.

      The first id 14 is being set as a user field in the current table. Then I am (attempting) to do a redirect to another table and record to define that tables fid 14 as a value from the first table.

      I hope that makes sense in all my madness!
    • AlexCertificati's avatar
      AlexCertificati
      Qrew Cadet
      Oh, that makes sense. I see it now, it seems syntactically sound! But I have never tried to do anything like that. Certainly your testing seems to indicate that that's the point at which the process breaks down. At some point you may have to take a pause on this approach and try one of Mark's alternate suggestions using methods other than one super-long url string.
  • Got it working, finally! Thanks for all the help!

     Here is the final code below. The first button edits the current record, redirects to another record in another table and edits that record, and then brings the user back to the current record they were on. 

    How can I mark this as solved or answered?

    var text approve =  URLRoot() & "db/" &  [_DBID_] & "?a=API_EditRecord&apptoken=xxxxxx&rid=" & URLEncode ([Record ID#])
    & "&_fid_12=" & URLEncode("Approved")
    & "&_fid_13=" & URLEncode(Now())
    & "&_fid_14=" & URLEncode(User())
    & "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=API_EditRecord&apptoken=xxxxxx&rid=" & URLEncode ([Related Store Item])
    & "&_fid_14=" & URLEncode([# of Features Requested]))
    & URLEncode("&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=dr&rid=" & ([Record ID#])));

    var text reject =   URLRoot() & "db/" & [_DBID_] & "?a=API_EditRecord&apptoken=xxxxx&rid=" & URLEncode ([Record ID#])
    & "&_fid_12=" & URLEncode("Rejected")
    & "&_fid_13=" & URLEncode(Now())
    & "&_fid_14=" & URLEncode(User())
    & "&rdr=" & URLEncode(URLRoot() & "db/xxxxx?a=dr&rid=" & ([Record ID#]));
    • AlexCertificati's avatar
      AlexCertificati
      Qrew Cadet
      So it was another errant bracket. Damn. Missed it. Good job.

      As far as marking answered, the community managers take care of that periodically.