# Expandable Row, Child Row: (Vision)

**URL:** <https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946>\
**Category:** Ignition\
**Tags:** ignition79, python, ignition80, vision, scripting\
**Created:** [February 5, 2020, 11:04am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946 "2020-02-05T11:04:22Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 5, 2020, 11:04am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/1 "2020-02-05T11:04:22Z")

</div>

Hello!  
I would like to know how I can instantiate a row of this TreeTable as “Expandable Row” and also how to insert a child row inside it.  
How can I fix the error: “No visible constructors for class (com.jidesoft.grid.ExpandableRow)”?  
The Expandable Row can be the Row1 and the child row the Row\_1.  
I really hope someone can help me solve this doubt.  
Thanks everyone for your attention!

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/2X/7/76035f15baf328583d624b63a5713d17d33f7338.png)

 ![Cattura](https://us1.discourse-cdn.com/inductiveautomation/original/2X/8/827b61756bffb22cb0ff5b5411917bbec432756a.png)

 ![Cattura1](https://us1.discourse-cdn.com/inductiveautomation/original/2X/3/38721d86fa67b461c420e0b4bba16334bed4c5b8.png)

---

<div class="post-metadata">

**Author:** ![boyergary](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/boyergary/32/10316_2.png) [@boyergary](https://forum.inductiveautomation.com/u/boyergary)\
**Post date:** [February 6, 2020, 6:28pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/2 "2020-02-06T18:28:57Z")

</div>

ExpandableRow is an interface, not a class. It sounds like the implementation uses a private class named the same thing under the covers, but you need to implement the interface to use it.

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 7, 2020, 5:52am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/3 "2020-02-07T05:52:33Z")

</div>

Thanks for the answer!  
Can you tell me how can I implement an interface?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 7, 2020, 12:36pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/4 "2020-02-07T12:36:20Z")

</div>

Implementing an interface means “create a class that inherits the interface and defines each method the interface requires”. That would start something like this:

```auto
from com.jidesoft.grid import ExpandableRow

class MyExpRow(ExpandableRow):
    def __init__ (self, some, parameters):
        self.some = some
        self.parameters = parameters
    def notifyCellUpdated(self, child, columnIndex):
        # do something
# ..... other methods in interface, all forty of them .....

```

An interface doesn’t provide code, just method signatures that the user is expected to implement. And no constructor, so whatever you require for your functionality is entirely up to you. [ExpandableRow](https://www.jidesoft.com/javadoc/com/jidesoft/grid/ExpandableRow.html) has quite a few methods.

Fortunately, JideSoft includes a nearly-complete _abstract_ implementation, [DefaultExpandableRow](https://www.jidesoft.com/javadoc/com/jidesoft/grid/DefaultExpandableRow.html), that you would finish. Eclipse tells me that getValueAt() is the only method you’d _ **have to** _ implement yourself. Something like this:

```auto
from com.jidesoft.grid import DefaultExpandableRow

class MyExpRow(DefaultExpandableRow):
    def __init__ (self, some, parameters):
        self.some = some
        self.parameters = parameters
    def getValueAt(self, columnIndex):
        # do something
# ..... override other methods, as needed for your functionality .....

```

This abstract class has a do-nothing default (no-args) constructor, so it’ll be called implicitly. So constructor parameters are totally up to you. To be useful, you’ll almost certainly have to override multiple methods.

Note that jython doesn’t allow multiple implementations of methods with the same name. When you run into that in a java class or interface, you must implement that method to accept variant arguments, and examine the number and types at runtime to determine what functionality to execute.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [February 7, 2020, 4:23pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/5 "2020-02-07T16:23:13Z")

</div>

Other things to consider - if you’re going so far as to make your own frames and the like in Jython, you’re really probably better off making a custom module and writing Java code directly.

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 10, 2020, 7:58am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/7 "2020-02-10T07:58:20Z")

</div>

I’ll try to implement “DefaultExpandableRow” as an SDK module, even if I have to actually understand the procedure to make one!  
Thank you very much for taking the time to answer me.

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 10, 2020, 7:58am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/8 "2020-02-10T07:58:56Z")

</div>

Can I make an SDK module written entirely in Java? Is there a step by step guide to make an SDK module?  
Thanks for the great tips and help!

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [February 10, 2020, 4:30pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/9 "2020-02-10T16:30:49Z")

</div>

> [@giulio.comito](#):
>
> Can I make an SDK module written entirely in Java?

You can technically make an SDK module in any JVM language (which includes Jython, as well as Kotlin, Scala, etc) but Java is by far the best supported by our tooling.

> [@giulio.comito](#):
>
> Is there a step by step guide to make an SDK module?

No, but there are some examples publicly available here: [GitHub - inductiveautomation/ignition-sdk-examples: Ignition SDK Example Projects](https://github.com/inductiveautomation/ignition-sdk-examples) and there's some (potentially outdated) information on using a feature of Maven called archetypes here: [Creating a Module - Ignition SDK Programmer's Guide - Ignition Documentation](https://docs.inductiveautomation.com/display/SE/Creating+a+Module)

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 11, 2020, 7:38am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/10 "2020-02-11T07:38:39Z")

</div>

I’m trying to remake an example; I have to convert the folder containing build, client, common, designer etc … to a .modl file …I don’t understand how to do this!  
Thank you so much!

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 11, 2020, 12:27pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/11 "2020-02-11T12:27:36Z")

</div>

Ignition’s maven plug-in assembles the module for you from the built jars and specified dependencies. Another tool signs the module files with your dev certificate (self-signed perhaps, but public software signing certs are best). You must build the project with maven. The pom.xml files in the project and subprojects control maven’s build operations.

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 11, 2020, 2:15pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/12 "2020-02-11T14:15:33Z")

</div>

I found Ignition’s maven plug-in; I built the project with Maven but I still haven’t understood how to compile it and import it on Ignition …

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 11, 2020, 2:20pm UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/13 "2020-02-11T14:20:16Z")

</div>

Consider starting a new topic in the Module Development category. Provide details of your setup there, including the IDE you are using. I, personally, do not use maven. I use the legacy Ant-based build, with many customizations for my peculiar requirements and preferences. And I use Eclipse. Most developers apparently use NetBeans. /:

---

<div class="post-metadata">

**Author:** ![giulio.comito](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/giulio.comito/32/12671_2.png) [@giulio.comito](https://forum.inductiveautomation.com/u/giulio.comito)\
**Post date:** [February 13, 2020, 10:25am UTC](https://forum.inductiveautomation.com/t/expandable-row-child-row-vision/31946/14 "2020-02-13T10:25:52Z")

</div>

I have implemented this interface, now I have to understand how to configure MyExpRow as a row of a table, and how to insert data into MyExpRow. Then I will instantiate a TreeTable and inside it the rows must be of the DefaultExpandableRow type … something like that …
