--- title: Plano description: published: true date: 2026-07-20T17:50:50.235Z tags: editor: markdown dateCreated: 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: ```js 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` ```js 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 ```js 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 ```js 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`