LoginSignup
1
2

More than 3 years have passed since last update.

Sharepoint 2013 からCakePHPでデータを取得する

Posted at

\app\Config\bootstrap.php

    define('SHAREPOINT_USER', 'USER');
    define('SHAREPOINT_PASS', 'PASSWORD);

    define('SHAREPOINT_TABLE', 'XXXリスト');      
    define('SHAREPOINT_WSDL', 'http://servername/sitename/listname/_vti_bin/Lists.asmx?WSDL');
    define('SHAREPOINT_VIEW_GUID', '{9496E6ED-C0B3-47C5-AF2C-E0C13CBCEF77}');//GUID

Controller

Sharepoint2MySQLController
<?php
App::import('Lib', 'SharepointLib');

/**
 * シェアポイントからデータを取得する
 */
class Sharepoint2MySQLController extends AppController {
    public function getCompanyList(){
        $this->autoRender = false;

        //Sharepointからデータをロードする
        $PartnerList = SharepointLib::getList();
        //print_r($PartnerList);

        if (count($PartnerList) == 0){
            SharepointErrorReport::Send_Sharepoint2SqlserverErrorReport();
            return;
        }

    }
}

Lib

<?php

App::import('Lib', 'SharePointAPI\SharePointAPI');

class SharepointLib
{


    //部課チーム情報取得
    public static function getList(){
        $NTLM = true;

        try {
            //シェアポイントからデータを取得する
            $sp = new SharePointAPI(SHAREPOINT_USER, SHAREPOINT_PASS, SHAREPOINT_WSDL, $NTLM);
            $PartnerList = $sp->read(SHAREPOINT_TABLE, null, null, SHAREPOINT_VIEW_GUID); 
            //pr($PartnerList);
        } catch (Exception $e) {
            return array();
        }

        //リストの取得に失敗したら空の配列を返す
        if (isset($PartnerList['warning'])) return array();

        //Sharepoint情報のメールアドレスをパースする。
        $ret = self::perse_sharepoint_data($PartnerList);

        return $ret;
    }


    //Sharepoint情報をパースする。
    private static function perse_sharepoint_data($PartnerList)
    {  
        //pr($PartnerList);

        foreach($PartnerList as &$partner){ //$partnerのデータを上書きできるように & を付ける
            //pr($partner);

            //ユーザー情報をパースする。「;#」で分割し、[id]と[name]に格納する。 
            $userName = $partner[SHAREPOINT_TABLE_COLUMN_PERSON_NAME];

            //メールアドレス情報をパースする。「;#」で分割し、[id]と[name]に格納する。 
            $mailAddress = $partner[SHAREPOINT_TABLE_COLUMN_MAILADDRESS_x003a_mail_x30a2__x3];
            //pr($mailAddress);

            $userString = 'name';
            $personList = self::perse_person($userName, 'id', $userString);
            $mailAdressList = self::perse_person($mailAddress, 'id', SHAREPOINT_TABLE_MAIL_ADDRESS);
            //pr($mailAdressList);
            //pr($personList);

            if (count($personList) < 1) continue;
            if (count($mailAdressList) < 1) continue;

            //ユーザー番号からメールアドレスと氏名を結合する。
            foreach($mailAdressList as &$mail){
                $id = $mail['id'];
                if (isset($personList[$id])) $user = $personList[$id];
                if (isset($user[$userString])) $mail['Name'] = $user[$userString];
                //pr($person);
            }

            //新しい連想配列に作成したメールアドレス情報をセットする。
            $partner[SHAREPOINT_TABLE_MAIL_ADDRESS_LIST] = $mailAdressList;
        }

        //pr($PartnerList);
        return $PartnerList;
    }



    //配列をパースする。
    //$userNameが空の場合は、array()を返す
    //85;#aaaa;#78;#bbbb;#74;#cccc 
    //  ↓に変換
    //  Array(
    //    [85] => Array
    //        (
    //            [id] => 85
    //            [name] => aaaa
    //        )
    //
    //    [78] => Array
    //        (
    //            [id] => 78
    //            [name] => bbbb
    //        )
    //
    //    [74] => Array
    //        (
    //            [id] => 74
    //            [name] => cccc
    //        )
    //      )
    private static function perse_person($userName, $keyString, $valueString)
    {  
        $persons = array();
        $user = explode(";#", $userName );
        if (count($user) <= 1) return$persons;

        for($i=0; $i < count($user); $i += 2)
        {
            //pr($user);
            $person = array();
            $person[$keyString] = trim($user[$i]);
            $person[$valueString] = trim($user[$i+1]);
            $persons[$person[$keyString]] = $person;
        }

        //pr($persons);
        return $persons;
    }
}

thybag/PHP-SharePoint-Lists-API: A simple PHP API to make working with SharePoint lists easy.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2