Вызов кода C # из ленты JScript CRM Online 2011 - PullRequest
9 голосов
/ 23 февраля 2011

Мне нужно, чтобы какой-то код выполнялся по нажатию кнопки ленты на объекте, который обновляет некоторые связанные данные из CRM Online 2011. Я бы предпочел не писать всю эту логику в JScript.Есть ли способ вызвать код на C # из JScript?Я посмотрел на файл JScript, который Microsoft использует на ленте, и он выглядит так:

Mscrm.Campaign.copyCampaign = function (campaignId, saveAsTemplate) {
    var $v_0 = new RemoteCommand("MarketingAutomation", "CopyCampaign", null);
    $v_0.SetParameter("campaignId", campaignId);
    $v_0.SetParameter("saveAsTemplate", saveAsTemplate.toString());
    var $v_1 = $v_0.Execute(),
        $v_2 = $v_1.ReturnValue;
    openObj(Mscrm.EntityTypeCode.Campaign, $v_2, null, null, Mscrm.NavigationMode.NavigationModeInline, null);
    Mscrm.Utilities.refreshParentGrid(Mscrm.EntityTypeCode.Campaign, campaignId)
};

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

Мне удалось позвонить из JScript, чтобы отправить сообщение «Назначить» для объекта в качестве теста.Это потенциально может работать с плагином, но кажется странным отправлять сообщение для события выполнения, которое на самом деле не происходит, просто для запуска некоторого кода C # («Назначить», «Обновить» и т. Д.), И я нене вижу способа создавать свои собственные сообщения.

Ответы [ 5 ]

10 голосов
/ 23 февраля 2011

Вы не можете добавлять свои собственные веб-сервисы или создавать свои собственные пользовательские сообщения плагинов в 2011 году. Лучший способ, который мы нашли, это:

  1. Настройка существующей сущностиисключительно для запуска пользовательского кода на сервере.
  2. Присвойте ему атрибуты, называемые именем сообщения, и другое свойство для передачи параметров в любом формате, который вы выберете (XML, JSON и т. д.)
  3. Из вашего JavaScript, создайте экземпляр этой сущности, передавая правильные параметры.
  4. Подключите плагин к сообщению «Создать» этой сущности, а затем он считывает параметры и выполняет любой пользовательский код, который вы хотите.

Хотя случайная передача сообщения «Назначить» или что-то может сработать, это, вероятно, не поддерживается в глазах Microsoft, и было бы чертовски трудно отлаживать, если бы кто-нибудь еще взглянул на эту систему.

4 голосов
/ 01 июня 2011

Есть еще один способ, вставить две формы в форму, когда вы нажимаете пользовательскую кнопку, которую вы создали на ленте, установите значение двух параметров на true, а затем запускаете метод сохранения формы в плагине, который вы создали дляСущность проверяет, является ли значение двух опций истинным, затем запустите ваши коды, после чего установите значение двух опций в ложное значение снова.также в форме вы можете сделать эти две опции невидимыми.

1 голос
/ 21 мая 2012

Хорошо, написание большого количества логики JavaScript - грязное занятие, но создание js-кода, который запускает «настоящую» логику с помощью операции создания (более или менее шаблона команды), также приведет к сложному решению.

В зависимости от уровня сложности и требований (например, выполнение операции над поведением другого пользователя в js невозможно), я всегда предпочел бы подход чисто js. Чтобы уменьшить сложность, попробуйте библиотеку, которая предоставляет вам ядро ​​функционально:

CrmRestKit

XrmServiceToolkit

Веселись

Daniel

1 голос
/ 29 августа 2011
0 голосов
/ 10 апреля 2017

Я опаздываю на вечеринку здесь, но просто для упрощения тем, кто ищет в этой теме новейшую версию CRM (потому что она помечена как crm online): в настоящее время существует нечто, называемое «Action», которое можетбыть создан так же, как Workflow или Business Process Flow.Вы можете указать входные и выходные параметры для этого действия.Основные преимущества:

  • вы можете зарегистрировать плагин для этого действия, поэтому вместо запуска логики jScript вы можете запустить некоторую логику c #

  • вы можетевызовите это действие, используя webAPI

Что касается CRM 2011, хотя он и так уже устарел - лучший подход, чем предложенный в принятом действии, состоит в том, чтобы запустить вашу логику на post RetrieveMutliple вашей пользовательской сущности, чтобывы будете избегать создания / удаления некоторых магических записей (а пользователям нужно будет иметь только привилегию чтения для них, а не создавать или обновлять).

...