我有4到5个自定义实体,每个实体都有一个表单。从一种形式到另一种形式将会有一个流畅的进展,例如,第一个实体“预订屏幕”有一个形式,在填写之后,用户将移动到下一个实体并填写其形式和下一个等等。
我希望诉讼表单根据将在第一个预订屏幕上分配的预订编号,根据之前填写的表格获取一些信息。
例如,预订屏幕表格包含:
名字,姓氏,预订号码(唯一身份证)和其他信息......我希望下一个表单可以选择输入唯一ID,然后自动填写名称字段或其他信息形式。
我们可以通过工作流程或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#即预订屏幕..
我该怎么做?
我的最终代码,但它没有在表单字段上设置任何值 function getContactDetails() { var lookUpObjectValue = Xrm.Page.getAttribute(“inmate_lookupbookingscree”)。getValue(); 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); }
});
}
}
答案 0 :(得分:1)
我认为这些形式(实体)之间存在关联。如果是这样,您可以从第一个屏幕到第二个屏幕等取值。转到设置|自定义|定制系统,选择你的实体,选择你的关系,对于type(下拉列表)选择mappable,选择你的相关实体en最后选择映射。在这里,您可以在源字段和目标字段之间创建映射。
答案 1 :(得分:0)
我会尝试重新思考你在做什么,因为CRM在表格之间并没有真正有效地运作。
相反,您将拥有主要的“预订实体”,然后链接到“联系人”等(因此,如果您需要输入名字和姓氏,请单击“联系人”查找并选择“新建”),这样您就有了一个基本表格与他人有关。
我还会研究CRM 2013(猎户座),因为它有可能有益的过程相关形式。
如果你想在表单之间传递数据,你需要表单之间的关系,然后我会使用javascript。那里有很多好的样品,比如这个。 http://crmscape.blogspot.com.au/2011/03/crm-2011-odata-json-and-crm-forms.html
答案 2 :(得分:0)
带上您的odataSelect
网址,然后在浏览器中运行它。验证响应中是否返回了inmate_firstname
和inmate_lastname
。如果是,那么你的问题在于你的javascript。要么它实际上没有得到响应(由于您的错误处理,看起来这不是问题),或者您在响应中错误地访问了信息(或者实体不包含名字或姓氏)。要检查这些问题,请在IE中使用F12调试来检查响应数据对象。
除此之外,您的URL看起来像是缺少实体集逻辑名称。试试这个:
var odataSetName = "ContactSet";
var odataSelect = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "(guid'" + lookupid + "')";