Edit Columns of EtlTable programmatically?

Well… I can confirm that this fully works! :sunglasses:

First I’ll share my code:

    @Override
    public void performAction(VPAction arg0) {
        ApplicationManager vpam = ApplicationManager.instance();
        DiagramManager vpdm = vpam.getDiagramManager();
        ViewManager vpvm = vpam.getViewManager();

        IDiagramUIModel diagram = vpdm.getActiveDiagram();
        IETLTableDiagramUIModel etlmodel = null;

        IETLTableDiagram etldiagram = null;
        IETLTable etltable = null;
        IETLTableDiagramColumn etlcol = null;

        for (IDiagramElement ide : diagram.toDiagramElementArray()) {
            // Get ETL table
            if (ide.getShapeType().equals("ETLTable")) {
                vpvm.showMessage("Discovered ETL table.");

                try {
                    vpvm.showMessage("Processing table element.");
                    etltable = (IETLTable) ide.getModelElement();

                    if (etltable.subDiagramCount() > 0) {
                        etlmodel = (IETLTableDiagramUIModel) etltable.getSubDiagramAt(0);
                    }

                    // Get related diagram
                    vpvm.showMessage("Get related ETL table diagram");
                    etldiagram = etlmodel.getEtlTableDiagram();

                    // Create & add new column
                    vpvm.showMessage("Creating new column");
                    etlcol = etldiagram.createETLTableDiagramColumn();
                    vpvm.showMessage("Adding new column");
                    etldiagram.addColumn(etlcol);

                    etlcol.setColumnType(IETLTableDiagramColumn.COLUMN_TYPE_PROPERTY);
                    etlcol.setColumnValue("Auto added column");
                } catch (Exception e) {
                    vpvm.showMessage("Caught ETL exception: " + e.getMessage());
                }
            }
        }
        etlmodel.realCloseDiagram();
        vpdm.openDiagram(etlmodel);
    }

And this is the result:

I figured I’d share because Peter’s code didn’t show how to get the actual class. But then again, my previous message showed that already.

But yeah, this works!

1 Like