Я пытаюсь преобразовать SAP B1 Datatable в System.Data.Datatable с помощью XML.
Я пытался преобразовать его вручную, построчно, но это занимает слишком много времени, так как данных очень много.
Затем я пытаюсь получить XML из SAP B1 с данными с помощью метода DataTable.SerializeAsXML таблицы данных SAP, а затем загружаю System.Data.Datatable с помощью метода dt.ReadXml, но он дает ошибку.
Я читал на другом форуме, что XML для SAP B1 Datatable и System.Data.Datatable отличается и его необходимо преобразовать с помощью XSLT.
Не могли бы вы предложить какой-либо метод и инструменты, чтобы я мог сгенерировать файл XSLT для преобразования SAP B1 Datatable XML в System.Data.Datatable XML
Жду твоего ответа.
Я немного прочитал, и похоже, что SAP использует соединение ODBC с базой данных и использует стандартные методы db.context в VS для извлечения данных. Я не уверен, зачем вам нужен xml, если данные не хранились в базе данных в формате xml. Db.context состоит из таблиц базы данных в виде списка классов. Итак, если у вас есть таблица в базе данных Имя таблицы со столбцами First и Last, у вас будет List <db.context.Name> в качестве строк таблицы. Таким образом, извлечение будет иметь вид var results = db.context.Name.Select (x => new {First = x.First, Last = x.Last}). ToList ();
Под «SAP B1 datatable» вы подразумеваете объект набора записей DI-API?





Я создал метод, который примет SAP DataTable (как xml) и запишет его на System.Data.DataTable.
Я не помню, дает ли он правильные типы данных или все выходит просто в виде строки.
Вот суть.
public DataTable SapDataTableToDotNetDataTable(string pathToXmlFile)
{
var DT = new DataTable();
var XMLstream = new System.IO.FileStream(pathToXmlFile, FileMode.Open);
var XDoc = System.Xml.Linq.XDocument.Load(XMLstream);
var Columns = XDoc.Element("DataTable").Element("Columns").Elements("Column");
foreach (var Column in Columns)
{
DT.Columns.Add(Column.Attribute("Uid").Value);
}
var Rows = XDoc.Element("DataTable").Element("Rows").Elements("Row");
var Names = new List<string>();
foreach (var Row in Rows)
{
var DTRow = DT.NewRow();
var Cells = Row.Element("Cells").Elements("Cell");
foreach (var Cell in Cells)
{
var ColName = Cell.Element("ColumnUid").Value;
var ColValue = Cell.Element("Value").Value;
DTRow[ColName] = ColValue;
}
DT.Rows.Add(DTRow);
}
return DT;
}
Было бы здорово, если бы вы могли предоставить минимальный воспроизводимый пример