6 Replies Latest reply on Nov 9, 2010 4:52 AM by Mattmackenzie

    Run javascript in adobe live cycle work bench

    Abhishek110486 Level 1

      Hi All,

       

      Is there anyway we can execute the javascript in workbench?

       

      or is there any method to convert javascript to adobe script(execute script activity)?

       

      Actually i have written javascript in live cycle designer while pdf designing. now i want the same javascript at server end.

       

      Kindly someone help me to get this functionality.

       

      Regards

      Abhishek

        • 1. Re: Run javascript in adobe live cycle work bench
          Jasmin Charbonneau Level 4

          The Execute Script service will run code in Java. This is not Adobe script.

           

          Jasmin

          • 2. Re: Run javascript in adobe live cycle work bench
            Abhishek110486 Level 1

            Hi Jasmin,

             

            Thanks for your quick reply.

             

            I have a javascript which generate sha1hash output for input string.

             

            I am getting an error while executing it in workbench.

             

            If i want to use same algorithm in execute script how can i able to use it.

             

            How should i convert this code in java?

             

            Please find the javascript below for sha1hash algorithm

             

            function sha1Hash(msg)
            {
                // constants [§4.2.1]
                var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];

             


                // PREPROCESSING

                msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1]

             

                // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]
                var l = msg.length/4 + 2;  // length (in 32-bit integers) of msg + ‘1’ + appended length
                var N = Math.ceil(l/16);   // number of 16-integer-blocks required to hold 'l' ints
                var M = new Array(N);
                for (var i=0; i<N; i++) {
                    M[i] = new Array(16);
                    for (var j=0; j<16; j++) {  // encode 4 chars per integer, big-endian encoding
                        M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) |
                                  (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
                    }
                }
                // add length (in bits) into final pair of 32-bit integers (big-endian) [5.1.1]
                // note: most significant word would be (len-1)*8 >>> 32, but since JS converts
                // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators
                M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14])
                M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;

             

                // set initial hash value [§5.3.1]
                var H0 = 0x67452301;
                var H1 = 0xefcdab89;
                var H2 = 0x98badcfe;
                var H3 = 0x10325476;
                var H4 = 0xc3d2e1f0;

             

                // HASH COMPUTATION [§6.1.2]

             

                var W = new Array(80); var a, b, c, d, e;
                for (var i=0; i<N; i++) {

             

                    // 1 - prepare message schedule 'W'
                    for (var t=0;  t<16; t++) W[t] = M[i][t];
                    for (var t=16; t<80; t++) W[t] = ROTL(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);

             

                    // 2 - initialise five working variables a, b, c, d, e with previous hash value
                    a = H0; b = H1; c = H2; d = H3; e = H4;

             

                    // 3 - main loop
                    for (var t=0; t<80; t++) {
                        var s = Math.floor(t/20); // seq for blocks of 'f' functions and 'K' constants
                        var T = (ROTL(a,5) + f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
                        e = d;
                        d = c;
                        c = ROTL(b, 30);
                        b = a;
                        a = T;
                    }

             

                    // 4 - compute the new intermediate hash value
                    H0 = (H0+a) & 0xffffffff;  // note 'addition modulo 2^32'
                    H1 = (H1+b) & 0xffffffff;
                    H2 = (H2+c) & 0xffffffff;
                    H3 = (H3+d) & 0xffffffff;
                    H4 = (H4+e) & 0xffffffff;
                }

             

                return H0.toHexStr() + H1.toHexStr() + H2.toHexStr() + H3.toHexStr() + H4.toHexStr();
            }

             

            //
            // function 'f' [§4.1.1]
            //
            function f(s, x, y, z)
            {
                switch (s) {
                case 0: return (x & y) ^ (~x & z);           // Ch()
                case 1: return x ^ y ^ z;                    // Parity()
                case 2: return (x & y) ^ (x & z) ^ (y & z);  // Maj()
                case 3: return x ^ y ^ z;                    // Parity()
                }
            }

             

            //
            // rotate left (circular left shift) value x by n positions [§3.2.5]
            //
            function ROTL(x, n)
            {
                return (x<<n) | (x>>>(32-n));
            }

             

            //
            // extend Number class with a tailored hex-string method
            //   (note toString(16) is implementation-dependant, and
            //   in IE returns signed numbers when used on full words)
            //
            Number.prototype.toHexStr = function()
            {
                var s="", v;
                for (var i=7; i>=0; i--) { v = (this>>>(i*4)) & 0xf; s += v.toString(16); }
                return s;
            }

             

            Please reply for this

            Thanks in advance.

            • 3. Re: Run javascript in adobe live cycle work bench
              Mrsunilg Level 1

              Hi,

               

              I am some similar type of issue. Can i access control of the form from execute script on workbench.

               

              Like  i want to hide a button on form before rendering it to client's browser. let me know how can we access a perticular control on form before rendering it

               

               

               

              --

              Thanks & Regards

               

              Sunil Gupta

              Senior System Engineer

              Infosys Technologies Ltd | Hyderabad, India

              Mob:+ 91 9705666502

              • 4. Re: Run javascript in adobe live cycle work bench
                Mattmackenzie Level 1

                I don't believe that the Execute Script service will execute JavaScript.  I'm fairly certain it is actually Java BeanShell.

                 

                If you were really keen on executing JS, you could probably develop a custom component that executed JS, but you may be better off porting your code to regular Java.

                • 5. Re: Run javascript in adobe live cycle work bench
                  Abhishek110486 Level 1

                  Hi Matt,

                   

                  Thanks for your suggestions

                   

                  How can i create cusom component in live cycle workbench which execute javascript?

                   

                  I have read following link which help to create your own activity in workbench but i have no idea to execute javascript in java too

                   

                  http://www.adobe.com/devnet/livecycle/articles/dsc_development.html

                   

                  Please send me some important link to execute javascript in java or in adobe live cycle

                  • 6. Re: Run javascript in adobe live cycle work bench
                    Mattmackenzie Level 1

                    Hello,

                     

                    I would probably start by getting familiar with DSC development, the link you point to will help.  A DSC is basically just a POJO (plain old java object) wrapped with some special packaging that allows it to be deployed to the LC DSC container.  Once you have that sorted, you could use a Java based JS interpreter like Mozilla Rhino (http://www.mozilla.org/rhino/) within the DSC to interpret the JS that you would assign to the DSC in your process.

                     

                    Alternatively, if this is more or less a localized requirement to execute some JS, and you won't be doing it time and time again... I'd suggest just porting your Javascript to pure Java, and run it via the Execute Script service, or even create a DSC that specifically serves the same purpose as your script does.  This approach will perform better at scale as well.

                     

                    Good luck, and keep us apprised of your progress.  There are lots of folks watching these forms that can probably help you out with DSC development questions.

                     

                    -matt