<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/discussions/f/user-interface/13397/sail-help---invoice-style-editable-data-grid</link><description>Hi Everyone, 
 I am trying to create an invoice style editable grid (see image below). I can find SAIL examples (in Appian documentation) on how to create editable grids but I&amp;#39;m still very new to SAIL and struggling with aspects such as saving grid data</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/61183?ContentTypeID=1</link><pubDate>Thu, 04 Oct 2018 20:06:13 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:729e897e-41b0-4347-9a5a-377ad88dae7a</guid><dc:creator>Mike Lasutschinkow</dc:creator><description>&lt;p&gt;If the data is coming from a query rather than local data, you can use a query like the following:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;local!data: a!queryEntity(
  entity: cons!MY_ENTITY,
  query: a!query(...)
).data&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;local!data:rule!myQuery().data&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/61162?ContentTypeID=1</link><pubDate>Thu, 04 Oct 2018 15:59:38 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:ee2789e7-9d3e-408f-a526-2cd1b72c7146</guid><dc:creator>susana197</dc:creator><description>Thanks so very much.  Please how can I format the top section if the data is coming from a query? (Not a local variables).&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/61133?ContentTypeID=1</link><pubDate>Thu, 04 Oct 2018 07:45:18 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:87e3f339-c496-4729-af67-58aa27e03e58</guid><dc:creator>swarajd0001</dc:creator><description>&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;load(
  /* 
* local!data is provided in this recipe as a way to start with hard-coded 
* data. However, this data is identical to the data created from the entity-backed
* tutorial. Replace the hard-coded data with a query to the data  store
* entity and all of the data records from the tutorial will appear.
*
* To replace this data with your own, replace (ctrl+H or cmd+H) all references to
* Local!data with your data source, either via rule input or local variable.
*/

    Local!data: {
      {
        id: 1,
        Item: &amp;quot;Dell laptop&amp;quot;,
        Quantity: 2,
        Amount: 865.00,
        Total: _
      },
      {
        id: 2,
        Item: &amp;quot;Air Mouse&amp;quot;,
        Quantity: 3,
        Amount: 43.00,
        Total: _
      },
      {
        id: 3,
        Item: &amp;quot;HDMI Converter&amp;quot;,
        Quantity: 1,
        Amount: 75.00,
        Total: _
      },
      
    },
    a!formLayout(
      label: &amp;quot; Invoice Style Editable Data Grid&amp;quot;,
      contents: {
        a!gridLayout(
          totalCount: count(
            Local!data
          ),
          headerCells: {
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            /* For the &amp;quot;Remove&amp;quot; column */
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            )
          },
          /* Only needed when some columns need to be narrow */
          columnConfigs: {
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;ICON&amp;quot;
            )
          },
          /*
* a!forEach() will take local!data and used that data to loop through an
* expression that creates each row. 
*
* When modifying the recipe to work with your data, you only need to change:
* 1.) the number of fields in each row
* 2.) the types of fields for each column (i.e. a!textField() for text data elements)
* 3.) the fv!item elements. For example fv!item.Item would change to fv!item.yourdata
*/
          rows: 
          
          {
            a!gridRowLayout(
              contents: { 
                a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Item&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),
          a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Quantity&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),  a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Amount&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),  a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Total&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ), 
        a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Remove&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        )
              
              
              }
           ),
            a!forEach(
            items: Local!data,
            expression:
           { 
             
            a!gridRowLayout(
              contents: {
                /* For the First Name Column*/
                a!textField(
                  /* Labels are not visible in grid cells but are necessary to meet accessibility requirements */
                  label: &amp;quot;Item &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Item,
                  saveInto: fv!item.Item,
                  required: true
                ),
                /* For the Last Name Column*/
                a!textField(
                  label: &amp;quot;Quantity &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Quantity,
                  saveInto: fv!item.Quantity,
                  required: true
                ),
                /* For the Amount Column*/
                a!textField(
                  label: &amp;quot;Amount &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Amount,
                  saveInto: fv!item.Amount,
                  required: true
                ),
                /* For the Total Column*/
                a!textField(
                  label: &amp;quot;Total &amp;quot; &amp;amp; fv!index,
                  readOnly: true(),
                  value: if(
                    or(
                      isnull(
                        fv!item.Quantity
                      ),
                      isnull(
                        fv!item.Amount
                      )
                    ),
                    fv!item.Total,
                    product(
                      fv!item.Amount,
                      fv!item.Quantity
                    )
                  ),
                  saveInto: fv!item.Total,
                  required: true
                ),
                /* For the Phone Number Column*/
                /* For the Removal Column*/
                a!imageField(
                  label: &amp;quot;delete &amp;quot; &amp;amp; fv!index,
                  images: a!documentImage(
                    document: a!iconIndicator(
                      &amp;quot;REMOVE&amp;quot;
                    ),
                    altText: &amp;quot;Remove Item&amp;quot;,
                    caption: &amp;quot;Remove &amp;quot; &amp;amp; fv!item.Item &amp;amp; &amp;quot; &amp;quot; &amp;amp; fv!item.Quantity,
                    link: a!dynamicLink(
                      value: fv!index,
                      saveInto: {
                        a!save(
                          Local!data,
                          remove(
                            Local!data,
                            save!value
                          )
                        )
                      }
                    )
                  ),
                  size: &amp;quot;ICON&amp;quot;
                )
              },
              id: fv!index
            )}
          )},
          addRowlink: a!dynamicLink(
            label: &amp;quot;Add Item&amp;quot;,
            /*
* For your use case, set the value to a blank instance of your CDT using
* the type constructor, e.g. type!data(). Only specify the field
* if you want to give it a default value e.g. startDate: today()+1.
*/
            value: {
              startDate: today() + 1
            },
            saveInto: {
              a!save(
                Local!data,
                append(
                  Local!data,
                  save!value
                )
              )
            }
          )
        ),
        a!textField(
          readOnly: true
        ),
        
       
        a!gridField(
          label: &amp;quot;&amp;quot;,
          totalCount: count(
            Local!data
          ),
          columns: {
            a!gridTextColumn(
              label: &amp;quot;Total Count&amp;quot;,
              data: &amp;quot;&amp;quot;,
              alignment: &amp;quot;LEFT&amp;quot;
            ),
            a!gridTextColumn(
              label: sum(
                        a!forEach(
                          items: Local!data,
                          expression: if(
                            or(
                              rule!APN_isBlank(
                                fv!item.Quantity
                              ),
                              rule!APN_isBlank(
                                fv!item.Amount
                              )
                            ),
                            fv!item.Total,
                            product(
                              fv!item.Quantity,
                              fv!item.Amount
                            )
                          )
                        )
                      ),
              
              alignment: &amp;quot;LEFT&amp;quot;
            ),
            
          },
          value: a!pagingInfo(
            startIndex: 1,
            batchSize: 5,
            sort: a!sortInfo(
              field: &amp;quot;name&amp;quot;,
              ascending: true
            )
          )
        )
      },
      buttons: a!buttonLayout(
        primaryButtons: a!buttonWidgetSubmit(
          label: &amp;quot;Submit&amp;quot;
        )
      )
    )
  
)&lt;/pre&gt;Hi susana..&lt;/p&gt;
&lt;p&gt;please find the the below code ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;load(
  /* 
* local!data is provided in this recipe as a way to start with hard-coded 
* data. However, this data is identical to the data created from the entity-backed
* tutorial. Replace the hard-coded data with a query to the data  store
* entity and all of the data records from the tutorial will appear.
*
* To replace this data with your own, replace (ctrl+H or cmd+H) all references to
* Local!data with your data source, either via rule input or local variable.
*/

    Local!data: {
      {
        id: 1,
        Item: &amp;quot;Dell laptop&amp;quot;,
        Quantity: 2,
        Amount: 865.00,
        Total: _
      },
      {
        id: 2,
        Item: &amp;quot;Air Mouse&amp;quot;,
        Quantity: 3,
        Amount: 43.00,
        Total: _
      },
      {
        id: 3,
        Item: &amp;quot;HDMI Converter&amp;quot;,
        Quantity: 1,
        Amount: 75.00,
        Total: _
      },
      
    },
    a!formLayout(
      label: &amp;quot; Invoice Style Editable Data Grid&amp;quot;,
      contents: {
        a!gridLayout(
          totalCount: count(
            Local!data
          ),
          headerCells: {
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            ),
            /* For the &amp;quot;Remove&amp;quot; column */
            a!gridLayoutHeaderCell(
              label: &amp;quot;&amp;quot;
            )
          },
          /* Only needed when some columns need to be narrow */
          columnConfigs: {
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;DISTRIBUTE&amp;quot;,
              weight: 3
            ),
            a!gridLayoutColumnConfig(
              width: &amp;quot;ICON&amp;quot;
            )
          },
          /*
* a!forEach() will take local!data and used that data to loop through an
* expression that creates each row. 
*
* When modifying the recipe to work with your data, you only need to change:
* 1.) the number of fields in each row
* 2.) the types of fields for each column (i.e. a!textField() for text data elements)
* 3.) the fv!item elements. For example fv!item.Item would change to fv!item.yourdata
*/
          rows: 
          
          {
            a!gridRowLayout(
              contents: { 
                a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;First name&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),
          a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Item&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),  a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Quantity&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),  a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Amount&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        ),  a!richTextDisplayField(
          value: a!richTextItem(
            text: &amp;quot;Total&amp;quot;,
            style: &amp;quot;STRONG&amp;quot;,
            color:&amp;quot;#10c3f0&amp;quot;
          )
        )
              
              
              }
           ),
            a!forEach(
            items: Local!data,
            expression:
           { 
             
            a!gridRowLayout(
              contents: {
                /* For the First Name Column*/
                a!textField(
                  /* Labels are not visible in grid cells but are necessary to meet accessibility requirements */
                  label: &amp;quot;Item &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Item,
                  saveInto: fv!item.Item,
                  required: true
                ),
                /* For the Last Name Column*/
                a!textField(
                  label: &amp;quot;Quantity &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Quantity,
                  saveInto: fv!item.Quantity,
                  required: true
                ),
                /* For the Amount Column*/
                a!textField(
                  label: &amp;quot;Amount &amp;quot; &amp;amp; fv!index,
                  value: fv!item.Amount,
                  saveInto: fv!item.Amount,
                  required: true
                ),
                /* For the Total Column*/
                a!textField(
                  label: &amp;quot;Total &amp;quot; &amp;amp; fv!index,
                  readOnly: true(),
                  value: if(
                    or(
                      isnull(
                        fv!item.Quantity
                      ),
                      isnull(
                        fv!item.Amount
                      )
                    ),
                    fv!item.Total,
                    product(
                      fv!item.Amount,
                      fv!item.Quantity
                    )
                  ),
                  saveInto: fv!item.Total,
                  required: true
                ),
                /* For the Phone Number Column*/
                /* For the Removal Column*/
                a!imageField(
                  label: &amp;quot;delete &amp;quot; &amp;amp; fv!index,
                  images: a!documentImage(
                    document: a!iconIndicator(
                      &amp;quot;REMOVE&amp;quot;
                    ),
                    altText: &amp;quot;Remove Item&amp;quot;,
                    caption: &amp;quot;Remove &amp;quot; &amp;amp; fv!item.Item &amp;amp; &amp;quot; &amp;quot; &amp;amp; fv!item.Quantity,
                    link: a!dynamicLink(
                      value: fv!index,
                      saveInto: {
                        a!save(
                          Local!data,
                          remove(
                            Local!data,
                            save!value
                          )
                        )
                      }
                    )
                  ),
                  size: &amp;quot;ICON&amp;quot;
                )
              },
              id: fv!index
            )}
          )},
          addRowlink: a!dynamicLink(
            label: &amp;quot;Add Item&amp;quot;,
            /*
* For your use case, set the value to a blank instance of your CDT using
* the type constructor, e.g. type!data(). Only specify the field
* if you want to give it a default value e.g. startDate: today()+1.
*/
            value: {
              startDate: today() + 1
            },
            saveInto: {
              a!save(
                Local!data,
                append(
                  Local!data,
                  save!value
                )
              )
            }
          )
        ),
        a!textField(
          readOnly: true
        ),
        a!gridField(
          label: &amp;quot;&amp;quot;,
          totalCount: count(
            Local!data
          ),
          columns: {
            a!gridTextColumn(
              /*label: &amp;quot;Total Count&amp;quot;,*/
              data: &amp;quot;Total Count&amp;quot;,
              alignment: &amp;quot;LEFT&amp;quot;
            ),
            a!gridTextColumn(
              /*label: &amp;quot;Total&amp;quot;,*/
              data: {
                sum(
                        a!forEach(
                          items: Local!data,
                          expression: if(
                            or(
                              rule!APN_isBlank(
                                fv!item.Quantity
                              ),
                              rule!APN_isBlank(
                                fv!item.Amount
                              )
                            ),
                            fv!item.Total,
                            product(
                              fv!item.Quantity,
                              fv!item.Amount
                            )
                          )
                        )
                      )
              },
              alignment: &amp;quot;LEFT&amp;quot;
            ),
            
          },
          value: a!pagingInfo(
            startIndex: 1,
            batchSize: 5,
            sort: a!sortInfo(
              field: &amp;quot;name&amp;quot;,
              ascending: true
            )
          )
        )
      },
      buttons: a!buttonLayout(
        primaryButtons: a!buttonWidgetSubmit(
          label: &amp;quot;Submit&amp;quot;
        )
      )
    )
  
)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-discussions-components-files/13/8738.snippet.JPG"&gt;&lt;img src="/resized-image/__size/320x240/__key/communityserver-discussions-components-files/13/8738.snippet.JPG" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/60647?ContentTypeID=1</link><pubDate>Mon, 24 Sep 2018 18:10:03 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:c839561f-9285-4a9c-b17e-be18cefdc0d3</guid><dc:creator>rajesh kilaru</dc:creator><description>Use the following code Which will Do exactly same as your mock up If the data is coming from the DB table please query accordingly.&lt;br /&gt;
&lt;br /&gt;
Hope it helps.&lt;br /&gt;
&lt;br /&gt;
Thank you!&lt;br /&gt;
Rajesh Kilaru&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=load(&lt;br /&gt;
  /*  &lt;br /&gt;
  * local!employess is provided in this recipe as a way to start with hard-coded &lt;br /&gt;
  * data. However, this data is identical to the data created from the entity-backed&lt;br /&gt;
  * tutorial. Replace the hard-coded data with a query to the employee data store&lt;br /&gt;
  * entity and all of the employee records from the tutorial will appear.&lt;br /&gt;
  *&lt;br /&gt;
  * To replace this data with your own, replace (ctrl+H or cmd+H) all references to&lt;br /&gt;
  * local!employees with your data source, either via rule input or local variable.&lt;br /&gt;
  */&lt;br /&gt;
  local!employees: {&lt;br /&gt;
      { id: 1, firstName: &amp;quot;Dell laptop&amp;quot; , lastName: 2 , department: 865.00, title: 1730 , phoneNumber: &amp;quot;100000&amp;quot; , startDate: today()-360 },&lt;br /&gt;
      { id: 2, firstName: &amp;quot;Air Mouse&amp;quot; , lastName: 3 , department: 43.00 , title: 129, phoneNumber: &amp;quot;65000&amp;quot; , startDate: today()-360 },&lt;br /&gt;
      { id: 3, firstName: &amp;quot;HDMI Converter&amp;quot;, lastName: 1 , department: 75.00 , title: 75, phoneNumber: &amp;quot;85000&amp;quot; , startDate: today()-240 },&lt;br /&gt;
  },&lt;br /&gt;
  a!formLayout(&lt;br /&gt;
    label: &amp;quot;Example: Add,Update, or Remove Employee Data&amp;quot;,&lt;br /&gt;
    contents: {&lt;br /&gt;
      a!gridLayout(&lt;br /&gt;
        totalCount: count(local!employees),&lt;br /&gt;
        headerCells: {&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Item&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Quantity&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Amount&amp;quot; ),&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;Total&amp;quot; ),&lt;br /&gt;
        &lt;br /&gt;
          /* For the &amp;quot;Remove&amp;quot; column */&lt;br /&gt;
          a!gridLayoutHeaderCell(label: &amp;quot;&amp;quot; )&lt;br /&gt;
        },&lt;br /&gt;
        /* Only needed when some columns need to be narrow */&lt;br /&gt;
        columnConfigs: {&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;DISTRIBUTE&amp;quot;, weight:3 ),&lt;br /&gt;
       &lt;br /&gt;
          a!gridLayoutColumnConfig(width: &amp;quot;ICON&amp;quot;)&lt;br /&gt;
        },&lt;br /&gt;
        /*&lt;br /&gt;
        * a!forEach() will take local!employee data and used that data to loop through an&lt;br /&gt;
        * expression that creates each row. &lt;br /&gt;
        *&lt;br /&gt;
        * When modifying the recipe to work with your data, you only need to change:&lt;br /&gt;
        * 1.) the number of fields in each row&lt;br /&gt;
        * 2.) the types of fields for each column (i.e. a!textField() for text data elements)&lt;br /&gt;
        * 3.) the fv!item elements. For example fv!item.firstName would change to fv!item.yourdata&lt;br /&gt;
        */&lt;br /&gt;
        rows: a!forEach(&lt;br /&gt;
          items: local!employees,&lt;br /&gt;
          expression: a!gridRowLayout(&lt;br /&gt;
            contents: {&lt;br /&gt;
              /* For the First Name Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                /* Labels are not visible in grid cells but are necessary to meet accessibility requirements */&lt;br /&gt;
                label: &amp;quot;first name &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.firstName,&lt;br /&gt;
                saveInto: fv!item.firstName,&lt;br /&gt;
                required: true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Last Name Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;last name &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.lastName,&lt;br /&gt;
                saveInto: fv!item.lastName,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Department Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;last name &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.department,&lt;br /&gt;
                saveInto: fv!item.department,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Title Column*/&lt;br /&gt;
              a!textField(&lt;br /&gt;
                label: &amp;quot;title &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                value: fv!item.title,&lt;br /&gt;
                saveInto: fv!item.title,&lt;br /&gt;
                required:true&lt;br /&gt;
              ),&lt;br /&gt;
              /* For the Phone Number Column*/&lt;br /&gt;
          &lt;br /&gt;
              /* For the Removal Column*/&lt;br /&gt;
              a!imageField(&lt;br /&gt;
                label: &amp;quot;delete &amp;quot; &amp;amp; fv!index,&lt;br /&gt;
                images: a!documentImage(&lt;br /&gt;
                  document: a!iconIndicator(&amp;quot;REMOVE&amp;quot;),&lt;br /&gt;
                  altText: &amp;quot;Remove Employee&amp;quot;,&lt;br /&gt;
                  caption: &amp;quot;Remove &amp;quot; &amp;amp; fv!item.firstName &amp;amp; &amp;quot; &amp;quot; &amp;amp; fv!item.lastName,&lt;br /&gt;
                  link: a!dynamicLink(&lt;br /&gt;
                    value: fv!index,&lt;br /&gt;
                    saveInto: {&lt;br /&gt;
                      a!save(local!employees, remove(local!employees, save!value))&lt;br /&gt;
                    }&lt;br /&gt;
                  )&lt;br /&gt;
                ),&lt;br /&gt;
                size: &amp;quot;ICON&amp;quot;&lt;br /&gt;
              )&lt;br /&gt;
            },&lt;br /&gt;
            id: fv!index&lt;br /&gt;
          )&lt;br /&gt;
        ),&lt;br /&gt;
        addRowlink: a!dynamicLink(&lt;br /&gt;
          label: &amp;quot;Add Employee&amp;quot;,&lt;br /&gt;
          /*&lt;br /&gt;
           * For your use case, set the value to a blank instance of your CDT using&lt;br /&gt;
           * the type constructor, e.g. type!Employee(). Only specify the field&lt;br /&gt;
           * if you want to give it a default value e.g. startDate: today()+1.&lt;br /&gt;
           */&lt;br /&gt;
          value: {&lt;br /&gt;
            startDate: today() + 1&lt;br /&gt;
          },&lt;br /&gt;
          saveInto: {&lt;br /&gt;
            a!save(local!employees, append(local!employees, save!value))&lt;br /&gt;
          }&lt;br /&gt;
        )&lt;br /&gt;
      ),&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      a!textField(&lt;br /&gt;
        &lt;br /&gt;
        readOnly: true&lt;br /&gt;
      ),&lt;br /&gt;
      a!gridField(&lt;br /&gt;
      label: &amp;quot;Employees&amp;quot;,&lt;br /&gt;
      totalCount: 20,&lt;br /&gt;
      columns: {&lt;br /&gt;
        a!gridTextColumn(&lt;br /&gt;
          /*label: &amp;quot;Total Count&amp;quot;,*/&lt;br /&gt;
          data: &amp;quot;Total Count&amp;quot;,&lt;br /&gt;
          alignment: &amp;quot;LEFT&amp;quot;&lt;br /&gt;
        ),&lt;br /&gt;
        a!gridTextColumn(&lt;br /&gt;
          /*label: &amp;quot;Title&amp;quot;,*/&lt;br /&gt;
          data: {sum(local!employees.title)},&lt;br /&gt;
          alignment: &amp;quot;LEFT&amp;quot;&lt;br /&gt;
        ),&lt;br /&gt;
      &lt;br /&gt;
      },&lt;br /&gt;
      value: a!pagingInfo(&lt;br /&gt;
        startIndex: 1,&lt;br /&gt;
        batchSize: 5,&lt;br /&gt;
        sort: a!sortInfo(&lt;br /&gt;
          field: &amp;quot;name&amp;quot;,&lt;br /&gt;
          ascending: true&lt;br /&gt;
        )&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
    },&lt;br /&gt;
    buttons: a!buttonLayout(&lt;br /&gt;
      primaryButtons: a!buttonWidgetSubmit(&lt;br /&gt;
        label: &amp;quot;Submit&amp;quot;&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
)&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/60608?ContentTypeID=1</link><pubDate>Mon, 24 Sep 2018 04:49:25 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:33d91678-a222-4e3d-ad3c-956eceddcbdd</guid><dc:creator>Deepa_M</dc:creator><description>Yeah, do let me know your specific requirement. Accordingly I can provide you the solution&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/60603?ContentTypeID=1</link><pubDate>Sun, 23 Sep 2018 14:50:59 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:7f1109b2-b0ae-454d-b711-460285bd7850</guid><dc:creator>susana197</dc:creator><description>Thanks Deepa,&lt;br /&gt;
&lt;br /&gt;
This has taken me far enough is getting started.  I will make another post with the specific advance features I need more clarity on.&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SAIL help - Invoice Style Editable Data Grid</title><link>https://community.appian.com/thread/60602?ContentTypeID=1</link><pubDate>Sun, 23 Sep 2018 10:06:47 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:ff2745b6-578c-40fc-b9a1-576be01e067a</guid><dc:creator>Deepa_M</dc:creator><description>&lt;p&gt;Go over this link:&amp;nbsp;&lt;span style="text-decoration:underline;"&gt;&lt;a href="https://docs.appian.com/suite/help/18.2/recipe_add_edit_and_remove_data_in_an_inline_editable_grid.html"&gt;https://docs.appian.com/suite/help/18.2/recipe_add_edit_and_remove_data_in_an_inline_editable_grid.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It will give you clear idea on how to work with editable grids.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>