我知道专家会嘲笑这个问题,但我真的很挣扎。请看一下这个片段。我是CRM和JavaScript的新手。
所以问题在于,我从查询列表中选择的内容并不重要,它会弹出警报。我可以看到"不完整"并不匹配"完成"但它仍然会触发警报。
我是否需要编写ODATA查询来解决此问题?
Function MPMain_OnChange() {
try {
//get the work order status.
var wostatus = new Array();
wostatus =Xrm.Page.getAttribute("workorderstatus").getValue();
if (wostatus !=null) {
var name = wostatus[0].name;
if (name =="Completed") {
alert("Order Complete");
}
}
} catch {
//there is an error.
}
}
答案 0 :(得分:1)
在CRM 2016中,您可以使用Uncaught TypeError: Super expression must either be null or a function, not undefined
或getSelectedOption()
。可以找到文档here。在你的代码中,你会写:
getText()
这将返回具有文本和值属性的对象,例如var workOrderStatus = Xrm.Page.getAttribute("wordorderstatus").getSelectedOption();
。
我已经过测试,并且都在我的Dynamics CRM 2016开发环境中工作。这是我的Chrome浏览器控制台窗口的屏幕截图:
然后,您应该能够评估所选选项的文本并触发警报:
{ text: 'Complete', value: 1 }
注意我使用的是if (workOrderStatus === 'Completed') {
alert('Order Complete.);
}
而不是===
。有关详细信息,请参阅this SO answer。
如果这不起作用,您应该尝试调试。在浏览器中按F12,找到脚本并在函数开头输入断点。如果您在执行此操作时遇到困难,请将以下行放在函数顶部(并发布更改),按F12顶部打开开发人员控制台,然后触发onChange事件:
==
答案 1 :(得分:1)
重写了整个事情。这有效。并非所有JavaScript库项目都在Dynamics CRM中可用,例如getSelectedOption。
function MPMain_OnChange() {
try {
// Get the work order status.
var entityLabel, lookupFieldObject;
lookupFieldObject = Xrm.Page.data.entity.attributes.get('worksorderstatus');
if (lookupFieldObject.getValue() != null) {
entityLabel = lookupFieldObject.getValue()[0].name;
if (entityLabel != null && entityLabel == 'Completed')
Xrm.Page.getAttribute('datecompleted').setValue(new Date());
}
}
catch (error) {
}
}
分享可能来这种方式的任何人。谢谢!