📄 class_c_address_book_engine.html
字号:
<a name="l00311"></a>00311 {<a name="l00312"></a>00312 _LIT( KEncResID, <span class="stringliteral">"EncryptedResourceID exists."</span>);<a name="l00313"></a>00313 LOG(KEncResID);<a name="l00314"></a>00314 _LIT8 (KResourceElement, <span class="stringliteral">"ab:EncryptedResourceID"</span>);<a name="l00315"></a>00315 resourceElement = CSenBaseElement::NewL(KResourceElement);<a name="l00316"></a>00316 CleanupStack::PushL(resourceElement); <a name="l00317"></a>00317 <span class="comment">// copy the actual resource id content</span><a name="l00318"></a>00318 resourceElement->CopyFromL(*resourceID);<a name="l00319"></a>00319 }<a name="l00320"></a>00320 <span class="keywordflow">else</span><a name="l00321"></a>00321 {<a name="l00322"></a>00322 _LIT( KOnlyPlainResID, <span class="stringliteral">"Only plain ResourceID should be used (not encrypted)."</span>);<a name="l00323"></a>00323 LOG( KOnlyPlainResID);<a name="l00324"></a>00324 _LIT8 (KResourceElement, <span class="stringliteral">"ab:ResourceID"</span>);<a name="l00325"></a>00325 resourceElement = CSenBaseElement::NewL(KResourceElement);<a name="l00326"></a>00326 CleanupStack::PushL(resourceElement); <a name="l00327"></a>00327 <span class="comment">// Copy the actual resource id content</span><a name="l00328"></a>00328 resourceElement->CopyFromL(*resourceID);<a name="l00329"></a>00329 }<a name="l00330"></a>00330 }<a name="l00331"></a>00331 <span class="keywordflow">else</span><a name="l00332"></a>00332 {<a name="l00333"></a>00333 _LIT( KErrResID, <span class="stringliteral">"Error: could not resolve ResourceID!"</span>);<a name="l00334"></a>00334 LOG( KErrResID);<a name="l00335"></a>00335 _LIT8 (KResourceElement, <span class="stringliteral">"ab:ResourceID"</span>);<a name="l00336"></a>00336 resourceElement=CSenBaseElement::NewL(KResourceElement); <a name="l00337"></a>00337 CleanupStack::PushL(resourceElement); <a name="l00338"></a>00338 resourceElement->SetContentL(KResourceIDVal); <span class="comment">// example content</span><a name="l00339"></a>00339 }<a name="l00340"></a>00340 element->AddElementL(*resourceElement);<a name="l00341"></a>00341 CleanupStack::Pop(resourceElement); <a name="l00342"></a>00342 <a name="l00343"></a>00343 <span class="comment">//Get the XML</span><a name="l00344"></a>00344 HBufC8* soapBuf = element->AsXmlL();<a name="l00345"></a>00345 <a name="l00346"></a>00346 <span class="comment">// Log the XML request</span><a name="l00347"></a>00347 _LIT( KGenQuery, <span class="stringliteral">"Generated Query:"</span>);<a name="l00348"></a>00348 LOG( KGenQuery);<a name="l00349"></a>00349 LOG_ALL(( soapBuf->Des() ));<a name="l00350"></a>00350 <a name="l00351"></a>00351 <span class="comment">//Destroy the objects pushed on cleanup stack</span><a name="l00352"></a>00352 CleanupStack::PopAndDestroy(pattern);<a name="l00353"></a>00353 CleanupStack::PopAndDestroy(tempBuffer);<a name="l00354"></a>00354 CleanupStack::Pop(selectElement);<a name="l00355"></a>00355 CleanupStack::Pop(queryItem);<a name="l00356"></a>00356 CleanupStack::PopAndDestroy(element);<a name="l00357"></a>00357 <span class="comment">//return Pointer to Soap Request Buffer;</span><a name="l00358"></a>00358 <span class="keywordflow">return</span> soapBuf;<a name="l00359"></a>00359 }</pre></div><p> </td> </tr></table><a class="anchor" name="a575736176d644c609425a199cd04601"></a><!-- doxytag: member="CAddressBookEngine::StartElementL" ref="a575736176d644c609425a199cd04601" args="(const TDesC8 &aNsUri, const TDesC8 &aLocalName, const TDesC8 &aQName, const RAttributeArray &aAttrs)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">void CAddressBookEngine::StartElementL </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const TDesC8 & </td> <td class="mdname" nowrap> <em>aNsUri</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const TDesC8 & </td> <td class="mdname" nowrap> <em>aLocalName</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const TDesC8 & </td> <td class="mdname" nowrap> <em>aQName</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const RAttributeArray & </td> <td class="mdname" nowrap> <em>aAttrs</em></td> </tr> <tr> <td class="md"></td> <td class="md">) </td> <td class="md" colspan="2"><code> [protected, virtual]</code></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>From CSenDomFragment, is called from <a class="el" href="class_c_address_book_engine.html#6f6aab8e9e405117f0c28455489d2b8a">CAddressBookEngine::HandleMessageL</a> (ParseL(aMessage)) every time when XML parser finds a new element tag. In this case we are interested in the <Status> and <Card> elements. When Status is found, we compare if attribute 'Code' is OK or not. SenXmlUtils::LocalName() only extracts out a possible XML prefix (i.e. 'ab:OK'). When local name is 'Card', we have encountered a contact-object. Then we make a new <a class="el" href="class_c_address_book_contact.html">CAddressBookContact</a> and delegate the parsing to it.<p>Example server response: <ab:QueryResponse xmlns:ab="urn:nokia:test:addrbook:2004-09"> <ab:Status code="ab:OK"/> <ab:Data> <ab:Card> <ab:N> <ab:FAMILY>Smith</ab:FAMILY> <ab:GIVEN>John</ab:GIVEN> </ab:N> <ab:ADR> <ab:EXTADR>Room 123</ab:EXTADDR> <ab:STREET>1st ST 123</ab:STREET> <ab:PCODE>7698532</ab:PCODE> </ab:ADR> <ab:TEL>1234</ab:TEL> <ab:TEL type="CELL">2122345</ab:TEL> </ab:Card> </ab:Data> </ab:QueryResponse><p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>aNsUri</em> </td><td>- namespace URI </td></tr> <tr><td valign="top"></td><td valign="top"><em>aLocalName</em> </td><td>- local name (in this case may be Status or Card) </td></tr> <tr><td valign="top"></td><td valign="top"><em>aQName</em> </td><td>- qualified name </td></tr> <tr><td valign="top"></td><td valign="top"><em>aAttrs</em> </td><td>- we are interested if value of attribute is KCode or not </td></tr> </table></dl><p>Definition at line <a class="el" href="_address_book_engine_8cpp-source.html#l00428">428</a> of file <a class="el" href="_address_book_engine_8cpp-source.html">AddressBookEngine.cpp</a>.<p>References <a class="el" href="_address_book_engine_8h-source.html#l00290">iContacts</a>, <a class="el" href="_address_book_engine_8h-source.html#l00300">iErrorState</a>, <a class="el" href="_address_book_engine_8h-source.html#l00299">iFaultDelegate</a>, and <a class="el" href="_address_book_contact_8cpp-source.html#l00037">CAddressBookContact::NewL()</a>.<div class="fragment"><pre class="fragment"><a name="l00432"></a>00432 {<a name="l00433"></a>00433 _LIT( KStartElementL, <span class="stringliteral">"CAddressBookEngine::StartElementL() ***"</span>);<a name="l00434"></a>00434 _LIT( KNamespaceURI, <span class="stringliteral">"- namespace URI (%S)"</span>);<a name="l00435"></a>00435 _LIT( KLocalname, <span class="stringliteral">"- localname (%S)"</span>);<a name="l00436"></a>00436 _LIT( KQualName, <span class="stringliteral">"- qualified name (%S)"</span>);<a name="l00437"></a>00437 <a name="l00438"></a>00438 LOG( KStartElementL);<a name="l00439"></a>00439 LOG_FORMAT((KNamespaceURI, aNsUri));<a name="l00440"></a>00440 LOG_FORMAT((KLocalname, aLocalName));<a name="l00441"></a>00441 LOG_FORMAT((KQualName, aQName));<a name="l00442"></a>00442 <a name="l00443"></a>00443 <span class="keywordflow">if</span> (aLocalName == KStatus)<a name="l00444"></a>00444 {<a name="l00445"></a>00445 <a name="l00446"></a>00446 <span class="keywordflow">if</span> (SenXmlUtils::LocalName(SenXmlUtils::AttrValue(aAttrs, KCode)) != KOk)<a name="l00447"></a>00447 {<a name="l00448"></a>00448 <a class="code" href="class_c_address_book_engine.html#b07a7dadac01652ed3d4d68d40d79a15">iErrorState</a> = ENestedError;<a name="l00449"></a>00449 <span class="keyword">delete</span> <a class="code" href="class_c_address_book_engine.html#1bf2f8bd2d45c91d07cabdb6d4de7f9b">iFaultDelegate</a>;<a name="l00450"></a>00450 <a class="code" href="class_c_address_book_engine.html#1bf2f8bd2d45c91d07cabdb6d4de7f9b">iFaultDelegate</a> = NULL;<a name="l00451"></a>00451 <a class="code" href="class_c_address_book_engine.html#1bf2f8bd2d45c91d07cabdb6d4de7f9b">iFaultDelegate</a> = CSenDomFragment::NewL(aNsUri,<a name="l00452"></a>00452 aLocalName, aQName, aAttrs);<a name="l00453"></a>00453 DelegateParsingL(*<a class="code" href="class_c_address_book_engine.html#1bf2f8bd2d45c91d07cabdb6d4de7f9b">iFaultDelegate</a>);<a name="l00454"></a>00454 <span class="keywordflow">return</span>;<a name="l00455"></a>00455 }<a name="l00456"></a>00456 }<a name="l00457"></a>00457 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (aLocalName == KCard)<a name="l00458"></a>00458 {<a name="l00459"></a>00459 <a class="code" href="class_c_address_book_engine.html#b07a7dadac01652ed3d4d68d40d79a15">iErrorState</a> = ENoError;<a name="l00460"></a>00460 <a name="l00461"></a>00461 <a class="code" href="class_c_address_book_contact.html">CAddressBookContact</a>* delegate = <a class="code" href="class_c_address_book_contact.html#990716240ccf3341f7fdbf289ec927ad">CAddressBookContact::NewL</a>();<a name="l00462"></a>00462 CleanupStack::PushL(delegate);<a name="l00463"></a>00463 <a class="code" href="class_c_address_book_engine.html#941a218168fb890451d01114c235c0cc">iContacts</a>.Append(delegate);<a name="l00464"></a>00464 DelegateParsingL(*delegate);<a name="l00465"></a>00465 CleanupStack::Pop(delegate);<a name="l00466"></a>00466 <span class="keywordflow">return</span>;<a name="l00467"></a>00467 }<a name="l00468"></a>00468 }</pre></div><p> </td> </tr></table><a class="anchor" name="5c88d61ffcf6558d9df3aa9ec9b60a33"></a><!-- doxytag: member="CAddressBookEngine::EndElementL" ref="5c88d61ffcf6558d9df3aa9ec9b60a33" args="(const TDesC8 &aNsUri, const TDesC8 &aLocalName, const TDesC8 &aQName)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">void CAddressBookEngine::EndElementL </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">const TDesC8 & </td> <td class="mdname" nowrap> <em>aNsUri</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const TDesC8 & </td> <td class="mdname" nowrap> <em>aLocalName</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const TDesC8 & </td> <td class="mdname" nowrap> <em>aQName</em></td> </tr> <tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -