Как передать объект расширению сервера FatFractal, получить доступ из расширения и вернуть объект обратно в клиентское приложение?

Я использую FatFractal JavaScript SDK и объявил расширение сервера в своем файле FFDL следующим образом:

CREATE EXTENSION /ChangePassword AS javascript:require('scripts/UserAdministration').changePassword();

Я создаю расширение сервера, чтобы пользователь мог изменить свой пароль для входа. Из моего клиентского приложения я хочу передать простой объект /ChangePassword, содержащий имя пользователя, вошедшего в систему, текущий (старый) пароль и новый желаемый пароль. Предполагая, что я заполнил указанный объект, как бы я тогда A) передал объект клиентского приложения расширению сервера, B) получил дескриптор переданного объекта в расширении сервера и C) вернул объект подтверждения (предпочтительно) или сообщение от серверного расширения к клиентскому приложению после завершения изменения?

ФФДЛ:

CREATE OBJECTTYPE ChangePasswordRequest (userName STRING, oldPassword STRING, newPassword STRING)
CREATE COLLECTION /ChangePasswordRequest OBJECTTYPE ChangePasswordRequest

JS-код клиентского приложения:

    ...

    function ChangePassInfo() {
        this.userName = null;
        this.currentPassword = null;
        this.newPassword = null;
        return this;
    }

    ...

    function changePassword() {
        var uname = ff.loggedInUser().userName;
        var oldPass = $("#input-curr-pass").val();
        var newPass = $("#input-new-pass").val();

        var requestInfo = new ChangePassInfo();
        requestInfo.userName = uname;
        requestInfo.currentPassword = oldPass;
        requestInfo.newPassword = newPass;

        // pass 'requestInfo' to 'ChangePassword' extension
        // acquire handle to confirmation object/message returned from 'ChangePassword'

        ...

    }

JS-код расширения сервера:

var ff = require('ffef/FatFractal');

...

function ChangePasswordRequest() {
    this.clazz = 'ChangePasswordRequest';
    this.createdBy = 'system';
    this.userName = null;
    this.oldPassword = null;
    this.newPassword = null;
    return this;
}

...

function changePassword() {

    var changePassReq; // instance of a 'ChangePasswordRequest' object

    // acquire handle to 'requestInfo' passed from client application to populate 'changePassReq'

    ...

    // return a confirmation message or copy of 'changePassReq' to client application

}

...

exports.changePassword = changePassword;

Разделы с комментариями - это проблемные области, которые я хочу решить. Как только они будут решены, я смогу заполнить остальную часть реализации. Спасибо!


person Joey Ventry    schedule 26.03.2013    source источник


Ответы (1)


Начнем с бэкенда. Предполагая, что объект был отправлен в расширение, вот как вы получаете его в своей функции:

var ff = require('ffef/FatFractal');     // FatFractal module
var data = ff.getExtensionRequestData(); // Get request data
var member = data.httpContent.member     // Get 'obj' member of passed object

Итак, теперь вы сделали кое-что и хотите что-то вернуть, вот как это сделать:

var r = ff.response();  // Get response object, and populate
r.result = { member: "Something", otherMember: false, yaMember: 42 };
r.responseCode = "200";
r.statusMessage = "This message is useful";
r.mimeType = "application/json";

Наконец, на стороне клиента. Вот как отправить объект в расширение:

var ff = new FatFractal();

// ...

ff.postObjToExtension({ member: "derp" }, "/yourExtension", ... );

Надеюсь, это прояснит ситуацию!

person Dave Wells    schedule 06.04.2013