Показать сообщение отдельно
Старый 18.09.2013, 09:11   #6  
_sharky_ is offline
_sharky_
Участник
 
4 / 10 (1) +
Регистрация: 16.09.2013
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Активно использую коннектор .Net для возврата XML и подобных проблем не замечено, думаю тут нужно смотреть уже конкретно ваш код статического метода и С#, опубликуйте.
Ax:
X++:
public server static container mel_getInventTableWithBarcodeListXml(RBOID _rboid, RBOItemHierarchy _rboitemhierarchy)
{
    InventTable         inventTable;
    InventItemBarcode  inventItemBarcode;
    container           con = connull();
    XmlDocument         ItmXml;
    XmlElement          ItmRoot;
    XmlElement          ItmNode;
    XmlElement          ItmField;

    XmlDocument         BarXml;
    XmlElement          BarRoot;
    XmlElement          BarNode;
    XmlElement          BarField;
    ;
    ItmXml = XmlDocument::newBlank();
    BarXml = XmlDocument::newBlank();
    ItmRoot = ItmXml.createElement(@"DocumentElement");
    BarRoot = BarXml.createElement(@"DocumentElement");
    ItmXml.appendChild(ItmRoot);
    BarXml.appendChild(BarRoot);
    
    while select inventTable
    where inventTable.InventStatus == DKL_InventStatus::Active
    && (_rboItemHierarchy == RBOItemHierarchy::BusinessGroup
    && inventTable.MEL_BusinessGroup == _rboid)
    
    || (_rboitemhierarchy == RBOItemHierarchy::DivisionGroup
    && inventTable.MEL_DivisionGroup == _rboid)
    
    || (_rboitemhierarchy == RBOItemHierarchy::RetailDepartment
    && inventTable.MEL_ItemDepartment == _rboid)
    
    || (_rboitemhierarchy == RBOItemHierarchy::RetailGroup
    && inventTable.MEL_RetailGroup == _rboid)
    {
        ItmNode = ItmXml.createElement(@"I");
        ItmRoot.appendChild(ItmNode);
        
        ItmField = ItmXml.createElement(@"ItemId");
        ItmField.innerText(inventTable.ItemId);
        ItmNode.appendChild(ItmField);
        
        ItmField = ItmXml.createElement(@"Description");
        ItmField.innerText(inventTable.ItemName);
        ItmNode.appendChild(ItmField);
        
        ItmField = ItmXml.createElement(@"Article");
        ItmField.innerText(inventTable.MEL_Article);
        ItmNode.appendChild(ItmField);
        
        ItmField = ItmXml.createElement(@"Price");
        ItmField.innerText(num2str(inventTable.dkl_baseRetailPrices().BasePrice, 0, 8, 1, 0));
        ItmNode.appendChild(ItmField);
        
        while select inventItemBarcode
        where inventItemBarcode.itemId == inventTable.ItemId
        {
            BarNode = BarXml.createElement(@"B");
            BarRoot.appendChild(BarNode);
            
            BarField = BarXml.createElement(@"ItemId");
            BarField.innerText(inventTable.ItemId);
            BarNode.appendChild(BarField);
            
            BarField = BarXml.createElement(@"Barcode");
            BarField.innerText(inventItemBarcode.itemBarCode);
            BarNode.appendChild(BarField);
        }
    }
    con = [ItmXml.toString(), BarXml.toString()];
    return con;
}
в C# использую собственную обёртку для BusinessConnector'a
Код:
//вызов 
object Ret = ax.CallAxMethod("PosIsTransactionService", "mel_getInventTableWithBarcodeListXml", new object[] { BusinessGroup, ItemHierarchy });

//Обёртка
public object CallAxMethod(string className, string methodName, params object[] parameters)
        {
            if (AxConn == null)
                return null;
            object res = null;
            try
            {
                log.Write("AxConn.CallAxMethod({0}, {1})", className, methodName);
                res = AxConn.CallStaticClassMethod(className, methodName, parameters);
            }
            catch (BusinessConnectorException bex)
            {
                log.Write("AxConn.Logon BusinessConnectorException: {0} {1}", bex.ToString(), bex.Message);
                log.Write("AxConn.Logon BusinessConnectorException stack: {0}", bex.StackTrace);
                return null;
            }
            catch (Exception ex)
            {
                log.Write("AxConn.CallAxMethod Exception: {0} {1}", ex.ToString(), ex.Message);
                log.Write("AxConn.CallAxMethod Exception stack: {0}", ex.StackTrace);
                return null;
            }
            return res;
        }
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А на какого размера XML-документах это все валится, любого или только на больших (>4Mb)? И если на больших, то джобиком вы тоже большой документ генерите или же просто мелкий тестовый?
Джобиком большой объем не пробовал, но <4Mb свободно собирает

P.S. Не пинайте сильно, я только учусь

Последний раз редактировалось _sharky_; 18.09.2013 в 09:15.