我正在处理两个实体,约会和费用。我的目标是让一个新的费用记录在指定费用日期时自动填充它的一些字段,即onChange。它触发一个查询,该查询应该返回具有相同日期和所有者用户的记录。
下面是我的代码:function bringData()
{
var date = Xrm.Page.getAttribute("new_tripDate").getValue();
var owner = Xrm.Page.getAttribute("ownerid").getValue();
if (owner != null)
{
var ownerID = owner[0].id;
var ownerName = owner[0].name;
}
var fetchXml="<fetch mapping='logical'>"+"<entity name='appointment'>"+"<attribute name='regardingobjectid'/>"+"<filter>"+"<condition attribute = 'ownerid' operator='eq' value='"+ownerID+"' />"+"<condition attribute='scheduledstart' operator='on' value='"+date+"' />"+"</filter>"+"</entity>"+"</fetch>";
var retrievedAppointments = XrmServiceToolkit.Soap.Fetch(fetchXml);
if (retrievedAppointments.length == 0)
{
alert("No matching records were found.");
return;
}
else
{
console.log(retrievedAppointments);
}
}
它从当前费用页获取日期并将其用于查询。但是,该函数在更改时给我一个错误,说日期"无效或超出支持范围"。我从查询中删除了日期条件,它根据拥有的用户返回记录,没有问题。我认为问题是在Appointment实体中有一个指定的时间,而不是在Expense日期上,但我认为使用"on"条件运算符可以解决这个问题。我很困惑。
谢谢
Xrm.Page.getAttribute("new_tripDate"). getvalue()返回的日期时间格式是fetch无法处理的,您至少需要将其转换为ISO格式。
通过使用ISOFormat方法更改日期格式,或者使用像moment.js这样的库或提出自己的小辅助函数来返回正确格式化的日期字符串。将日期变量替换为以下内容:
var date = new Date(Xrm.Page.getAttribute("new_tripDate").getValue()).toISOString();