2
votes

I am developing a client for SharePoint and I am implementing both 2013 and 2010 SharePoint SearchServices. I am having trouble with getting the secondaryFileExtension field. Below my request for 2010 Search Service:

<QueryPacket Revision="1000">   
    <Query>     
        <Context> 
        <QueryText language="en-US" type="STRING">Audio SITE:"https://xxxxxxxxxxxxxxxxx.com/demo/testsp/Documents"
            </QueryText>    
       </Context>    
       <SupportedFormats Format="urn:Microsoft.Search.Response.Document.Document"/> 
       <Range> 
        <StartAt>1</StartAt> 
        <Count>30</Count>  
       </Range>   
       <EnableStemming>true</EnableStemming>
       <EnableSpellCheck>Suggest</EnableSpellCheck> 
       <IncludeSpecialTermsResults>true</IncludeSpecialTermsResults>     
       <IncludeRelevantResults>true</IncludeRelevantResults> 
       <ImplicitAndBehavior>true</ImplicitAndBehavior>     
       <TrimDuplicates>true</TrimDuplicates>
       <Properties>
          <Property name="Rank"/>
          <Property name="Title" />
          <Property name="Author"/>
          <Property name="Size" />
          <Property name="Path" />
          <Property name="Description" />
          <Property name="Write"/>
          <Property name="SiteName" />
          <Property name="HitHighlightedSummary"/>
          <Property name="HitHighlightedProperties"/>
          <Property name="ContentClass"/>
          <Property name="IsDocument"/>
          <Property name="FileExtension"/>
      </Properties>
    </Query>
</QueryPacket>

With the following SOAP envelope:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body>    
        <Query xmlns="urn:Microsoft.Search">
        <queryXml>THE XML GOES HERE!</queryXml>
        </Query> 
</soap:Body> 
</soap:Envelope>

I am getting the following response:

<Envelope>
    <Body>
        <QueryResponse>
            <QueryResult><ResponsePacket xmlns="ur…</QueryResult>
        </QueryResponse>
    </Body>
</Envelope>

The QueryResult:

<Document>
    <Action>
        <LinkUrl fileExt="aspx">https://xxxxxxxxxxxxxxx…</LinkUrl>
    </Action>
    <Properties>
        <Property>
            <Name>Rank</Name>
            <Type>Int64</Type>
            <Value>67299882</Value>
        </Property>
        <Property>
            <Name>Title</Name>
            <Type>String</Type>
            <Value>Audio 2014-01-18 19_10</Value>
        </Property>
        <Property>
            <Name>Author</Name>
            <Type>Object</Type>
            <Value>Testsp</Value>
        </Property>
        <Property>
            <Name>Size</Name>
            <Type>Int64</Type>
           <Value>62327</Value>
        </Property>
        <Property>
            <Name>Path</Name>
            <Type>String</Type>
          <Value>https://xxxxxxxxxxxxxxxx.com/demo/testsp/Documents/Forms/DispForm.aspx?ID=1</Value>
        </Property>
        <Property>
            <Name>Write</Name>
            <Type>DateTime</Type>
            <Value>2014-01-19T02:53:05</Value>
        </Property>
        <Property>
            <Name>SiteName</Name>
            <Type>String</Type>
           <Value>https://xxxxxxxxxxxxxx…</Value>
        </Property>
        <Property>
            <Name>HitHighlightedSummary</Name>
            <Type>String</Type>
            <Value><c0>Audio</c0> 2014-01-18…</Value>
        </Property>
        <Property>
            <Name>HitHighlightedProperties</Name>
            <Type>String</Type>
            <Value><HHTitle><c0>Audio</c0> 2…</Value>
        </Property>
        <Property>
            <Name>ContentClass</Name>
            <Type>String</Type>
            <Value>STS_ListItem_DocumentLibr…</Value>
        </Property>
        <Property>
            <Name>IsDocument</Name>
            <Type>Boolean</Type>
            <Value>false</Value>
        </Property>
        <Property>
            <Name>FileExtension</Name>
            <Type>String</Type>
            <Value>ASPX</Value>
        </Property>
    </Properties>
</Document>

But the property SecondaryFileExtention is not present (it should containg "acc" because of audio file type). The action tag contains the following link: https://xxxxxxxxxxxxxxx.com/demo/testsp/Documents/Forms/DispForm.aspx?ID=1 When I go to this link I see a form with 2 fields name and title, and I can download the .acc file from. Doing similar request with SharePoint 2013 Search Service returns the following properties for a pdf file:

