Fwd: [DIF] Novas features

1 view
Skip to first unread message

Pedro Viegas

unread,
Sep 16, 2020, 5:44:49 AM9/16/20
to DIF2 Mailing list
Boa tarde,

Duas novas features relevantes:
(Já estão no HEAD na DIF 2.3.0-SNAPSHOT)

1. FilterSet em ListDataSet
Foi implementada a feature FilterSet nos ListDataSets onde não era ants suportada. Já conseguimos fazer os OR e outras combinações.


2. Submit de forms via AJAX (com Multipart inclusive)
Passa a ser possível fazer o submit de qualquer forma via AJAX quando desejado.
Para tal basta declarar na form uma nova inner tag chamada:

<dif:formOnAJAXSubmit resultVar="result" handleErrors="true">

Esta trasforma o URL da form para formato AJAX e o seu conteúdo é executado após a execução com sucesso do submit da form.
Exemplo de código da View e Stage:



View JSP:
Declara uma form com a formOnAJAXSubmit. Este código vai executar apenas se o submit for executado com sucesso.
Em caso de erro é reportado o mesmo para o ecran dado que foi usado o parâmetro handleErrors. Se quisermos obter dados que o servidor nos devolveu na resposta AJAX podermos obter da variável result que nós declaramos no parâmetro resultVar.

<dif:dialog id="grantConsentDialog" title="${messages.grantConsentDialogTitle}">
    <dif:form name="grantConsent" noActions="true" submitMaskText="${messages.grantingConsent}" confirmationMessage="${messages.areYouSureGrantConsent}">
        <dif:formText>${messages.grantConsentBOWarn}<br />
            <br />
        </dif:formText>
        <dif:hiddenField id="userID" value="${difrequest.parameters.userid }" />
        <dif:hiddenField id="consentID" />
        <dif:fileUploadField id="consentProof" />

        

        <dif:formOnAJAXSubmit resultVar="result" handleErrors="true">
            var form = document.forms.grantConsent;
            var consentID = form.consentID.value;
            var store = userconsents_grid.getStore();
            var record = store.findRecord('id',consentID + '');

            

            record.beginEdit();
            record.set('action','refresh');
            record.endEdit();
        </dif:formOnAJAXSubmit>
    </dif:form>

    <dif:dialogButton id="grant" title="${messages.authorize}" submitForm="grantConsent" />
    <dif:dialogButton id="cancel" title="${messages.cancel}" />
</dif:dialog>

Podemos ainda ver que a form está dentro de uma Dialog e um dos botões desta tem o parâmetro submitForm. Isto faz com que esse botão desponte o submit da form de forma automática.
Outra forma é o uso de um método que passa a ser sempre gerado pelas forms:

submit<nomeDaForm>

Neste caso seria

submitgrantConsentDialog();

Podemos ainda passar código para este método que em caso de ser um pedido AJAX será executado após o mesmo ter sucesso.

Stage Java:
Aqui podemos ver um novo tipo de retorno para métodos OnAJAXSubmit, chamado JSONResponse. Este recebe um true/false no construtor que indica sucesso ou não. Opcionalmente uma mensagem que quando presente e em caso de falha é mostrada automaticamente se o handleErrors estiver ligado na form da view.
Se for lançada uma exceção a mesma será tratada e mostrada no cliente (se o handleErrors estiver ligado. Mas será algo um pouco técnico.
Por último podemos adicionar ao JSONResponse o que quisermos através do método addItem(key,value). Estes valores estarão disponíveis na view dentro do result.

/**
 * @return the success or fail AJAX content
 * @throws Exception
 */
@OnAJAXSubmit("grantConsent")
protected JSONResponse submitGrantConsent() throws Exception
{
    if (errors.hasErrors())
        return new JSONResponse(false);
    else
    {
        DataConsent consent = rgpd.getDataConsentDataSet().get(consentID.toString());
        ActionResult result = RGPDManager.getInstance().giveConsent(userID, consent.getBusinessId(), consentProof,
                context.getLanguage());

        if (result.isSuccess())
            return new JSONResponse(true);
        else
        {
            if (result.getException() != null)
            {
                if (result.getException() instanceof RGPDException)
                {
                    RGPDException rgpdException = (RGPDException) result.getException();
                    return new JSONResponse(false, rgpdException.getUserFriendlyMessage(context.getLanguage()));
                }
                else
                    throw result.getException();
            }
            else
                throw new BusinessException(result.getMessage());
        }
    }
}


Obrigado.


Com os melhores cumprimentos,

Pedro Viegas
Director Departamento de Desenvolvimento
(Development Manager)


Reply all
Reply to author
Forward
0 new messages