Невозможно выполнить пользовательское связанное действие MSCRM Webapi в ядре mvc с помощью внешней оболочки (davidyack) - PullRequest
0 голосов
/ 29 июня 2019

Я не могу выполнить связанное пользовательское действие в MSCRM с помощью оболочки Дэвида Яка для mscrm webapi github . Я легко могу выполнить Действие, используя библиотеки MSCRM SDK, но, поскольку я использую MVC core 2.2, эти DLL мне не доступны, и лучшая альтернатива, которую я нашел, - это оболочка Дэвида, которая очень хороша, хотя и тонка со стороны документации.

Я пробовал разные способы выполнения действия. Я могу приступить к работе, если это несвязанное настраиваемое действие без параметров. Мне не повезло с действием, связанным с сущностью, и передачей параметров и идентификатора связанной сущности.

Я попытался найти пример c # в документации, но это оказалось трудным.

Что я пытаюсь достичь той же функциональности в следующем коде SDK ниже, но с помощью оболочки Дэвида.

OrganizationRequest request = new OrganizationRequest("new_GetProductBuyPrice");
request["Target"] = new EntityReference("product", new Guid(ProductID));
request["Account"] = new EntityReference("account", new Guid(AccountID));
request["Currency"] = new EntityReference("transactionalcurrency", new Guid(CurrencyID));
request["Qty"] = 1.00m;

OrganizationResponse response = Xrm.XrmSvc.Execute(request);
UnitBuy = Math.Round(((Money)response.Results["BuyPrice"]).Value, 2);
DiscountReason = response.Results.Contains("DiscountReason") ? response.Results["DiscountReason"].ToString() : string.Empty;

Как я могу заставить оболочку Дэвида выполнить мое настраиваемое действие в CRM?

1 Ответ

0 голосов
/ 29 июня 2019

Итак, мне удалось выяснить это с помощью обертки David Yack API на github и просто опубликовать мои выводы на тот случай, если кто-нибудь наткнется на этот пост.они должны использовать словарь, как если бы он был классом EntityReference из Microsoft SDK, и использовать «@ odata.type» в качестве типа сущности, а идентификатор объекта - все строчные буквы следующим образом:

dynamic AccountRef = new Dictionary<String, object>();
            AccountRef["@odata.type"] = "Microsoft.Dynamics.CRM.account";
            AccountRef["accountid"] = AccountId.ToString();

            dynamic CurrencyRef = new Dictionary<String, object>();
            CurrencyRef["@odata.type"] = "Microsoft.Dynamics.CRM.transactioncurrency";
            CurrencyRef["transactioncurrencyid"] = CurrencyId.ToString();

            var actionParams = new
            {
                Account = AccountRef,
                Currency = CurrencyRef,
                Qty = 1.00m
            };
            var response = await _crmClient.API.ExecuteAction("Microsoft.Dynamics.CRM.new_GetProductBuyPrice", "products", ProductId, actionParams);
...