222 lines
6.8 KiB
Markdown
222 lines
6.8 KiB
Markdown
---
|
|
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`
|