By Keith Chisarik - 8/23/2006
I need to import data from a number of XML documents, I looked through the SF namespaces for a function to do this but didn't find anything. I want to makes sure I am not missing it before I do it by hand like I used to do with a reader. Essentially I am looking for VFP's 'cursortoxml'. Do you have something like that I have missed?
|
By Trent L. Taylor - 8/23/2006
Give this a shot:Dim loTable As New Data.DataTable()loTable.ReadXml( "C:\MyXmlFile.xml")
|
By Trent L. Taylor - 8/23/2006
You can do this straight into a business object also by using the CopyDataFrom method. Use the code I posted previously, then you can load that data table into the business object through the CopyDataFrom method.
|
By Keith Chisarik - 8/23/2006
nice...... ty
|
By Keith Chisarik - 8/23/2006
"DataTable does not support schema inference from XML." is what I get when I try your code.
I tried a few difference XML documents.
|
By StrataFrame Team - 8/23/2006
You can only read the XML file if it was written to the file using the business object's table. When the table writes it's data to disk, there is an overload that allows you to tell it that you want to write the schema to file as well. If you write the schema, then you can read the file and schema back in.
|
By Trent L. Taylor - 8/23/2006
You can get it to work...I have done this on a number of occasions. First, look at the ReadXmlSchema method on the DataTable. Second, reverse engineer the WriteXml on the DataTable which has support for the schema.
|
By Daniel Essin - 8/24/2006
Microsoft XSD Inference 1.0
The Microsoft XSD Inference utility is used to create an XML Schema definition language (XSD) schema from an XML instance document. When provided with wellformed XML file, the utility generates an XSD that can be used to validate that XML file. You can also refine the XSD generated by providing the tool more wellformed XML files. The download contains the core library, simple command line utility and the source code.
Package is attached
|
By Keith Chisarik - 8/25/2006
Me.OrdersBO.CopyDataFrom(importedorder_datatable)
I get an error because CopyDataFrom thinks the table name is 2 parameters due to the underscore, it works fine if I remove it.
Bug? or does vb.net just not like underscores in tablenames?
I haven't had problems with underscores anywhere else, I generally have always used an underscore in any dynamic table name just as a personal convention, it helps me to identify them as dynamic.
Also CopyDataFrom clears the contents of the current BO, is there something like AppendDataFrom? If not I can do it manually easy enough.
Thanks
|
By Trent L. Taylor - 8/25/2006
Bug? or does vb.net just not like underscores in tablenames?
This would be related to .NET since we do not have control over the compiler. But there is something not quite right because I know that I have done this in the past. Also CopyDataFrom clears the contents of the current BO, is there something like AppendDataFrom? If not I can do it manually easy enough. Look at the second parameter. There is an option to append or clear.
|
By Keith Chisarik - 8/25/2006
great, sorry I missed that 2nd parameter.
Now why isnt the save committing the records back to the SQL server?
OrdersBO.CopyDataFrom(importedorder_datatable, MicroFour.StrataFrame.Business.BusinessCloneDataType.AppendDataToTableFromCompleteTable)
OrdersBO.Save()
I see them added, but they dont get saved.. is there something special about using CopyDataFrom?
If I manually do it, it does save.
Me.OrdersBO.newRow()
Me.OrdersBO.order_dt = DateTime.Parse(currow("order_ndt"))
Me.OrdersBO.Save()
|
By Trent L. Taylor - 8/25/2006
I see them added, but they dont get saved.. is there something special about using CopyDataFrom? When you copy the data in the CurrentDataTable rejects any previous changes. If you look at the .IsDirty property before and after the copy, you will see that it will be False after the copy.
|
By Keith Chisarik - 8/25/2006
How do I save the BO with my newly added records then?
I tried putting it in edit mode, the save() then causes a collision.
|
By Trent L. Taylor - 8/25/2006
If all of those rows need to be set to dirty, the you can manually set each of those rows into a dirty state.Me.CurrentDataTable.Rows(0).SetModified() This will tell the BO that this record needs to be updated. If it is a new record then use this method: Me.CurrentDataTable.Rows(0).SetAdded()
|