Using SOAP against CUCM's AXL web service, there are a number of query calls.
getLine
getDeviceProfile
getUser
and so on.
The WDSL shows:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/8.5">
<soapenv:Header/>
<soapenv:Body>
<ns:getDeviceProfile sequence="?">
<!--You have a CHOICE of the next 2 items at this level-->
<name>?</name>
<uuid>?</uuid>
<!--Optional:-->
<returnedTags ctiid="?" uuid="?">
<!--Optional:-->
<name>?</name>
<!--Optional:-->
<description>?</description>
<!--Optional:-->
<product>?</product>
<!--Optional:-->
<model>?</model>
<!--Optional:-->
<class>?</class>
<!--Optional:-->
<protocol>?</protocol>
<!--Optional:-->
<protocolSide>?</protocolSide>
<!--Optional:-->
<userHoldMohAudioSourceId>?</userHoldMohAudioSourceId>
<!--Optional:-->
<vendorConfig>
<!--You may enter ANY elements at this point-->
</vendorConfig>
<!--Optional:-->
<versionStamp>?</versionStamp>
<!--Optional:-->
<traceFlag>?</traceFlag>
<!--Optional:-->
<mlppDomainId>?</mlppDomainId>
<!--Optional:-->
<mlppIndicationStatus>?</mlppIndicationStatus>
<!--Optional:-->
<preemption>?</preemption>
<!--Optional:-->
<lines>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Zero or more repetitions:-->
<line uuid="?" ctiid="?">
<!--Optional:-->
<index>?</index>
<!--Optional:-->
<label>?</label>
<!--Optional:-->
<asciiLabel>?</asciiLabel>
<!--Optional:-->
<display>?</display>
<!--Optional:-->
<dirn uuid="?">
<!--Optional:-->
<pattern>?</pattern>
<!--Optional:-->
<routePartitionName uuid="?">?</routePartitionName>
</dirn>
<!--Optional:-->
<ringSetting>?</ringSetting>
<!--Optional:-->
<consecutiveRingSetting>?</consecutiveRingSetting>
<!--Optional:-->
<ringSettingIdlePickupAlert>?</ringSettingIdlePickupAlert>
<!--Optional:-->
<ringSettingActivePickupAlert>?</ringSettingActivePickupAlert>
<!--Optional:-->
<displayAscii>?</displayAscii>
<!--Optional:-->
<e164Mask>?</e164Mask>
<!--Optional:-->
<dialPlanWizardId>?</dialPlanWizardId>
<!--Optional:-->
<mwlPolicy>?</mwlPolicy>
<!--Optional:-->
<maxNumCalls>?</maxNumCalls>
<!--Optional:-->
<busyTrigger>?</busyTrigger>
<!--Optional:-->
<callInfoDisplay>
<!--Optional:-->
<callerName>?</callerName>
<!--Optional:-->
<callerNumber>?</callerNumber>
<!--Optional:-->
<redirectedNumber>?</redirectedNumber>
<!--Optional:-->
<dialedNumber>?</dialedNumber>
</callInfoDisplay>
<!--Optional:-->
<recordingProfileName uuid="?">?</recordingProfileName>
<!--Optional:-->
<monitoringCssName uuid="?">?</monitoringCssName>
<!--Optional:-->
<recordingFlag>?</recordingFlag>
<!--Optional:-->
<audibleMwi>?</audibleMwi>
<!--Optional:-->
<speedDial>?</speedDial>
<!--Optional:-->
<partitionUsage>?</partitionUsage>
<!--Optional:-->
<associatedEndusers>
<!--Zero or more repetitions:-->
<enduser>
<!--Optional:-->
<userId>?</userId>
</enduser>
</associatedEndusers>
<!--Optional:-->
<missedCallLogging>?</missedCallLogging>
</line>
<!--Zero or more repetitions:-->
<lineIdentifier>
<!--Optional:-->
<directoryNumber>?</directoryNumber>
<!--Optional:-->
<routePartitionName>?</routePartitionName>
</lineIdentifier>
</lines>
<!--Optional:-->
<numberOfButtons>?</numberOfButtons>
<!--Optional:-->
<phoneTemplateName uuid="?">?</phoneTemplateName>
<!--Optional:-->
<speeddials>
<!--Zero or more repetitions:-->
<speeddial>
<!--Optional:-->
<dirn>?</dirn>
<!--Optional:-->
<label>?</label>
<!--Optional:-->
<asciiLabel>?</asciiLabel>
<!--Optional:-->
<index>?</index>
</speeddial>
</speeddials>
<!--Optional:-->
<busyLampFields>
<!--Zero or more repetitions:-->
<busyLampField>
<!--Optional:-->
<blfDest>?</blfDest>
<!--You have a CHOICE of the next 1 items at this level-->
<!--Optional:-->
<blfDirn>?</blfDirn>
<!--Optional:-->
<routePartition>?</routePartition>
<!--Optional:-->
<label>?</label>
<!--Optional:-->
<asciiLabel>?</asciiLabel>
<!--Optional:-->
<associatedBlfSdFeatures>
<!--Zero or more repetitions:-->
<feature>?</feature>
</associatedBlfSdFeatures>
<!--Optional:-->
<index>?</index>
</busyLampField>
</busyLampFields>
<!--Optional:-->
<blfDirectedCallParks>
<!--Zero or more repetitions:-->
<blfDirectedCallPark>
<!--Optional:-->
<label>?</label>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<directedCallParkId>?</directedCallParkId>
<!--Optional:-->
<directedCallParkDnAndPartition>
<!--Optional:-->
<dnPattern>?</dnPattern>
<!--Optional:-->
<routePartitionName uuid="?">?</routePartitionName>
</directedCallParkDnAndPartition>
<!--Optional:-->
<labelAscii>?</labelAscii>
<!--Optional:-->
<index>?</index>
</blfDirectedCallPark>
</blfDirectedCallParks>
<!--Optional:-->
<addOnModules>
<!--0 to 2 repetitions:-->
<addOnModule uuid="?">
<!--Optional:-->
<loadInformation special="?">?</loadInformation>
<!--Optional:-->
<model>?</model>
<!--Optional:-->
<index>?</index>
</addOnModule>
</addOnModules>
<!--Optional:-->
<userlocale>?</userlocale>
<!--Optional:-->
<defaultProfileName>?</defaultProfileName>
<!--Optional:-->
<currentProfileName uuid="?">?</currentProfileName>
<!--Optional:-->
<loginTime>?</loginTime>
<!--Optional:-->
<loginDuration>?</loginDuration>
<!--Optional:-->
<singleButtonBarge>?</singleButtonBarge>
<!--Optional:-->
<joinAcrossLines>?</joinAcrossLines>
<!--Optional:-->
<loginUserId uuid="?">?</loginUserId>
<!--Optional:-->
<ignorePresentationIndicators>?</ignorePresentationIndicators>
<!--Optional:-->
<dndOption>?</dndOption>
<!--Optional:-->
<dndRingSetting>?</dndRingSetting>
<!--Optional:-->
<dndStatus>?</dndStatus>
<!--Optional:-->
<emccCallingSearchSpace uuid="?">?</emccCallingSearchSpace>
<!--Optional:-->
<alwaysUsePrimeLine>?</alwaysUsePrimeLine>
<!--Optional:-->
<alwaysUsePrimeLineForVoiceMessage>?</alwaysUsePrimeLineForVoiceMessage>
<!--Optional:-->
<softkeyTemplateName uuid="?">?</softkeyTemplateName>
<!--Optional:-->
<callInfoPrivacyStatus>?</callInfoPrivacyStatus>
<!--Optional:-->
<currentConfig>
<!--Optional:-->
<userHoldMohAudioSourceId>?</userHoldMohAudioSourceId>
<!--Optional:-->
<phoneTemplateName uuid="?">?</phoneTemplateName>
<!--Optional:-->
<mlppDomainId>?</mlppDomainId>
<!--Optional:-->
<mlppIndicationStatus>?</mlppIndicationStatus>
<!--Optional:-->
<preemption>?</preemption>
<!--Optional:-->
<softkeyTemplateName uuid="?">?</softkeyTemplateName>
<!--Optional:-->
<ignorePresentationIndicators>?</ignorePresentationIndicators>
<!--Optional:-->
<singleButtonBarge>?</singleButtonBarge>
<!--Optional:-->
<joinAcrossLines>?</joinAcrossLines>
<!--Optional:-->
<callInfoPrivacyStatus>?</callInfoPrivacyStatus>
<!--Optional:-->
<dndStatus>?</dndStatus>
<!--Optional:-->
<dndRingSetting>?</dndRingSetting>
<!--Optional:-->
<dndOption>?</dndOption>
<!--Optional:-->
<alwaysUsePrimeLine>?</alwaysUsePrimeLine>
<!--Optional:-->
<alwaysUsePrimeLineForVoiceMessage>?</alwaysUsePrimeLineForVoiceMessage>
<!--Optional:-->
<emccCallingSearchSpaceName uuid="?">?</emccCallingSearchSpaceName>
<!--Optional:-->
<deviceName>?</deviceName>
<!--Optional:-->
<model>?</model>
<!--Optional:-->
<product>?</product>
<!--Optional:-->
<deviceProtocol>?</deviceProtocol>
<!--Optional:-->
<class>?</class>
<!--Optional:-->
<addressMode>?</addressMode>
<!--Optional:-->
<allowAutoConfig>?</allowAutoConfig>
<!--Optional:-->
<remoteSrstOption>?</remoteSrstOption>
<!--Optional:-->
<remoteSrstIp>?</remoteSrstIp>
<!--Optional:-->
<remoteSrstPort>?</remoteSrstPort>
<!--Optional:-->
<remoteSipSrstIp>?</remoteSipSrstIp>
<!--Optional:-->
<remoteSipSrstPort>?</remoteSipSrstPort>
<!--Optional:-->
<geolocationInfo>?</geolocationInfo>
</currentConfig>
<!--Optional:-->
<services>
<!--Zero or more repetitions:-->
<service uuid="?">
<!--Optional:-->
<telecasterServiceName uuid="?">?</telecasterServiceName>
<!--Optional:-->
<name>?</name>
<!--Optional:-->
<url>?</url>
<!--Optional:-->
<urlButtonIndex>?</urlButtonIndex>
<!--Optional:-->
<urlLabel>?</urlLabel>
<!--Optional:-->
<urlLabelAscii>?</urlLabelAscii>
<!--Optional:-->
<serviceNameAscii>?</serviceNameAscii>
<!--Optional:-->
<phoneService>?</phoneService>
<!--Optional:-->
<phoneServiceCategory>?</phoneServiceCategory>
<!--Optional:-->
<vendor>?</vendor>
<!--Optional:-->
<version>?</version>
<!--Optional:-->
<priority>?</priority>
</service>
</services>
<!--Optional:-->
<featureControlPolicy uuid="?">?</featureControlPolicy>
</returnedTags>
</ns:getDeviceProfile>
</soapenv:Body>
</soapenv:Envelope>
Now the <returnedTags>
subtree controls what is returned. I was making some calls before and I was getting back all the values (Which is what I want) and then I went and made some changes (not sure what) and suddenly I started getting back only what I asked for.
Key for me is, what is the trick to get AXL to return all data it has on the object referenced, instead of explicitly listing them all in the request?
I.e. I would like a query as simple as:
<soapenv:Envelope xmlns:ns="http://www.cisco.com/AXL/API/8.5" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ns:getLine sequence="?">
<uuid>{02CF73CE-140E-AD9A-9E0E-B56134636D71}</uuid>
<returnedTags uuid="?"/>
</ns:getLine>
</soapenv:Body>
</soapenv:Envelope>
And get back all the data populated on the Line. But if I just included an empty <returnedTags/>
tag I get back nothing. If I list of empty nodes to show the attrs I want, I get back those explicit ones. So what do I send to get all attributes returned?