以下のコードは、インナー関数からブール値を親関数displayButton()に返しますか?親関数は、ダイナミクスCRMのボタンをクリックすると呼び出されます。この関数は、ケースが選択され、選択されたものがアクティブか解決されているかどうかに応じてブール値を返す必要があります。内部関数から親関数に戻り値を返す - JavaScript、Dynamics crm
//function called on click of a button in ms crm.
function displayButton()
{
var Obj = parent.Xrm.Page.getAttribute("regardingobjectid");
var ObjValue = Obj.getValue();
//parent.Xrm.Utility.alertDialog(" Value: " + ObjValue);
if (ObjValue == null)
return false;
//else
// parent.Xrm.Utility.alertDialog(" Hi");
var EntityType = ObjValue[0].entityType;
var Guid = ObjValue[0].id;
var id = Guid.slice(1, -1);
//parent.Xrm.Utility.alertDialog(" Guid: " + id);
//Checking if regarding field is selected a case lookup value
if (EntityType == "incident")
{
var req = new XMLHttpRequest();
req.open("GET", parent.Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents(" + id + ")?$select=statecode", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function()
{
if (this.readyState === 4)
{
req.onreadystatechange = null;
if (this.status === 200)
{
debugger;
var result = JSON.parse(this.response);
//checking if selected case is active or resolved.
var statecode = result["statecode"];
var statecode_formatted = result["[email protected]"];
if (statecode_formatted == "Active") {
return true;
}
else if (statecode_formatted == "Resolved")
return false;
else {
return false;
}
}
else
{
parent.Xrm.Utility.alertDialog("Zero");
}
}
};
req.send();
}
else {
return false;
}
}
これも機能しません。 isActive変数にtrueまたはfalseの値が含まれていますが、親関数にtrueまたはfalseが返されません。私はそれを書いた if(isActive){ trueを返します。 } else { falseを返します。 } displayButton関数にtrueまたはfalseを返しません。 – Dinoop
あなたはそれが動作すると期待どおりに動作しません。これは私の答えとあなたの質問に対する他の答えが両方とも** no **である理由です:あなたはあなたの親の関数への非同期要求の結果を返すことはできません。内部関数の結果を処理する場合は、コールバックを使用する必要があります。'displayButton'自体が親関数ではなく、親関数を持っている場合は、最初にコールバックを' displayButton'に渡してから 'getCaseState'に渡します。 'displayButton'が親関数であれば、' isActive'の結果を扱っているので、 'return true'を使う必要はありません。 –
displayButtonは親関数です。私はisActiveを書いて返しました: getCaseState(aboutId、function(state){ var isActive = state === "アクティブ"; return isActive }); crmリボンのボタンは、displayButtonの戻り値に依存します。しかし、ケースが解決されてもボタンは表示されています。大文字と小文字が解決されたときにisActiveはfalseであるため、ボタンは表示されません。 – Dinoop