Files
wiki/Plano.md
2026-07-20 17:50:53 +00:00

6.8 KiB

title, description, published, date, tags, editor, dateCreated
title description published date tags editor dateCreated
Plano true 2026-07-20T17:50:50.235Z markdown 2026-06-22T19:36:05.776Z

Correção da persistência do campo WoNotInterface

Contexto

Hoje a persistência do campo Interface para ordens/notas depende de getSelectedIndex() no Select editorOption.

O problema é que os itens desse Select são montados dinamicamente em fillWorkOrderNotificationInterface(). Como a lista muda conforme a existência de WebGuiLink e FioriLink, o índice visual não é confiável para representar o valor técnico salvo em WoNotInterface.

Em outras palavras:

  • 0 nem sempre deve significar apenas a primeira opção visível
  • 1 nem sempre corresponde a G
  • 2 nem sempre corresponde a F

O campo precisa persistir o valor técnico real da opção selecionada:

  • '' para padrão SIGGA P&S
  • G para SAP WebGUI
  • F para SAP Fiori

Problema atual

Trecho atual:

oParam.WoNotInterface = this.getWoNotInterfaceFieldMap(this._control.editorOption.getSelectedIndex().toString());

O que faz

Lê o índice selecionado de editorOption, converte para string e envia esse valor para getWoNotInterfaceFieldMap(...).

Por que existe

A implementação atual tenta mapear posição visual do Select para o valor persistido em WoNotInterface.

Qual problema evita

Na prática, não evita o problema principal. Como editorOption é montado dinamicamente, getSelectedIndex() não representa de forma estável OrdNotInterface.Default, OrdNotInterface.WebGui ou OrdNotInterface.Fiori.

Objetivo da correção

A correção deve fazer editorOption trabalhar com key explícita por item, usando os valores técnicos definidos em OrdNotInterface.

Isso permite que a persistência use getSelectedKey() em vez de getSelectedIndex(), removendo a dependência da posição visual.

Valores esperados para WoNotInterface:

  • OrdNotInterface.Default -> ''
  • OrdNotInterface.WebGui -> 'G'
  • OrdNotInterface.Fiori -> 'F'

Bloco 1: montagem do Select

fillWorkOrderNotificationInterface() {
    const aItems = [{
        key: OrdNotInterface.Default,
        text: this.getResourceText("WorkOrderNotificationInterfacePSOption")
    }];

    if (this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.WebGuiLink) {
        aItems.push({
            key: OrdNotInterface.WebGui,
            text: this.getResourceText("WorkOrderNotificationInterfaceWebGuiOption")
        });
    }

    if (this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.FioriLink) {
        aItems.push({
            key: OrdNotInterface.Fiori,
            text: this.getResourceText("WorkOrderNotificationInterfaceFioriOption")
        });
    }

    this._control.editorOption.destroyItems();

    aItems.forEach((item) => {
        this._control.editorOption.addItem(new sap.ui.core.Item({
            key: item.key,
            text: item.text
        }));
    });

    const sInterface = this.getWoNotInterfaceFieldMap(
        this._control.DataSourceForm.getModel(GENERAL_MODEL).oData.WoNotInterface
    );

    this._control.editorOption.setSelectedKey(sInterface);
}

O que faz

Esse bloco monta o editorOption com key explícita para cada item e depois seleciona o valor salvo usando setSelectedKey(...).

Por que existe

Ele garante que cada opção visível no Select represente diretamente um valor técnico de WoNotInterface, usando OrdNotInterface como fonte de verdade.

Qual problema evita

Evita que editorOption dependa da posição do item na lista. Com getSelectedKey(), o código deixa de assumir que a segunda opção sempre é G ou que a terceira sempre é F.

Bloco 2: normalização do valor

getWoNotInterfaceFieldMap(value) {
    if (value === '1') {
        return OrdNotInterface.WebGui;
    }

    if (value === '2') {
        return OrdNotInterface.Fiori;
    }

    if (value === '0' || value === '' || value == null) {
        return OrdNotInterface.Default;
    }

    if (value === OrdNotInterface.WebGui) {
        return OrdNotInterface.WebGui;
    }

    if (value === OrdNotInterface.Fiori) {
        return OrdNotInterface.Fiori;
    }

    return OrdNotInterface.Default;
}

O que faz

Esse bloco normaliza o valor de WoNotInterface, aceitando tanto o formato legado por índice (0, 1, 2) quanto o formato correto por valor técnico ('', G, F).

Por que existe

Ele preserva compatibilidade durante a transição. Se ainda houver dado legado ou algum fluxo antigo passando índice, o método converte isso para o valor real esperado por OrdNotInterface.

Qual problema evita

Evita inconsistência entre leitura e gravação de WoNotInterface. Também impede que editorOption quebre ao carregar registros antigos ainda dependentes de getSelectedIndex().

Bloco 3: persistência

oParam.WoNotInterface = this.getWoNotInterfaceFieldMap(this._control.editorOption.getSelectedKey());

O que faz

Esse bloco persiste WoNotInterface a partir do key selecionado em editorOption.

Por que existe

A persistência precisa usar getSelectedKey() porque o valor técnico correto está no key do item, não na sua posição visual.

Qual problema evita

Evita que WoNotInterface grave G ou F incorretamente quando a ordem do Select mudar. Também elimina a fragilidade do uso de getSelectedIndex().

Referências de código

Arquivos relevantes:

  • webapp/controller/Config/auxiliary/ConfigGeneralAuxiliary.js
  • webapp/resources/js/constant/OData/OrdNotInterface.js

Pontos principais em ConfigGeneralAuxiliary.js:

  • montagem do editorOption
  • normalização de WoNotInterface
  • persistência de oParam.WoNotInterface

Fonte de verdade dos valores técnicos:

  • OrdNotInterface.Default
  • OrdNotInterface.WebGui
  • OrdNotInterface.Fiori

Resultado esperado

Após a correção:

  • WoNotInterface passa a ser persistido como '', G ou F
  • editorOption deixa de depender da posição visual dos itens
  • getSelectedKey() substitui getSelectedIndex() no fluxo correto
  • a exibição dinâmica das opções não influencia mais o valor salvo

Cenários de validação

  • Somente opção padrão disponível:

    • editorOption exibe apenas SIGGA P&S
    • WoNotInterface salva ''
  • WebGUI disponível:

    • editorOption exibe SIGGA P&S e SAP WebGUI
    • ao selecionar SAP WebGUI, WoNotInterface salva G
  • Fiori disponível:

    • editorOption exibe SIGGA P&S e SAP Fiori
    • ao selecionar SAP Fiori, WoNotInterface salva F
  • Combinações diferentes de opções visíveis:

    • mesmo com ordem visual variável, WoNotInterface continua persistindo o valor correto
  • Reabertura da tela:

    • o valor salvo volta corretamente selecionado via setSelectedKey(...) no editorOption