2013-08-02 2 views
0

У меня есть от 4 до 5 пользовательских объектов с одной формой. Будет определенный прогресс от одной формы к другой, например, первая сущность «Экран бронирования» имеет одну форму, после ее заполнения пользователь перейдет к следующему объекту и заполнит его форму, а затем и так далее.Как автоматически заполнить поле в форме на основе уникального значения и значений из другой формы

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

Например Форма заказа Экран имеет:

Имя, фамилия, номер брони (уникальный идентификатор) и другую информация ... Я хотел бы следующую форму, чтобы иметь возможность ввести уникальный идентификатор и затем автоматически заполнить поля имени или другую информацию из первой формы.

Мы можем либо сделать это с помощью рабочего процесса или скрипта java? Я бы предпочел использовать java-скрипт, поскольку рабочие процессы асинхронны.

Как я могу это сделать?

Используя вышеуказанные библиотеки и некоторый поиск я пришел с этим

function retrieveRecord(id, odataSetName, successCallback, errorCallback) { 

    var context = Xrm.Page.context; 

    var serverUrl = context.getServerUrl(); 

    var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc"; 



    //Asynchronous AJAX function to Retrieve a CRM record using OData 

    $.ajax({ 

    type: "GET", 

    contentType: "application/json; charset=utf-8", 

    datatype: "json", 

    url: serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "(guid'" + id + "')", 

    beforeSend: function (XMLHttpRequest) { 

     //Specifying this header ensures that the results will be returned as JSON.    

     XMLHttpRequest.setRequestHeader("Accept", "application/json"); 

    }, 

    success: function (data, textStatus, XmlHttpRequest) { 

     if (successCallback) { 

      successCallback(data.d, textStatus, XmlHttpRequest); 

     } 

    }, 

    error: function (XmlHttpRequest, textStatus, errorThrown) { 

     if (errorCallback) 

      errorCallback(XmlHttpRequest, textStatus, errorThrown); 

     else 

      errorHandler(XmlHttpRequest, textStatus, errorThrown); 

    } 

}); 

} 

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

Я добавил json2 и Jquery 1.4.1.min библиотеку.

Теперь я добавил это в свое событие ONLOAD формы, которую хочу заполнить. Я хочу, чтобы при добавлении номера бронирования в мою форму (это будет происходить на событии ON CHANGE в текстовом поле, которое, я думаю), оно должно получить имя, фамилию, второе имя, SSN # из основной формы, т.е. экран бронирования ..

Как это сделать?

мой окончательный код, но он не устанавливает каких-либо значений по полям формы функции getContactDetails() { вар lookUpObjectValue = Xrm.Page.getAttribute ("inmate_lookupbookingscree") ПолучитьЗначение(). if ((lookUpObjectValue! = Null)) { var lookuptextvalue = lookUpObjectValue [0] .name;

var lookupid = lookUpObjectValue[0].id; 
    //alert(lookupid); 


var serverUrl = Xrm.Page.context.getServerUrl(); 

//The XRM OData end-point 
var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc"; 


//var odataSetName = "ContactSet"; 

var odataSelect = serverUrl + ODATA_ENDPOINT + "/" + "(guid'" + lookupid + "')"; 

//alert(odataSelect); 

$.ajax({ 
    type: "GET", 
    contentType: "application/json; charset=utf-8", 
    datatype: "json", 
    url: odataSelect, 
    beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, 
    success: function (data, textStatus, XmlHttpRequest) { 

     var result_contact= data.d; 

     //alert(result_contact.AccountNumber); 
        //replace the fields with the fields on your entity 
        Xrm.Page.getAttribute("inmate_firstname").setValue(result_contact.inmate_firstname); 
        Xrm.Page.getAttribute("inmate_lastname").setValue(result_contact.inmate_lastname); 



    }, 
    error: function (XmlHttpRequest, textStatus, errorThrown) { alert('OData Select Failed: ' + odataSelect); } 
}); 

} 

}

+1

