Использование JS для получения конкретной сущности - PullRequest
2 голосов
/ 17 октября 2011

У меня есть объекты, которые называются RegisteredUser и RegisteredApplication. RegisteredUser имеет обязательное поле с именем new_applicationid, которое заполняется с использованием Lookup, предназначенного для объекта RegisteredApplication.

Итак, когда я создаю нового пользователя, используя форму в CRM, я должен щелкнуть по поиску, найти соответствующее приложение и затем нажать OK.

Моя проблема заключается в том, что на данный момент существует только одно RegisteredApplication, и я хотел бы, чтобы Lookup был предварительно заполнен при загрузке формы.

Полагаю, я ищу что-то вроде

function FormLoad()
{
    var app = GetApplications()[0];

    //Set a lookup value
    var value = new Array();
    value[0] = new Object();
    value[0].id = app.id;                               // is this right?
    value[0].name = app.name;                           // is this right?
    value[0].entityType = "new_registeredapplication";  // is this right?

    Xrm.Page.getAttribute("new_applicationid").setValue(value);
}

function GetApplications()
{
    // what do I need to do in here to get a list of 
    // all the registered applications
}

Кто-нибудь может подсказать, как я могу подойти к чему-то подобному?

1 Ответ

2 голосов
/ 18 октября 2011

Примерно так будет работать

function FormLoad() {
    //could use OData here
    var url = Xrm.Page.context.getServerUrl() + '/XRMServices/2011/organizationData.svc/RegisteredApplicationSet';
    var request = new XMLHttpRequest();
    request.open("GET", serverUrl, true);
    request.setRequestHeader("Accept", "application/json");
    request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    request.onreadystatechange = function () {
        RequestComplete(request);
    }
    request.send();
}

function RequestComplete(request) {
    if (request.readyState == 4 && request.status == 200) {
        //parse out first result from returned results
        var results = JSON.parse(request.responseText);
        //we could use logic to select partic result here, for now just choose first one
        var selectedApp = results.d.results[0];

        //Set a lookup value
        var value = new Array();
        value[0] = new Object();
        value[0].id = selectedApp.new_registeredapplicationid;//guid of entity here                             
        value[0].name = selectedApp.new_name;//display property here
        value[0].type = <objecttypecode of entity here>;
        Xrm.Page.getAttribute("new_applicationid").setValue(value);
    }
}

Хорошая вещь об использовании OData здесь заключается в том, что вы можете реализовать логику для выбора конкретного RegisteredApplication, если / если у вас их больше одного.

Проверьте Дизайнер запросов OData И статья MSDN об использовании OData с MSCRM

Я оставлю вас, чтобы реализовать достаточную проверку null / undefined.

...