我正在创建一个工具,将生产数据库与QuickBooks(QB)同步。我想使用ItemQuery获取QB中所有项目的列表,我也希望获得每个项目的描述。但是,似乎不同类型的项目具有指定描述的不同方式。使用IncludeRetElement,我能够获得ItemInventoryRet的SalesDesc,但是我很难获得ItemServiceRet的描述(以及其他一些,但我想如果我能想出这个,我将能够找出其他的)
这是我的要求......
worldmap([48 56],[12 27]);
land = shaperead('landareas','UseGeocoords',true);
geoshow(land,'facecolor',[0.8 0.8 0.8]);
northarrow('latitude', 54.5, 'longitude', 24.5,'scaleratio', .17);
h = handlem('NorthArrow');
set(h,'FaceColor',[0 0 0],'EdgeColor',[0.8 0.8 0.8])
scaleruler('units','km');
setm(handlem('scaleruler'),'XLoc',-4.8e5,'YLoc',5.4e6,'MajorTick',0:100:400,'MinorTick',0,'FontName','Times New Roman','FontSize',10,'FontWeight','light',...
'LineWidth',2,'MajorTickLength',20,'ruler','patches','TickMode','manual');
以下是我得到的答复(为了清晰起见缩短了......)
<?qbxml version="12.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<ItemQueryRq requestID="2">
<IncludeRetElement>ListID</IncludeRetElement>
<IncludeRetElement>Name</IncludeRetElement>
<IncludeRetElement>FullName</IncludeRetElement>
<IncludeRetElement>ParentRef</IncludeRetElement>
<IncludeRetElement>SalesAndPurchase_SalesDesc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
<IncludeRetElement>ItemDesc</IncludeRetElement>
<IncludeRetElement>SalesDesc</IncludeRetElement>
</ItemQueryRq>
</QBXMLMsgsRq>
</QBXML>
根据documentation(从下拉列表中选择ItemQuery),我认为我想要的描述是ItemServiceRet&gt; ORSalePurchase&gt; SaleOrPurchase&gt;说明。请求包括我尝试过的一种方式,但我也尝试过其他一些方法......
<QBXML>
<QBXMLMsgsRs>
<ItemQueryRs requestID="2" statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<ItemServiceRet>
<ListID>240000-1071531214</ListID>
<Name>Delivery</Name>
<FullName>Delivery</FullName>
</ItemServiceRet>
<ItemInventoryRet>
<ListID>270000-1071524193</ListID>
<Name>1/2" Line</Name>
<FullName>Irrigation Hose:1/2" Line</FullName>
<SalesDesc>1/2" Vinyl Irrigation Line</SalesDesc>
</ItemInventoryRet>
<ItemGroupRet>
<ListID>1E0000-934380927</ListID>
<Name>Walkway</Name>
<ItemDesc>Walkway lighting</ItemDesc>
</ItemGroupRet>
</ItemQueryRs>
</QBXMLMsgsRs>
</QBXML>
<IncludeRetElement>ORSalesPurchase:SalesOrPurchase:Desc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase.SalesOrPurchase.Desc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase_SalesOrPurchase_Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase:Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase.Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
所以问题是,如何在qbXML查询中检索子元素?
我发现如果删除所有IncludeRetElements,我会得到值。但我想学习如何只获取我关心的数据。我们有一个巨大的QB数据库,所以如果我必须得到所有东西,这可能是一个主要的性能问题。
作为一个注释,我转而使用QBFC10Lib而不是自己创建XML,希望它能帮助我解决这个问题,但事实并非如此。我仍然有完全相同的问题。我猜测一个人的答案将解决qbXML和QBFC。
答案 0 :(得分:2)
我明白了。您必须单独添加每个级别,如此...
<?qbxml version="12.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<ItemQueryRq requestID="2">
<IncludeRetElement>ListID</IncludeRetElement>
<IncludeRetElement>Name</IncludeRetElement>
<IncludeRetElement>FullName</IncludeRetElement>
<IncludeRetElement>ItemDesc</IncludeRetElement>
<IncludeRetElement>SalesDesc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase</IncludeRetElement>
<IncludeRetElement>SalesAndPurchase</IncludeRetElement>
<IncludeRetElement>Desc</IncludeRetElement>
</ItemQueryRq>
</QBXMLMsgsRq>
</QBXML>
我之前尝试过这个,但我想我错过了一个级别。无论如何,希望这个答案可以帮助其他人浪费一半的时间:)。