Использование Force.com для произвольных методов REST API - PullRequest
0 голосов
/ 22 октября 2019

Примечание: это дубликат моего вопроса на https://github.com/developerforce/Force.com-Toolkit-for-NET/issues/357.. Я синхронизирую обе темы после того, как это будет решено.

Я использую Инструментарий Force.com для .NET . SOQL-запросы работают нормально для меня, но я пытаюсь также сделать простой вызов REST, похожий на тот, который я могу сделать с помощью инструмента REST Explorer в https://workbench.developerforce.com/restExplorer.php.

Мой код:

 using (var queryClient = new ForceClient(authClient.InstanceUrl, authClient.AccessToken, authClient.ApiVersion))
    {
        // Works fine
        string soql = GetMyQuery();
        QueryResult<dynamic> result = await queryClient.QueryAsync<dynamic>(soql);

        // Throws exception.  Changing version # doesn't seem to have any effect.
        dynamic restResult = await queryClient.ExecuteRestApiAsync<dynamic>("/services/data/v46.0/sobjects/Task/describe");

Когда я добираюсь до ExecuteRestApiAsync, я получаю исключение:

Salesforce.Common.ForceException
 HResult=0x80131500
 Message=Could not find a match for URL
 Source=Salesforce.Common
 StackTrace:
  at Salesforce.Common.JsonHttpClient.<HttpGetAsync>d__4`1.MoveNext()
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[...]

Я предполагаю, что мой аргумент "/services/data/v46.0/sobjects/Task/describe", который отлично работает винструмент REST Explorer, должен быть изменен. Но я догадался о множестве разных опций (разные версии, с или без начальной строки URL и т. Д.), И до сих пор ничего не получилось.

Может кто-нибудь сказать мне, как использовать ForceClient дляполучить те же результаты, которые я получаю от REST Explorer Salesforce Workbench?

1 Ответ

0 голосов
/ 22 октября 2019

В итоге я стал внимательнее присматриваться к коду ForceClient. ExecuteRestApiAsync не был правильным вызовом для этого. Для моего конкретного примера я нашел 3 способа работы:

dynamic restResult = await queryClient.DescribeAsync<dynamic>("Task");
restResult = await queryClient.BasicInformationAsync<dynamic>("Task/describe/");
restResult = await queryClient.BasicInformationAsync<dynamic>("Task/describe");

(все 3 из приведенных выше строк возвращают одинаковый результат)

Это будет хорошо работать для объектов. Я не думаю, что в настоящее время возможно использовать эту библиотеку напрямую для таких вещей, как reports , которые используют «аналитику» в своих определениях REST API, но есть пара обходных путей, которые не требуют перекомпиляции кода. Самый чистый и наиболее эффективный из них, который я нашел, - это передать свои собственные экземпляры HttpClient в ctor ForceClient и использовать их непосредственно вместо методов в ForceClient. Проверка кода ForceClient покажет, что большинство этих методов в любом случае являются просто тонкими string.Format() обертками для методов HttpClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...