CAML Query не возвращает ожидаемые результаты - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь выполнить запрос caml, выполненный SOAP с использованием класса, который я нашел в http://forrst.com/posts/PHP_Read_and_write_to_SharePoint_Lists-PRF, теперь я могу получить его, чтобы он возвращал список sharepoint 2010, но он будет показывать мне только представление по умолчанию, независимо от того, что я добавлюк запросу я пробовал много вещей, включая построители запросов CAMl

Я жестко закодировал запрос в метод read в классе php, с которым я связан выше

Я изменил:

    public function read($list, $limit = 0, $query = null){
            //Check limit is set
            if($limit==0 || $limit == null)$limit = MAX_ROWS;
            //Create Query XML is query is being used
            $queryXML = '';
            //If query is set pass it to the query builder
            if($query != null){
                    $queryXML = $this->queryXML($query);
            }
            //Setup basic XML for query
            $CAML = '
                    <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">  
                      <listName>'.$list.'</listName> 
                      <rowLimit>'.$limit.'</rowLimit>
                      '.$queryXML.'
                      <queryOptions xmlns:SOAPSDK9="http://schemas.microsoft.com/sharepoint/soap/" > 
                              <QueryOptions/> 
                      </queryOptions> 
                    </GetListItems>';

            //Create SOAP instance
        $soap = $this->createSoapObject();
            //Ready XML
            $xmlvar = new SoapVar($CAML, XSD_ANYXML);
            $rawXML ='';
            //Attempt to query Sharepoint
            try{
                    $rawXML = $soap->GetListItems($xmlvar)->GetListItemsResult->any;
            }catch(SoapFault $fault){
                    $this->onError($fault);
            }
            //Return a XML as nice clean Array
            return $this->xmlToArray($rawXML);

    }

к этому

public function read($list, $limit = 150, $query = null){
    //Check limit is set
    if($limit==0 || $limit == null)$limit = MAX_ROWS;
    //Create Query XML is query is being used
    $queryXML = '';
    //If query is set pass it to the query builder
    if($query != null){
        $queryXML = $this->queryXML($query);
    }
    //Setup basic XML for query
    $CAML = '<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                        <listName>'.$list.'</listName> 
                            <query>
                            <Query xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                                <OrderBy>
                                    <FieldRef Name="Title" Ascending="True" />
                                </OrderBy>
                            </Query>
                            </query>
                            <viewfields>
                            <ViewFields xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                                <FieldRef Name="Title" />
                                <FieldRef Name="Sequence" />
                                <FieldRef Name="Region" />
                                <FieldRef Name="Email" />
                                <FieldRef Name="Telephone" />
                                <FieldRef Name="Fax" />
                                <FieldRef Name="Entity" />
                                <FieldRef Name="Address_x0020_1" />
                                <FieldRef Name="Address_x0020_2" />
                                <FieldRef Name="Address_x0020_3" />
                                <FieldRef Name="Town" />
                                <FieldRef Name="County" />
                                <FieldRef Name="Postcode" />
                                <FieldRef Name="Office_x0020_Type" />
                                <FieldRef Name="Legal_x0020_Entity" />
                                <FieldRef Name="Company_x0020_Number" />
                                <FieldRef Name="Office_x0020_Link" />
                                <FieldRef Name="Map" />
                                <FieldRef Name="Email_x0020_Forward" />
                                <FieldRef Name="Footer" />
                                <FieldRef Name="Contact" />
                                <FieldRef Name="Address" />
                                <FieldRef Name="Company_x0020_Registration_x0020" />
                                <FieldRef Name="Company_x0020_Registered_x0020_D" />
                                <FieldRef Name="Office_x0020_Investment_x0020_Bu" />
                                <FieldRef Name="VAT_x0020_Number" />
                                <FieldRef Name="Email_x0020_Forward_x0020_Format" />
                                <FieldRef Name="ID" />
                                <FieldRef Name="Modified" />
                            </ViewFields>
                            </viewfields>
                         <QueryOptions xmlns="http://schemas.microsoft.com/sharepoint/soap/" />
                    </GetListItems>';
    //Create SOAP instance
    $soap = $this->createSoapObject();
        $this->caml = $soap;
    //Ready XML
    $xmlvar = new SoapVar($CAML, XSD_ANYXML);
    $rawXML ='';
    //Attempt to query Sharepoint
    try{
        $rawXML = $soap->GetListItems($xmlvar)->GetListItemsResult->any;
    }catch(SoapFault $fault){
        $this->onError($fault);
    }
    //Return a XML as nice clean Array
    return $this->xmlToArray($rawXML);

}

Пример результатов

Array
(
    [0] => Array
    (
        [Office_x0020_Link] => xxxxxxxx
        [Region] => xxxxxxx
        [Email] => xxxxxxx
        [Telephone] => xxxxxxx
        [Entity] => xxxxxxxxx
        [MetaInfo] => xxxxx
        [_ModerationStatus] => xxxxxx
        [_Level] => xxxxx
        [ID] => xxxx
        [UniqueId] => xxxx
        [owshiddenversion] => xxxx
        [FSObjType] => xxxxx
        [Created] => xxxxxx
        [PermMask] => xxxxxx
        [Modified] => xxxxxx
        [FileRef] => xxxxxxx
    )

Как вы видите, он не возвращает все поля, которые я просил, результаты - это то, чтосписок (по умолчанию) показывает, если вы подключаетесь к странице в sharepoint, минимальный вид.У нас настроено полное представление, но я не знаю, как ссылаться на это в своем запросе.

Я действительно мало знаю о sharepoint 2010, caml и этих запросах, к которым я пытаюсь получить результаты.весь список в php, чтобы я мог использовать его в другом месте.

Заранее спасибо.

...