Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    What's the differences between JSON X XML Datasources while using XPATH

    Hello list!

    I was using a JSON DataSource while doing a prototype, it was:

    Code:
    [
     {
         id: 1,
    	 papel:"Kraft",
         cortadeira: 1,
    	 duracao: 600,
    	 larguraBobina:1200,
    	 diametroBobina:1200,
    	 tubete:76,
    	 grupos: [{grupo:1,largura:600,comprimento:600},{grupo:2,largura:600,comprimento:1000}],
    	 camadas: 4,
    	 distribuicao: "52x4 + 3x3",
         pesoBruto: "2000 kg"
    	 },
    ...
    }
    I retrieved and formatted the fields "grupos/grupo", "grupos/largura" and "grupos/comprimento" with success, setting the datasource with the fields:

    Code:
    DataSourceField grupos = new DataSourceIntegerField("grupos/grupo", "Grupos");
                grupos.setValueXPath("grupos/grupo");
                
                DataSourceField larguraItem = new DataSourceIntegerField("grupos/largura", "Largura Item");
                larguraItem.setValueXPath("grupos/largura");
    
                DataSourceField comprimentoItem = new DataSourceIntegerField("grupos/comprimento", "Comprimento Item");
                comprimentoItem.setValueXPath("grupos/comprimento");
    And formatting one ListGrid cell using the CellFormatter:

    Code:
    grupos.setCellFormatter(new CellFormatter() {
    
                public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
                    if (record.getAttributeAsStringArray("grupos/grupo").length == 0) {
                        return "";
                    }
                    if (record.getAttributeAsStringArray("grupos/grupo").length == 1) {
                        return fmt(record.getAttribute("grupos/grupo"),
                                record.getAttribute("grupos/largura"),
                                record.getAttribute("grupos/comprimento"));
                    }
                    String response = formataCampoGrupo(record, 0);
                    for (int i = 1; i < record.getAttributeAsStringArray("grupos/grupo").length; i++) {
                        response += "<br />" + formataCampoGrupo(record, i);
                    }
                    return response;
                }
            });
    Ok, but now the real world. I need to do the same thing using a RestDataSource. My XML looks like:

    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <response>
        <status>0</status>
        <errors/>
        <startRow>0</startRow>
        <endRow>30</endRow>
        <totalRows>45</totalRows>
        <data>
            <record>
                <id>16757</id>
                <grupos>
                    <grupo>
                        <id>1</id>
                        <grupo>1</grupo>
                        <item>
                            <geometria>
                                <comprimento>1200 mm</comprimento>
                                <largura>700 mm</largura>
                                <direcaoFibra>LIVRE</direcaoFibra>
                            </geometria>
                            <multiplicidade>2</multiplicidade>
                        </item>
                    </grupo>
                    <grupo>
                        <id>2</id>
                        <grupo>2</grupo>
                        <item>
                            <geometria>
                                <comprimento>1100 mm</comprimento>
                                <largura>200 mm</largura>
                                <direcaoFibra>LIVRE</direcaoFibra>
                            </geometria>
                            <multiplicidade>1</multiplicidade>
                        </item>
                    </grupo>
                </grupos>
                <camadas>1</camadas>
                <distribuicao>20x1</distribuicao>
                <duracao>00:00</duracao>
                <geometriaEntrada>
                    <diametro>1000 mm</diametro>
                    <largura>766 mm</largura>
                    <diametroInterno>76 mm</diametroInterno>
                </geometriaEntrada>
    ...
    And I set up the DataSource using XPATH, the same way:

    Code:
    DataSourceField numGrupo = new DataSourceIntegerField("numGrupo", constants.grupos());
            numGrupo.setValueXPath("grupos/grupo/grupo");
    
            DataSourceField comprimentoItem = new DataSourceTextField("comprimentoItem", constants.comprimentoItem());
            comprimentoItem.setValueXPath("grupos/grupo/item/geometria/comprimento");
    
            DataSourceField larguraItem = new DataSourceTextField("larguraItem", constants.larguraItem());
            larguraItem.setValueXPath("grupos/grupo/item/geometria/largura");
    Doing the relevant changes in the grid code:

    Code:
    grupos.setCellFormatter(new CellFormatter() {
    
                @Override
                public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
                    if (record.getAttributeAsStringArray("numGrupo") == null) {
                        return "";
                    }
                    if (record.getAttributeAsIntArray("numGrupo").length == 1) {
                        return fmt(record.getAttribute("numGrupo"),
                                record.getAttribute("larguraItem"),
                                record.getAttribute("comprimentoItem"));
                    }
                    String response = formataCampoGrupo(record, 0);
                    for (int i = 1; i < record.getAttributeAsStringArray("numGrupo").length; i++) {
                        response += "<br />" + formataCampoGrupo(record, i);
                    }
                    return response;
                }
            });
    But now I get only the first match. There is any relevant differences between the two types of datasource, and I don't know?

    Any help will be very appreciated.
Working...
X