Skip to Content

The main advantage of using  scripting in Adobe forms is that we can improve functionality and usability of forms.

With scripting we can get full control over forms at run time.

Benefits of Scripting:

  • Display/Hide form objects based on Conditions while generating the PDF Form

        (Examples: Hide /Display Table or Page in generated PDF Form, Adding Back ground colours based on conditions )

  • Automatic calculation in Forms.

        (Examples: Sum,Avg,Percentage, etc.. )

  • Data validations.

        (Check existence of Data using flag conditions..).

        All the Actions written in Script editor will be executed at the run time.


Where should we have to write our Script in Adobe Forms:

        We can create our forms using Transaction Code SFP (Form Builder).

        Go to Transaction Code  SFP.

        Enter the Form Name

        Click on Layout.

        Menu Bar –> Pallets –> Script Editor

Script Editor.png

   Select the Script Editor.

   Select an Object in the Layout.

   The Script editor will be displayed as shown below.

2015-07-15 16_17_01-Form Builder_ Change Form ZAF_FORM_CALC.png

Objects:

Objects are used to display the data in PDF Forms . Based on the data type we have to select Object from object library  and add it to layout.


Examples:  Amounts                   —->      Numeric Field / Decimal Field.      

                    Date/Time                —->      Date/Time Field.

                    Image                       —->      Image Field 

          


We can divide the objects into two categories.


  • Objects supported by Scripting Languages.
  • Objects not Supported by Scripting languages.

Objects in Adobe Forms.png

SAP Adobe forms Supports two scripting Languages.

  • FormCalc.
  • JavaScript.

A Form can use both languages in the form at the same time but we can’t use both scripting languages for single Object.

 

FormCalc:

         FormCalc is the default scripting language in Designer. It is an easy-to-use calculation language.

         FormCalc is the best choice to work on functions like (date and time, financial, arithmetic , logical etc.)


Advantages:

  • Built-in-Functions

        FormCalc has many built in Functions that covers a range of Areas including Finance, logic, dates/times and mathematics.


  • Performance

        FormCalc usually provides better performance than JavaScript because it executes calculations and validations more quickly.

        FormCalc can be the best choice in many situations, regardless of programming experience.


  • Easier to maintain

        This scripting language is very useful for Non Programmers who need to add calculations for their forms.

        It is very similar to the Language that we use in  Microsoft Office like Excel, Most FormCalc scripts are one line long.

Disadvantages:

  • FormCalc is not as powerful or as ubiquitous as Java Script.
  • It will not work for HTML Forms ..
  • Not very useful for creating sophisticated interactive and dynamic forms.

Examples:

      Go to SFP. Enter the Name of the Form and click on Create.

2015-07-15 17_24_00-Form Builder_ Entry Point.png

A pop will be displayed as shown below.Assign Interface for your form.

Interface is the place where we add code to fetch data from Data base tables.We can display the database

tables data by binding the Variables used in Interface  with the Objects in the Form(layout).

Context is the place where the connection is established between Interface and Form.

2015-07-15 17_27_53-.png

Click on Save.To design the layout(Form) click on Layout.

/wp-content/uploads/2015/07/layout_748385.png

Example 1:


     FomCalc:  Sum of Multiple Numbers (Sum)

Drag and Drop a  Numeric Field from Object Library into the layout as shown below.. Select the Field. Go to Script Editor.

In Script editor select the event (form ready). We can see the Header line which represents the path of the form.

Formcalc1.png

Headerline

data.#subform[0].NumericField1::ready:form – (FormCalc, client)

  • #subform[0]                     ——>   Name of the Subform
  • NumericField1                 ——>   Name of the Field on the Layout
  • ready:form                       ——>  Event under which the script added will be executed.
  • FormCalc, client               ——>  ( Scripting language,Run at ) 

   After adding FormCalc Script,Click on Save,Activate,Execute.

   Output:

Output1.png

    

Example 2:


    FormCalc: Annual Percentage of Loan(Apr)

  /wp-content/uploads/2015/07/211_748439.png

      Output:

   /wp-content/uploads/2015/07/212_748440.png

     Example 3:


     FormCalc : To display the Number in Word Format ( WordNum )

   /wp-content/uploads/2015/07/213_748441.png

    Output:

  /wp-content/uploads/2015/07/214_748472.png

       