<element m:type="SP.SimpleDataRow">
    <Cells>
    <element m:type="SP.KeyValue">
        <Key>Rank</Key>
        <Value>12.6491832733154</Value>
        <ValueType>Edm.Double</ValueType>
    </element>
    <element m:type="SP.KeyValue">
        <Key>DocId</Key>
        <Value>4458265</Value>
        <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>WorkId</Key>
       <Value>4458265</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Title</Key>
       <Value>W9</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Author</Key>
       <Value>Dmitry Ivahno;Test User1</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Size</Key>
       <Value>162678</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Path</Key>
       <Value>https://xxxxxxxxxxxx.co…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Description</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>Write</Key>
       <Value>2013-05-23T14:18:46.00000…</Value>
       <ValueType>Edm.DateTime</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>CollapsingStatus</Key>
       <Value>0</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>HitHighlightedSummary</Key>
       <Value xml:space="preserve">Form    W-9 (Rev. Decembe…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>HitHighlightedProperties</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>contentclass</Key>
       <Value>STS_ListItem_DocumentLibr…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>PictureThumbnailURL</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ServerRedirectedURL</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ServerRedirectedEmbedURL</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ServerRedirectedPreviewUR…</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>FileExtension</Key>
       <Value>pdf</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ContentTypeId</Key>
       <Value>0x010100FA0E9F7CB9E8B94DB…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ParentLink</Key>
       <Value>https://xxxxxxxxxxx.co…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ViewsLifeTime</Key>
       <Value>88</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>ViewsRecent</Key>
       <Value>0</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SectionNames</Key>
       <Value/>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SectionIndexes</Key>
       <Value/>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SiteLogo</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SiteDescription</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>deeplinks</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>importance</Key>
       <Value>0</Value>
       <ValueType>Edm.Int64</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SiteName</Key>
       <Value>https://xfa.sharepoint.co…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>IsDocument</Key>
       <Value>true</Value>
       <ValueType>Edm.Boolean</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>LastModifiedTime</Key>
       <Value>2013-05-23T14:18:46.00000…</Value>
       <ValueType>Edm.DateTime</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>FileType</Key>
       <Value>pdf</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>IsContainer</Key>
       <Value>false</Value>
       <ValueType>Edm.Boolean</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>WebTemplate</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>SecondaryFileExtension</Key>
       <Value>pdf</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>docaclmeta</Key>
       <Value m:null="true"/>
       <ValueType>Null</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>OriginalPath</Key>
       <Value>https://xfa.sharepoint.co…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>PartitionId</Key>
       <Value>d4cd988f-8939-401f-82e9-8…</Value>
       <ValueType>Edm.Guid</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>UrlZone</Key>
       <Value>0</Value>
       <ValueType>Edm.Int32</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>AAMEnabledManagedProperti…</Key>
       <Value>AttachmentURI;deeplinks;D…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>RenderTemplateId</Key>
       <Value>~sitecollection/_catalogs…</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    <element m:type="SP.KeyValue">
       <Key>piSearchResultId</Key>
       <Value>0_1</Value>
       <ValueType>Edm.String</ValueType>
    </element>
    </Cells>

Can I by any chance get the real file extension with SharePoint 2010 Search API?

1

1 Answers

1
votes

I ran into a similar issue when making SharePoint 2010 SOAP calls to the search service (using SPServices). I had 2 custom fields - a subheader (single line of text) and an article category (managed metadata) - that I needed to show up in the search results, and all I was getting back was exactly what you listed (Rank through File Extension).

Those two fields had to be added as "managed properties" to be made available to come back in search results - the steps are here: http://technet.microsoft.com/en-us/library/ff621097(v=office.14).aspx (you'll need central administration-level access though).

Once my managed properties were in there, I ran into another snag because although I could see the managed properties available for search (using the FAST Search for SharePoint tool: http://fastforsharepoint.codeplex.com/), they weren't showing up in the results, even when I put them in the <Properties> list of the SOAP call.

The solution to this was actually to specify a wildcard with my subheader value in the <QueryText> field (note the "#")...this appeared to force those two fields to show up (the path condition is optional):

<QueryText language='en-US' type='STRING'>
    My Search Phrase SubHeader:# AND path:/PathTo/My/SPSite
</QueryText>

Not sure if that's by design or if it's a "feature" in SharePoint to only return the field is something exists there and/or is requested.

There are probably more elegant solutions out there if you have server-level access, but this worked for me.