Javascript 如何基于唯一值和其他表单中的值自动填充表单中的字段

Javascript 如何基于唯一值和其他表单中的值自动填充表单中的字段,javascript,workflow,dynamics-crm-2011,autofill,Javascript,Workflow,Dynamics Crm 2011,Autofill,我有一个4到5个自定义实体,每个实体有一个表单。从一个表单到另一个表单将有一个流畅的过程,例如,第一个实体预订屏幕有一个表单,填充后,用户将移动到下一个实体并填充其表单和下一个表单,依此类推 我想继续表格获得一些信息,这些信息是基于之前填写的表格,并根据第一个预订屏幕上分配的预订号码上传的 例如,预订屏幕表单具有: 名字、姓氏、预订号码唯一id和其他信息…我希望下一张表单可以选择输入唯一id,然后自动填写第一张表单中的姓名字段或其他信息 我们可以通过工作流或java脚本来实现这一点?我更喜欢ja

我有一个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);

   }

});

}
但这只是设置检索调用的唯一方法,对吗

我添加了json2和jQuery1.4.1.min库

现在我已经在我想要填充的表单的ONLOAD事件中添加了这个。我希望当我在表格上添加预订号码时,这将进入文本字段的更改事件,我想它应该从主表格(即预订屏幕)检索名字、姓氏、中间名、SSN

我该怎么做

我的最终代码,但它没有在表单字段上设置任何值 函数getContactDetails { var lookUpObjectValue=Xrm.Page.getAttributeinmate\u lookupbookingscree.getValue; 如果lookUpObjectValue!=null { var lookuptextvalue=lookUpObjectValue[0]。名称

    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); }
});

}

}

我假设这些表单实体之间存在关系。如果是这样,您可以从第一个屏幕到第二个屏幕获取值,等等。转到设置|自定义|自定义系统,选择您的实体,选择您的关系,对于类型dropdownlist select mappable,选择您的相关实体en finally select mappings。这里您可以可以在源字段和目标字段之间创建映射。

我会尝试重新思考您正在做什么,因为CRM在表单之间的工作并不流畅

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

我还将调查CRM 2013 Orion,因为它具有与流程相关的表格,这可能是有益的

如果你想在表单之间传递数据,你需要在表单之间建立一个关系,然后我会使用javascript。

获取您的odataSelect Url,并在浏览器中运行它。验证响应中是否返回了囚犯的名字和姓氏。如果返回了,则您的问题在于您的javascript。由于您的错误处理或您正在访问中的信息,它实际上没有收到响应看起来这不是问题所在在响应中正确,或者实体不包含名字或姓氏。若要检查这些问题,请在IE中使用F12调试来检查响应数据对象

除此之外,您的URL似乎缺少实体集逻辑名称。请尝试以下操作:

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

感谢Campey和Bokkie的回复。我将研究您的答案,并很快回复。看起来您的odata查询有了一个良好的开端。您的名字和姓氏字段是否没有填充?此外,正如Campey所建议的,如果您不包括名字和姓氏,可能会导致更干净的设计在第一个屏幕上显示ame,但允许他们选择/创建联系人。您甚至可以为此过程创建自定义联系人表单。您不希望允许您拥有的4-5个实体之间的名称不同。是的,他们没有被填充。不,我需要预订屏幕第一个屏幕中的名称。他们将以我希望自动填充的形式只读。说真的,伙计们,我需要帮助,为什么这不起作用?!我已经在这里使用了模式名setValueresult\u contact.inmate\u FirstName;但它仍然不起作用如果OdatSetName不是ContactSet怎么办?OdatSetName应该是什么?我正在将一个新用户保存在自定义实体中,而不是c我们在crm中拥有的ontact实体。它将始终采用设置的格式,但它区分大小写!我相信它使用架构名称的大小写,但我不确定。尝试将生成的OData URL粘贴到浏览器中,并一直调整它,直到它起作用。这是生成的URL,它会给我一个错误,请尝试尝试此操作s再次执行操作。如果问题仍然存在,请检查Microsoft Dynamics CRM社区以获取解决方案,或与您组织的Microsoft Dynamics CRM Ad联系
部长。最后,您可以与Microsoft支持部门联系@hkhan,请验证此部分是否有效:。然后试试这个:这是假设您的实体的名称是new_bookingscreen,而不是new_bookingscreen1它是new_bookingscreen1。我仍然会犯同样的错误。我已经尝试了上述修改url的方法: