1

SOAPリクエストを使用して、エンティティPriority Codeのオプションセット値を取得しようとしました。Task

if (typeof (SDK) == "undefined")
{ SDK = { __namespace: true }; }

SDK.SOAPSamples = {
    _getServerUrl: function () {

        var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
        var serverUrl = "";
        if (typeof GetGlobalContext == "function") {
            var context = GetGlobalContext();
            serverUrl = context.getServerUrl();
        }
        else {
            if (typeof Xrm.Page.context == "object") {
                serverUrl = Xrm.Page.context.getServerUrl();
            }
            else
            { throw new Error("Unable to access the server URL"); }
        }
        if (serverUrl.match(/\/$/)) {
            serverUrl = serverUrl.substring(0, serverUrl.length - 1);
        }
        return serverUrl + OrgServicePath;
    },
    assignRequest: function (successCallback, errorCallback) {


        if (successCallback != null)
            this._parameterCheck(successCallback, "Function", "The SDK.SOAPSamples.assignRequest method successCallback parameter must be a function.");

        this._parameterCheck(errorCallback, "Function", "The SDK.SOAPSamples.assignRequest method errorCallback parameter must be a function.");

        var request = "POST https://tamaldomain.api.crm5.dynamics.com/XRMServices/2011/Organization.svc/web";
        request += "Content-Type: text/xml; charset=utf-8";
        request += "SOAPAction: http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute";

        request += "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>";
        request += "<s:Body>";
        request += "<Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>";
        request += "<request i:type='a:RetrieveAttributeRequest' xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts'>";
        request += "<a:Parameters xmlns:b='http://schemas.datacontract.org/2004/07/System.Collections.Generic'>";
        request += "<a:KeyValuePairOfstringanyType>";
        request += "<b:key>MetadataId</b:key>";
        request += "<b:value i:type='c:guid' xmlns:c='http://schemas.microsoft.com/2003/10/Serialization/'>00000000-0000-0000-0000-000000000000</b:value>";
        request += "</a:KeyValuePairOfstringanyType>";
        request += "<a:KeyValuePairOfstringanyType>";
        request += "<b:key>RetrieveAsIfPublished</b:key>";
        request += "<b:value i:type='c:boolean' xmlns:c='http://www.w3.org/2001/XMLSchema'>false</b:value>";
        request += "</a:KeyValuePairOfstringanyType>";
        request += "<a:KeyValuePairOfstringanyType>";
        request += "<b:key>EntityLogicalName</b:key>";
        request += "<b:value i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>task</b:value>";
        request += "</a:KeyValuePairOfstringanyType>";
        request += "<a:KeyValuePairOfstringanyType>";
        request += "<b:key>LogicalName</b:key>";
        request += "<b:value i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>prioritycode</b:value>";
        request += "</a:KeyValuePairOfstringanyType>";
        request += "</a:Parameters>";
        request += "<a:RequestId i:nil='true' />";
        request += "<a:RequestName>RetrieveAttribute</a:RequestName>";
        request += "</request>";
        request += "</Execute>";
        request += "</s:Body>";
        request += "</s:Envelope>";

        var req = new XMLHttpRequest();
        req.open("POST", SDK.SOAPSamples._getServerUrl(), true)

        req.setRequestHeader("Accept", "application/xml, text/xml, */*");
        req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
        req.onreadystatechange = function () { SDK.SOAPSamples.assignResponse(req, successCallback, errorCallback); };
        req.send(request);

    },
    assignResponse: function (req, successCallback, errorCallback) {
        debugger;
        if (req.readyState == 4) {
            if (req.status == 200) {
                if (successCallback != null)
                { successCallback(); }
            }
            else {
                errorCallback(SDK.SOAPSamples._getError(req.responseXML));
            }
        }
    }

問題は、の値req.readyStateが1であるということです。これは、「サーバー接続が確立された」ことを意味します。しかし、それが正確に何を意味するのかわかりません。

req.readyStateこのリクエストから応答を取得できるように、の値を4に変更するにはどうすればよいですか?

どうもありがとう。

4

3 に答える 3

0

onreadystatechange イベントは、readyState の変更ごとに 1 回、合計 5 回 (0 ~ 4) トリガーされます。この状態の詳細については、こちらを参照してください。

于 2013-03-19T13:36:01.093 に答える
0

JavaScript でのプログラミングは、状況によっては面倒だと思います。そのため、JavaScript のみを使用する代わりに、"Generic Handler" (.ashx) を作成してソリューションをプログラムし、XmlHttpRequest オブジェクトを使用して JavaScript からこのハンドラーを実行します。

于 2013-03-20T15:32:54.573 に答える
0

req を SDK.SOAPSamples スコープに移動してから、次のように assignResponse で使用してみてください。

SDK.SOAPSamples = {
    req: null,
    _getServerUrl: function () { … },
    assignRequest: function (successCallback, errorCallback) { 
        //...           
        var req = SDK.SOAPSamples.req = new XMLHttpRequest(); 
        //...
    },
    assignResponse: function (successCallback, errorCallback) { //remove req param
        var req = SDK.SOAPSamples.req;

        if (req.readyState == 4) {
        if (req.status == 200) {
        if (successCallback != null) { successCallback(); }}
        else { errorCallback(SDK.SOAPSamples._getError(req.responseXML));}}
    }
}
于 2013-11-22T12:45:36.750 に答える