Expand my Community achievements bar.

Guidelines for the Responsible Use of Generative AI in the Experience Cloud Community.

Run javascript in adobe live cycle work bench

Avatar

Former Community Member

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

6 Replies

Avatar

Level 10

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

Jasmin

Avatar

Former Community Member

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.

Avatar

Level 7

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

Avatar

Former Community Member

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.

Avatar

Former Community Member

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

Avatar

Former Community Member

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