0

我有 4 到 5 个自定义实体,每个实体都有一个表单。从一个表格到另一个表格会有一个流畅的进展,例如,第一个实体“预订屏幕”有一个表格,填写后用户将移动到下一个实体并填写其表格和下一个等等。

我希望根据将在第一个预订屏幕上分配的预订号上传之前填写的表格,以便在处理表格中获取一些信息。

例如,预订屏幕表单具有:

名字、姓氏、预订号码(唯一 ID)和其他信息...我希望下一个表格可以选择输入唯一 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);

   }

});

}

但这只是设置检索调用的方法吗?

我添加了json2jquery 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); }
});

}

}

4

3 回答 3

1

我想这些形式(实体)之间存在关系。如果是这样,您可以将值从第一个屏幕带到第二个屏幕,等等。转到设置 | 定制 | 自定义系统,选择您的实体,选择您的关系,对于类型(下拉列表)选择可映射,选择您的相关实体,最后选择映射。您可以在此处创建源字段和目标字段之间的映射。

于 2013-08-02T21:04:58.567 回答
0

我会尝试重新考虑您在做什么,因为 CRM 在表单之间并不能真正流畅地工作。

相反,您将拥有主要的“预订实体”,然后链接到联系人等(因此,如果您需要输入名字和姓氏,您将单击联系人查找并选择“新建”),这样您就有一个与其他人相关的基本表单.

我还将研究 CRM 2013 (Orion),因为它具有与流程相关的表格,这可能是有益的。

如果你想在表单之间传递数据,你需要表单之间的关系,然后我会使用 javascript。那里有很多很好的样本,比如这个。 http://crmscape.blogspot.com.au/2011/03/crm-2011-odata-json-and-crm-forms.html

于 2013-08-04T23:29:32.757 回答
0

获取您的odataSelectURL,然后在浏览器中运行它。验证inmate_firstnameandinmate_lastname是否在响应中返回。如果是,那么您的问题出在您的 javascript 上。要么它实际上没有得到响应(看起来这不是问题,由于您的错误处理),或者您在响应中错误地访问了信息(或者实体不包含名字或姓氏)。要检查这些问题,请在 IE 中使用 F12 调试来检查响应数据对象。

除此之外,您的 URL 看起来缺少实体集逻辑名称。尝试这个:

var odataSetName = "ContactSet";
var odataSelect = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "(guid'" + lookupid + "')";
于 2013-08-06T12:33:15.400 回答