Похоже, у вас есть хорошее начало с вашим запросом отаты. Не заполняются ли поля вашего имени и фамилии? Кроме того, как предполагает Campey, вероятно, это приведет к более чистым дизайнам, если вы не включили имя и фамилию на первом экране, но вместо этого разрешили им выбирать/создавать контакт (вы могли бы даже создать настраиваемую форму контакта только для этого процесса). Вы не хотите, чтобы было возможно, чтобы имена были разными между 4-5 сущностями, которые у вас есть. – Daryl

+0

Да, они не заселяются. Нет Мне нужны имена на экране бронирования (первый экран). Они будут прочитаны только в том виде, в котором я хочу быть автозаполненным. – hkhan

+0

Серьезные ребята Мне нужна помощь, почему это не работает? !!! , и я уже использовал имя схемы здесь setValue (result_contact.inmate_FirstName); и он все еще не работает – hkhan

ответ

1

Я полагаю, что существует связь между этими формами (субъектами). Если это так, вы можете принимать значения с первого экрана на второй экран и т. Д. Перейти к настройкам | настройки | настроить систему, выбрать свою сущность, выбрать ваше отношение, для типа (dropdownlist) выбрать отображение, выбрать соответствующий объект и наконец выбрать сопоставления. Здесь вы можете создавать сопоставления между полями-источниками и целевыми полями.

0

Я бы попытался переосмыслить то, что вы делаете, поскольку CRM не работает в полной мере между формами.

Вместо этого у вас будет ваше основное «Объект бронирования», а затем ссылка на Контакты и т. Д. (Поэтому, если вам нужно ввести имя и фамилию, вы должны нажать на ссылку «Контакт» и выбрать «Создать»), чтобы у вас была одна база форма, связанная с другими.

Я бы также исследовал CRM 2013 (Orion), поскольку у него есть связанные с процессом формы, которые могут быть полезными.

Если вы хотите передавать данные между формами, вам понадобятся отношения между формами, а затем я буду использовать javascript. Там есть куча хороших образцов, таких как этот. http://crmscape.blogspot.com.au/2011/03/crm-2011-odata-json-and-crm-forms.html

+0

Спасибо, что ответим за Campey и Bokkie. Я собираюсь изучить ваши ответы и вернуться с ответом в ближайшее время. – hkhan

0

Возьмите свой odataSelect Url и запустите его в браузере. Убедитесь, что в ответе возвращаются inmate_firstname и inmate_lastname. Если это так, то ваша проблема связана с вашим javascript. Либо он фактически не получает ответа (похоже, что это не проблема из-за вашей обработки ошибок), либо вы неправильно обращаетесь к информации в ответе (или сущность не содержит имя или фамилию). Чтобы проверить эти проблемы, используйте F12 для отладки в IE для проверки объекта данных ответа.

Все это в сторону, вы являетесь URL-адресом, так как ему не хватает логического имени набора объектов. Попробуйте следующее:

var odataSetName = "ContactSet"; 
var odataSelect = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "(guid'" + lookupid + "')"; 
+0

Что делать, если odataSetName не ContactSet? Что такое odataSetName? Я сохраняю нового человека в настраиваемом объекте, а не контактном объекте, который у нас есть в crm. – hkhan

+0

Он всегда будет в формате Set, но он чувствителен к регистру! Я считаю, что он использует случай с именем схемы, но я не уверен. Попробуйте создать URL-адрес OData, вставив его непосредственно в браузер и продолжайте настраивать его до тех пор, пока он не будет работать. – Daryl

+0

http: //vt-crm/JailManagementSystem/XRMServices/2011/OrganizationData.svc/new_bookingscreen1Set (guid '% 7BC9DDE392-3F03-E311-86C8-00155DF5D306% 7D') это URL-адрес, который генерируется, и он дает мне ошибка "Повторите попытку. Если проблема не исчезнет, ​​проверьте сообщество Microsoft Dynamics CRM на наличие решений или обратитесь к администратору Microsoft Dynamics CRM вашей организации. Наконец, вы можете обратиться в службу поддержки Microsoft." – hkhan

Смежные вопросы