using System; using System.Collections.Generic; using System.Globalization; using System.Xml; using Boyum.Utilities.FileHandler.Model; using SAPbobsCOM; using SBO.DI; namespace UFFITemplate { public class UffiRunner : UniversalFunctions.Public.FileImporter.IImporter { public FileHandlerResultEntry Import(FileHandlerParameters parameters) { try { string fileName = parameters.File; var objectToImportFromXml = CreateObjectToImportFromXml(parameters); var document = B1BusinessObjects.Documents.Drafts.TemplateObject; document.DocObjectCode = BoObjectTypes.oPurchaseInvoices; document.DocType = BoDocumentTypes.dDocument_Items; document.CardCode = objectToImportFromXml.CardCode; document.DocDueDate = objectToImportFromXml.InvoiceDate; document.DocDate = objectToImportFromXml.InvoiceDate; var documentLines = document.Lines; bool first = true; foreach (var line in objectToImportFromXml.Lines) { if (first) { first = false; } else { documentLines.Add(); } documentLines.ItemCode = line.ItemCode; documentLines.Quantity = line.Quantity; } if(document.Add() != 0) { return new FileHandlerResultEntry(FileHandlerResultStatus.Error, GetLastError.ErrorNumberAndDescription + " CardCode: " + objectToImportFromXml.CardCode); } return new FileHandlerResultEntry(FileHandlerResultStatus.Success); } catch (Exception e) { return new FileHandlerResultEntry(FileHandlerResultStatus.Error, "Exception caught", e); } } private ObjectToImport CreateObjectToImportFromXml(FileHandlerParameters parameters) { var xmlDoc = new XmlDocument(); xmlDoc.Load(parameters.File); var order = new ObjectToImport(); order.CardCode = xmlDoc.GetElementsByTagName("CardCode")[0].InnerText; order.InvoiceDate = DateTime.Today; XmlNodeList items = xmlDoc.GetElementsByTagName("Item"); foreach (XmlNode item in items) { var lines = new Line(); foreach (XmlNode attributes in item.ChildNodes) { switch (attributes.Name) { case "ItemCode": lines.ItemCode = attributes.InnerText; break; case "Quantity": lines.Quantity = Convert.ToInt32(attributes.InnerText); break; } } order.Lines.Add(lines); } return order; } private class ObjectToImport { public DateTime InvoiceDate { get; set; } public string CardCode { get; set; } public List Lines { get; private set; } public ObjectToImport() { Lines = new List(); } } private class Line { public string ItemCode { get; set; } public double Quantity { get; set; } } } }