Цитата:
Сообщение от
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. Не пинайте сильно, я только учусь