«Ресурс не найден для сегмента * publisherguid *» в запросе XMLHTTP для создания решения в CRM - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь создать решение в CRM с помощью JavaScript. Мой код - это веб-ресурс, который я получаю через ленту, которую я создал с помощью "Ribbon Workbench 2016". Эти вещи работают очень хорошо, но когда я пытаюсь передать данные, полученные от пользователя (из формы), в CRM, я получаю сообщение об ошибке в заголовке.

Сначала я подумал, что проблема была в том, что guid был в нижнем регистре, поэтому я преобразовал его в верхний регистр. Ничего не изменилось. Затем я попытался использовать дружественное имя издателя вместо руководства. Ничего не изменилось. Наконец, я был разочарован, поэтому я использовал пустую строку, и ошибка изменилась с той, что в заголовке, на « linkPath должен иметь 2 сегмента ». Думаю, это был прогресс ... но все еще не знаю, в чем может быть настоящая ошибка.

Что я делаю не так? Правильно ли рассматривать решение как единое целое и создавать его таким образом? Есть ли способ лучше?

PS: запрос был создан с помощью CRM Rest Builder

var entity = {};
entity.friendlyname = $("#solutionForm").dxForm("instance").getEditor("Friendly name").option("value");
entity.uniquename = $("#solutionForm").dxForm("instance").getEditor("Unique name").option("value");
entity.version = $("#solutionForm").dxForm("instance").getEditor("Version").option("value");
entity["publisherid@odata.bind"] = keyValueContainerForPublishers[($("#solutionForm").dxForm("instance").getEditor("Publisher").option("value"))]; //contains guid of selected publisher
entity["configurationpageid@odata.bind"] = "";
entity.description = $("#solutionForm").dxForm("instance").getEditor("Description").option("value");
entity.solutionid = newGuid(); //create unique guid
entity.solutionpackageversion = null;
entity.solutiontype = 0;

var req = new XMLHttpRequest();
req.open("POST", window.parent.opener.Xrm.Page.context.getClientUrl() + "/api/data/v8.2/solutions", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function() {
     if (this.readyState === 4) {
         req.onreadystatechange = null;
         if (this.status === 204) {
             var uri = this.getResponseHeader("OData-EntityId");
             var regExp = /\(([^)]+)\)/;
             var matches = regExp.exec(uri);
             var newEntityId = matches[1];
         } else {
             window.parent.opener.Xrm.Utility.alertDialog(this.statusText);
         }
      }
};
req.send(JSON.stringify(entity));

1 Ответ

1 голос
/ 05 апреля 2019

Прямо под запросом Webapi. Я пытался создать решение, и оно сработало для меня.

Несколько пунктов, чтобы позаботиться о версии

  1. , должно быть примерно 1.0 или 2.0 или около того.,только 1 или 2 не будут работать
  2. Publisher. Если вы сравните свой код и мой код, это должны быть "издатели", а не "издатель"
  3. SolutionID, вы не должны упоминать, что это будетавтоматически создавать
  4. Пока я не использовал configuraitonPageID и solutionPackageVersion.

Забота о вышеперечисленных вещах создала решение для меня.

var entity = {};
entity.friendlyname = "Test solution from WebAPI";
entity.uniquename = "TestSolutionFromWebAPI";
entity.version = "1.0";
entity["publisherid@odata.bind"] = "/publishers(6007BA03-EE7A-4CA1-A146-7EB0044E504F)";
entity.description = "This is test solution form webapi";
entity.solutiontype = 0;

var req = new XMLHttpRequest();
req.open("POST", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/solutions", false);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 204) {
            var uri = this.getResponseHeader("OData-EntityId");
            var regExp = /\(([^)]+)\)/;
            var matches = regExp.exec(uri);
            var newEntityId = matches[1];
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send(JSON.stringify(entity));
...