2014-11-24 103 views
0

我正嘗試將我們的應用程序與使用OAuth2的Exact Online網站進行整合,或者更具體地說,我試圖創建應包括「員工」,「項目」,「工時」,「工作時間類型」 。OAuth2與ExactOnline集成

function registerTime($access_token_for_data) { 

    //$dataToFilterAccounts = array('$filter' => 'IsSales eq true'); 
    $dataToRetrieveFromEmployees = array('$select' => 'ID'); 
    // $queryToFilterAccounts = http_build_query($dataToFilterAccounts); 
    $queryToRetrieveFromEmployees = http_build_query($dataToRetrieveFromEmployees); 

    // $dataToFilterItems = array('$filter' =>'IsSalesItem eq true'); 
    $dataToRetrieveProjects = array('$select' => 'ID'); 
    //$queryToFilterItems = http_build_query($dataToFilterItems); 
    $queryToRetrieveProjects = http_build_query($dataToRetrieveProjects); 

    $urlProjects = 'https://start.exactonline.nl/api/v1/638842/project/Projects'; 
    $urlEmployees = 'https://start.exactonline.nl/api/v1/638842/payroll/Employees'; 

    $curlProjects = curl_init($urlProjects); 
    $curlEmployees = curl_init($urlEmployees); 

    $headers = array(
     'Authorization: Bearer ' . $access_token_for_data, 
     'Accept: application/json', 
     'Content-type: application/json' 
    ); 

    curl_setopt($curlProjects, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlProjects, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlProjects, CURLOPT_URL, $urlProjects . '?' . $queryToRetrieveProjects); 
    curl_setopt($curlProjects, CURLOPT_CUSTOMREQUEST, 'GET'); 

    curl_setopt($curlEmployees, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlEmployees, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlEmployees, CURLOPT_URL, $urlEmployees . '?' . $queryToRetrieveFromEmployees); 
    curl_setopt($curlEmployees, CURLOPT_CUSTOMREQUEST, 'GET'); 


    $resultProjects = curl_exec($curlProjects); 
    $resultEmployees = curl_exec($curlEmployees); 

    $projectsData = json_decode($resultProjects, true); 
    $projectID = $projectsData["d"]["results"]["0"]["ID"]; 

    $employeesData = json_decode($resultEmployees, true); 
    $employeeID = $employeesData["d"]["results"]["0"]["ID"]; 

    curl_close($curlProjects); 
    curl_close($curlEmployees); 

    $urlTimeTransaction = 'https://start.exactonline.nl/api/v1/638842/project/TimeTransactions'; 

    $curlTimeTransacation = curl_init($urlTimeTransaction); 
    $content = json_encode(array("Project" => $projectID, "Employee" => $employeeI)); 

    curl_setopt($curlTimeTransacation, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlTimeTransacation, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlTimeTransacation, CURLOPT_POST, true); 
    curl_setopt($curlTimeTransacation, CURLOPT_POSTFIELDS, $content); 

    $createdTimeTransaction = curl_exec($curlTimeTransacation); 

    $status = curl_getinfo($curlTimeTransacation, CURLINFO_HTTP_CODE); 
    if ($status != 201) { 
     die("Error: call to URL $curlTimeTransacation failed with status $status, response $createdTimeTransaction, curl_error " . curl_error($curlTimeTransacation) . ", curl_errno " . curl_errno($curlTimeTransacation)); 
    } 
    echo "HTTP status $status creating time registartion<br/><br/>"; 
    curl_close($curlTimeTransacation); 
} 

這是錯誤我得到

Error: call to URL Resource id #56 failed with status 500, response { "error": { "code": "", "message": { "lang": "", "value": "Mandatory: Employee\r\nMandatory: Hours\r\nMandatory: Hour type" } } }, curl_error , curl_errno 0

但是當我嘗試包括這些mandatroy的Fileds我得到:

Error: call to URL Resource id #56 failed with status 400, response { "error": { "code": "", "message": { "lang": "", "value": "Error processing request stream. The property name 'Hours' specified for type 'Exact.Web.Api.Models.TimeTransaction' is not valid." } } }, curl_error , curl_errno 0

+0

你有沒有在最終解決這個問題? – Coops 2015-03-12 22:05:38

回答

2

請注意/ API/V1/638842包含您的部門ID。您可能想將其更改爲變量。

關於您的問題:請注意,錯誤消息包含要供人類使用的文本。實際的技術名稱可能不同。我總是這樣做:我查詢現有數據並查看所有字段,然後我知道要發送什麼。您可以在Exact的應用程序中心使用Exact Online的查詢工具在Exact Online的REST API上執行查詢(但由於涉及到我而有偏見)。

0

由於圭多正確地指出,沒有對現場projects命名的TimeTransactionHours,有一個在manufacturingTimeTransaction命名爲Hours場。這有點令人困惑,特別是因爲錯誤信息不是很清楚。

您需要在TimeTransactions上設置Quantity以指定項目時間交易的小時數。