14 Replies Latest reply on Feb 12, 2007 10:13 PM by HowardTreisman

    Script use of patExecContext()

      I'm attempting to use patExecContext.getProcessDataDocumentValue() in a script. The input argument I'm using is simply the root node of the init_form. This method is returning null, so I assume I have the argument wrong.

      What should the input arg look like to return the entire input Document?
        • 1. Re: Script use of patExecContext()
          HowardTreisman Level 1
          Can you post the exact code you're using - it's a little hard to visualize your code from your description.

          • 2. Re: Script use of patExecContext()
            Level 1
            Here's the relevant part of the script:

            import com.adobe.workflow.pat.service.PATExecutionContext;
            import com.adobe.idp.Document;

            Document doc = patExecContext.getProcessDataDocumentValue("/inputform/form-data/data/xdp/datasets/data/p urchaseOrder");

            I've tried as many variations on the arguments string as I can think of. The root element of the document is the purchaseOrder.

            The problem I'm really trying to solve is that the PO has an unbounded collection of lineItems, and I want to iterate over that collection to calculate a subtotal. I was thinking I could make a DOM from the Document and then do whatever I need to with the DOM, since I already have experience with that.

            Any and all suggestions welcome.

            -- bill
            • 3. Re: Script use of patExecContext()
              HowardTreisman Level 1
              Hi Bill
              getProcessDataDocumentValue only works on a Document type of variable. It looks like your "inputform" variable is of type "form", so this is never going work. Also, you need to prefix all process variables with "/process_data/" i.e. "/process_data/inputform/form-data/..." Non XML variables require an additional ampersand i.e. "/process_data/@myint".

              I'm pretty sure that if you call getProcessDataValue(/process_data/inputform/form-data/data/xdp/datasets/data/purchaseOrde r") you'll get a DOM node, and from there you should be able to navigate through the rest of the document. (I don't have the environment set up on my current machine to validate this - let me know if you have problems.)

              Good luck...

              Howard Treisman
              • 4. Re: Script use of patExecContext()
                Level 1
                In my case, getProcessDataValue() returns an org.w3c.doc.Element. I can get everywhere I need to go from there.

                Many thanks Howard --
                -- bill
                • 5. Re: Script use of patExecContext()
                  Hi all,

                  I have add these code in script component ,and when I test the code ,it can't print anything out.Could someone tell me why?

                  String teststr = patExecContext.getProcessDataStringValue("/process_data/@status");

                  Thanks a lot!
                  • 6. Re: Script use of patExecContext()
                    HowardTreisman Level 1
                    print() isn't a valid java command. Try System.out.println(...);

                    One of the advantages of building a custom QPAC rather than using the Script QPAC is you get to compile it, which finds errors like this :-)

                    • 7. Re: Script use of patExecContext()
                      Level 1
                      Hi Howard,

                      Thanks for your answer.But I have tested that "print" can work and I found that the method "getProcessDataStringValue" in my code can not work.If I add the first line ,nothing printed out and If I commented it, "aa" was printed.

                      So ,Could anyone tell me how to make "getProcessDataStringValue" work?
                      • 8. Re: Script use of patExecContext()
                        HowardTreisman Level 1
                        Woops, sorry. I wasn't aware of print(). As you can see, I'm not an expert on the Script qpac :-)
                        One problem you might have is that @status is an integer, and you're trying to get it as a string. I would hope that the script qpac would cast it for you, but maybe not. Perhaps try getProcessIntValue()?

                        • 9. Re: Script use of patExecContext()
                          Is it possible to use patExecContext.getProcessDataStringValue() in a script QPAC to read the value from a form field? My form has a schema, so the call would look similar to this:

                          import com.adobe.workflow.pat.service.*;
                          import com.adobe.idp.Document;

                          System.out.println("MyField: " +
                          patExecContext.getProcessDataStringValue("/process_data/formvar/form-data/data/xdp/dataset s/data/root/UserInfo/txtName"));

                          I have tried many combinations but cannot get it to work. Do I have to get the org.w3c.doc.Element and traverse the DOM to get my value?

                          • 10. Re: Script use of patExecContext()
                            HowardTreisman Level 1
                            That looks like it should work.
                            Try the same expression in the SetValue QPAC, making sure that the expression is correct and that the element has a value. You can use the VariableLogger QPAC (http://www.avoka.com/avoka/qpac_library.shtml) to verify that you're getting the value you expect.
                            • 11. Re: Script use of patExecContext()
                              Level 1
                              What about
                              void setProcessDataListValue(java.lang.String aPathLocation, java.util.List aVal) method ?

                              Can I set a repeating section value in the form by using that method. I thought to give the path location of the repeating field like :

                              /process_data/form/form-data/data/xdp/datasets/data/SATalepFormu/DetayliAciklama/UrunBilgi leri

                              and created an example List object like

                              ArrayList alist=new ArrayList();

                              but I get ClassCastException error. List is an interface and extended by the ArrayList class. Why do I get this ? Isn't it possible to set repeating section values ?
                              • 12. Re: Script use of patExecContext()
                                HowardTreisman Level 1
                                Hi Guvenc

                                LiveCycle 7.2 introduced the concept of Lists and Maps. These are separate types of variables to repeating sections within the XML of a form. It would be nice if you could use them interchangably, but you can't.

                                Setting repeating sections in a Form is quite difficult, requiring quite detailed knowledge of the internals of Form Variables. What is it that you're trying to achieve, there might be an easier way to do it?

                                Setting a repeating section in an XML variable is a little easier, but you still basically need to get an org.w3c.Document object, and manipulate it using the Document apis. Fiddly.

                                Let me know what you're tyring to achieve, I let you know if I can think of a simple way of doing it.

                                • 13. Re: Script use of patExecContext()
                                  Level 1
                                  I am just trying to set the repeating fields in my form. Acrobat Reader does not let using web services(requires reader extensions) so I try to find alternative ways of importing data into my form. I can set some fields by using setProcessDataStringValue method. I just wonder is there a method in the api to set repeating fields in the form.
                                  • 14. Re: Script use of patExecContext()
                                    HowardTreisman Level 1
                                    Where is the data coming from that you're trying to insert into the form? If it's coming from a SQL query, our SQLPlus qpac will correctly do this. If it's just some data you want to set, a special QPAC would probably be the best solution. We can talk about this separately if you want: htreisman-at-avoka.com