Java Script:


Although FormCalc is default scripting language in designer, Java script is more ideal for creating sophisticated interactive and dynamic forms.

      

Advantages of Java script:

    

  • JavaScript is ubiquitous.

        JavaScript is a scripting standard that many programmers and designers already know.


  • Object -oriented.

         We can create JavaScript objects and custom functions, and use them through out Form.

         This function is not available in FormCalc.It has been scripting standard we can find sample scripts for almost we need to do.


  • Works for HTML and PDF Forms:

        We can use JavaScript for both PDF Forms and HTML Forms.



Disadvantages:

  • Performance

        Performance is lower than Formcalc.

Examples:

  JavaScript:  Hide/Display entire column in a table if the total sum of the column is ‘0’.

/wp-content/uploads/2015/07/221_748474.png

    In debugging we can see the Entire column with zero values

   /wp-content/uploads/2015/07/222_748487.png

   If the entire column doesn’t have zero values set a flag as shown below. The last column SI_AMT1 doesn’t have values.

   This flag value will be passed to  variable lv_si1 which is in our Java script.

   /wp-content/uploads/2015/07/223_748489.png

    Now the added java script under the event ( Form ready) will be executed and the entire column with zero’ will be removed from the table  in PDF Form  display.

    

     Output: We can see no entire column with zero’s in table  in Output PDF Form.

  /wp-content/uploads/2015/07/224_748494.png

Example 2 :


JavaScript:   Adding Back ground colors for the Table Fields and  field content should be displayed in Bold

  • In my table I have a Field POSID it the value of the field is Outcome then it should display all the data in  bold and back ground colors with following          properties.

    191,191,191

  • Else if POSID field value is Output then it should display background color with following properties .

    217,217,217. 

data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA.POSID::initialize – (JavaScript, client)


var numrows = xfa.resolveNodes(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[*]”).length;

var rowFillColor;

for (var i=0; i<numrows; i++)

{

posid = xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“].POSID”).rawValue;

if (posid == “Outcome”)

{

rowFillColor = “191,191,191”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).border.fill.color.value = rowFillColor;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).POSID.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).POST1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).T_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).F_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).S_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).TH_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).FO_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).FI_AMT1.font.weight = “bold”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).SI_AMT1.font.weight = “bold”; 

}

else if (posid == “Output”)

{

rowFillColor = “217,217,217”;

xfa.resolveNode(“data.Overal_Budget_Same_Currency.GT_TOT_BUD_SAMECUR.DATA[“+i+“]”).border.fill.color.value = rowFillColor;

}

delete outcome;

}

Output:

    All the Rows  which has  Outcome in first cell are displayed in Bold with the  assigned Back Ground Color.

    All the Rows  which has  Output     in first cell are displayed with assigned Back ground Color.

/wp-content/uploads/2015/07/225_748495.png

We have to decide the script language to be used in Adobe Forms, based on the Scenario/Functionality we need to achieve.

To report this post you need to login first.

10 Comments

