microsoftgraph / msgraph-sdk-php

Microsoft Graph Library for PHP.
Other
566 stars 142 forks source link

Conflict Behavior cannot be set for Drive Item Copy #1555

Open JeroenTriptic opened 1 month ago

JeroenTriptic commented 1 month ago

Describe the bug

I try to copy a file from folder A to folder B and I try to use @microsoft.graph.conflictBehavior but the request does not allow query parameters and it doesn't work if I add it to the body.

Expected behavior

I expected CopyRequestBuilderPostRequestConfiguration to have query options. Or for the CopyPostRequestBody->setAdditionalData(['@microsoft.graph.conflictBehavior' => 'rename']) to work.

How to reproduce

<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Drives\Item\Items\Item\Copy\CopyPostRequestBody;
use Microsoft\Graph\Generated\Models\ItemReference;

$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);

$requestBody = new CopyPostRequestBody();
$parentReference = new ItemReference();
$parentReference->setDriveId('6F7D00BF-FC4D-4E62-9769-6AEA81F3A21B');
$parentReference->setId('DCD0D3AD-8989-4F23-A5A2-2C086050513F');
$requestBody->setParentReference($parentReference);
$requestBody->setAdditionalData(['@microsoft.graph.conflictBehavior' => 'rename']);

$result = $graphServiceClient->drives()->byDriveId('drive-id')->items()->byDriveItemId('driveItem-id')->copy()->post($requestBody)->wait();

When there is already a file in the destination folder with the same name it doesn't do anything instead of renaming the new file.

SDK Version

2.10.0

Latest version known to work for scenario above?

1.110.0

Known Workarounds

No response

Debug output

No response

Configuration

No response

Other information

No response

Ndiritu commented 1 month ago

Thanks for reporting this @JeroenTriptic.

As a temporary work-around, you can use the withUrl() method to pass a plain text URL with the query parameter:


$result = $graphServiceClient->drives()->byDriveId('drive-id')->items()->byDriveItemId('driveItem-id')->copy()->withUrl(
    $graphServiceClient->getRequestAdapter()->getBaseUrl()."/drives/{$driveId}/items/{$itemId}/copy"
)->post($requestBody)->wait();

Let me know if this works.

JeroenTriptic commented 1 week ago

Sorry for the late response. The withUrl function does indeed function as a workaround.