Question .NET METHOD returns "System.Data.DataSet[]"

Cecil

17+ years progress programming and still learning.
#1
I'm want to access a .NET library method which returns "System.Data.DataSet[]". How do I map/convert/bind it to a ProDataSet? Example documentation seams limited.

I Need to see a working example to get a better understanding.

What I Have found:
OpenEdge 11.7 Documentation
 
Last edited:

Cecil

17+ years progress programming and still learning.
#2
This is what I have so far. It compiles but I can't test it.

Code:
 DEFINE VARIABLE iCount                    AS INTEGER              NO-UNDO.  
            DEFINE VARIABLE objFleetAndVehicleDataSet AS CLASS                "System.Data.DataSet[]" NO-UNDO.
            DEFINE VARIABLE oGenericDataSet           AS CLASS                System.Data.DataSet     NO-UNDO.  
            DEFINE VARIABLE iTableCount               AS INTEGER              NO-UNDO.
            DEFINE VARIABLE cTableListDotnet          AS CHARACTER            NO-UNDO.
            DEFINE VARIABLE cXMLSchema                AS CHARACTER            NO-UNDO.
            DEFINE VARIABLE hProDataSet               AS HANDLE               NO-UNDO.
               
               
            /* Get the Fleet and Vehical Data Set.*/
            objFleetAndVehicleDataSet = objTrackingAPI:GetFleetAndVehicleDataSets().
           
            DO iCount = 0 TO objFleetAndVehicleDataSet:Length - 1:
               
                oGenericDataSet = CAST ( objFleetAndVehicleDataSet:GetValue(iCount), System.Data.DataSet ).
               
                oGenericDataSet:WriteXmlSchema("MTDATAXSD.xsd").
                oGenericDataSet:WriteXml("MTDATAXML.xml").
               
                DO iTableCount = 0 TO oGenericDataSet:Tables:Count - 1:
                    cTableListDotnet = cTableListDotnet + oGenericDataSet:Tables[iTableCount]:TableName + " ".
/*                    cTableListDotnet = cTableListDotnet + oGenericDataSet:Item[iTableCount]:TableName + " ".*/
                END.
               
                MESSAGE
                    "DataSetName:" oGenericDataSet:DataSetName SKIP
                    "Namespace :" oGenericDataSet:Namespace  SKIP
                    "Table Names" cTableListDotnet.
                   
                CREATE DATASET hprodataset.
                hprodataset:READ-XMLSCHEMA("FILE", "MTDATAXSD.xsd", NO).
                hprodataset:READ-XML("FILE", "MTDATAXML.xml", "EMPTY", ?,?).

            END.
 
Last edited:

Osborne

Active Member
#5
According to the manuals a direct mapping does not appear possible:
ABL does no mapping between ADO.NET DataSets (System.Data.DataSet) and DataTables (System.Data.DataTable) and their corresponding ABL data objects, ProDataSets and temp-tables. In ABL, these .NET data objects look like any other .NET object, and you can
access them accordingly.

However, ABL supports the ability to map ABL ProDataSets, temp-tables, and other forms of ABL data directly to .NET controls using an OpenEdge extension of the .NET System.Windows.Forms.BindingSource class, Progress.Data.BindingSource (ProBindingSource).

ABL does not do any mapping between System.Data.DataSet or System.Data.DataTable method parameters, properties, or data members on one hand and ABL ProDataSets and temp-tables on the other. ABL supports data binding between ProDataSets or temp-tables (among other data sources) and .NET form controls using the Progress.Data.BindingSource class (the ProBindingSource). For more information, see the Progress.Data.BindingSource class reference entry. However, you can always directly access .NET DataSet and DataTable objects as any other .NET object, using their class members.
Is this a possible solution?:
Code:
oSystemDataDataSet:WriteXmlSchema("TestXSD.xsd").

dsProdataset:READ-XMLSCHEMA("FILE","TestXSD.xsd",NO).
Edit: In post #2 you are actually using write and read xml so it appears to be the only solution.
 
Top