You must be Logged on to comment or reply to a post.

  1. Shai Lapidot

    Very helpful information – Thank you.

    One comment on what you wrote:

    SAP Adobe forms Supports two scripting Languages.

    • FormCalc.
    • JavaScript.

    A Form can use both languages in the form at the same time but we can’t use both scripting languages for single Object.

    You can use both languages on a single object but not for the same event..

    (0) 
  2. Satya Lingolu

    Hi Suneel,

      Is it possible to use Javascript or FormCalc with offline or Non Interactive Adode forms ?

    We are generating PDF file by sending XSTRING data to ADS.

      I wanted to include some Javascript  before sending to ADS. So that ADS can give manipulated PDF with Javascript.

    Thanks,

    Regards,

    Satya Lingolu

    (0) 
    1. Suneel uggina Post author

      Hi Satya,

      Yes, it is possible to use javascript or Formcalc in offline or Non Interactive Forms.

      Step1:  Design the Form and place the Java script as per your requirement.          

      Step2 : Create the Report to call the Form.

      Please refer the code to call the Form through a Report.

      * Data declaration

      DATA: fm_name TYPE char30,                        ” Name of the Function Module

                 fp_docparams   TYPE    sfpdocparams,     ” Strcuture SFPDOCEPARAMS

                 fp_outparams   TYPE    sfpoutputparams.  ” Structure SFPOUTPUTPARAMS

      * Sets the Output parameters and opens the Spool Job

      CALL FUNCTION ‘FP_JOB_OPEN‘             ” Form Processing: Call Form

        CHANGING

          ie_outputparams = fp_outparams

        EXCEPTIONS

          cancel          = 1

          usage_error     = 2

          system_error    = 3

          internal_error  = 4

          OTHERS          = 5.

      IF sy-subrc <> 0.

      * Implement suitable error handling here

      ENDIF.

      *Get the name of the generated function module

      CALL FUNCTION ‘FP_FUNCTION_MODULE_NAME’

        EXPORTING

          i_name                     = ‘ZAF_FORM_CALC

      IMPORTING

         E_FUNCNAME                 = fm_name

      *   E_INTERFACE_TYPE           =

      *   EV_FUNCNAME_INBOUND        =

                .

      * Initiliase the language and Country values

      fp_docparams-langu   = ‘E’.

      fp_docparams-country = ‘US’.

      * Call generated Function Module

      CALL FUNCTION fm_name

        EXPORTING

          /1bcdwb/docparams = fp_docparams

      *    *    IMPORTING

      *     /1BCDWB/FORMOUTPUT       =

        EXCEPTIONS

          usage_error       = 1

          system_error      = 2

          internal_error    = 3.

      IF sy-subrc <> 0.

      *  <error handling>

      ENDIF.

      * Close the Spool Job.

      CALL FUNCTION ‘FP_JOB_CLOSE

      *    IMPORTING

      *     E_RESULT             =

        EXCEPTIONS

          usage_error           = 1

          system_error          = 2

          internal_error        = 3

          OTHERS               = 4.

      IF sy-subrc <> 0.

      * <error handling>

      ENDIF.

      Step 2: Execute the Report:

      Step3:  Select the Printer .Click on Print Preview.

      Step4: A pdf form will be displayed with manipulated Javascript/Form Calc as required.

      Generated PDF through a Report:

      /wp-content/uploads/2015/07/1111_750275.png

      (0) 
      1. Satya Lingolu

        Hi Suneel ,

        Thanks for the reply.

        I do not have form created in SFP transaction . I have xstring data which I will send it to ADS .

          ADS will process my data and give back PDF..

        Created using example programs FP_PDF_TEST_* from SAP.

        Now I would like to send Javascript to ADS along with XString, so that ADS process Javascript and gives new PDF.

        Thanking you,

        Regards,

        Satya

        (0) 
        1. Suneel uggina Post author

          Hi Satya,

          I don’t have idea on passing Java script to Xstring. if u got solution for your requirement could you please share it.

          Thanks & Regards,

          Suneel.Uggina

          (0) 
  3. Markus Meier

    For me the term “Objects not Supported by Scripting languages” is a bit confusing. It is possible to change the Color of a circle or to hide an image. These objects just don’t’ have events like “form ready” or “initialize”.

    (0) 
    1. Suneel uggina Post author

      Hi Meier

      Thanks for reading the blog. For the objects which i mentioned as ‘Objects not support Scripting’,I couldn’t found any  event to add script directly to that objects in the JavaScript Editor.We can add script to sub forms in which those objects are wrapped. Could you please elaborate how can we add script directly to Circle to get color dynamically.

      Thanks,

      Suneel Uggina.

      (0) 
      1. Markus Meier

        You are absolutely right. It is not possible to access a circle directly. But when I read the blog I got the impression that it is not possible at all to change the properties of a circle. And maybe other reader got the same wrong impression.

        What I meant is when we’ve got a Circle with the name CIRCLE1 inside a subform, then we can apply Coding to that subform like

        this.CIRCLE1.value.arc.fill.color.value = “255,0,0”;”

        to change the color to red.

        (0) 

Leave a Reply