NetCoreForce icon indicating copy to clipboard operation
NetCoreForce copied to clipboard

Add method to ForceClient to read documents from Salesforce API

Open cmortazavi opened this issue 1 year ago • 2 comments

When querying the ContentVersion object, the "VersionData" field that is returned is in the form of a URL such as "services/data/v56.0/sobjects/ContentVersion/0688c000008XvddAAC/VersionData"

This url is apparently the sObjectBlobRetrieve. See below StackExchange article as well as Salesforce documentation https://salesforce.stackexchange.com/questions/300845/download-contentversion-versiondata-in-python https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_blob_retrieve.htm

According to Salesforce if a user wants to actually get the File, they need to make a web request to this url like

httpClient.GetByteArrayAsync

This should be a method in the ForceClient class

cmortazavi avatar Jan 20 '23 16:01 cmortazavi

Added a few things to 4.0.0-Beta to do this, some usage examples below:

SfContentVersion cv = await client.QuerySingle<SfContentVersion>("SELECT Id,VersionData FROM ContentVersion WHERE ID = '0688W00000kkHmSQAU'");
            SfContentVersion cv2 = await client.GetObjectById<SfContentVersion>(SfContentVersion.SObjectTypeName, "0688W00000kkHmSQAU");

            Stream resultStream = await client.BlobRetrieveStream(SfContentVersion.SObjectTypeName,"0688W00000kkHmSQAU","VersionData");
            Stream resultStream2 = await client.BlobRetrieveStream("/services/data/v50.0/sobjects/ContentVersion/0688W00000kkHmSQAU/VersionData");

            using (MemoryStream memoryStream = new MemoryStream())
            {
                await resultStream.CopyToAsync(memoryStream);
                byte[] binary = memoryStream.ToArray();
            }

anthonyreilly avatar Jan 24 '23 19:01 anthonyreilly

Anthony,This is working perfectly for me!  Thank you so much!-CameronOn Jan 24, 2023, at 11:27 AM, Anthony Reilly @.***> wrote: Added a few things to 4.0.0-Beta to do this, some usage examples below: SfContentVersion cv = await client.QuerySingle<SfContentVersion>("SELECT Id,VersionData FROM ContentVersion WHERE ID = '0688W00000kkHmSQAU'"); SfContentVersion cv2 = await client.GetObjectById<SfContentVersion>(SfContentVersion.SObjectTypeName, "0688W00000kkHmSQAU");

        Stream resultStream = await client.BlobRetrieveStream(SfContentVersion.SObjectTypeName,"0688W00000kkHmSQAU","VersionData");
        Stream resultStream2 = await client.BlobRetrieveStream("/services/data/v50.0/sobjects/ContentVersion/0688W00000kkHmSQAU/VersionData");

        using (MemoryStream memoryStream = new MemoryStream())
        {
            await resultStream.CopyToAsync(memoryStream);
            byte[] binary = memoryStream.ToArray();
        }

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

cmortazavi avatar Jan 25 '23 03:01 cmortazavi