6.8 KiB
title, description, published, date, tags, editor, dateCreated
| title | description | published | date | tags | editor | dateCreated |
|---|---|---|---|---|---|---|
| Plano | true | 2026-06-22T19:37:58.369Z | 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:
0nem sempre deve significar apenas a primeira opção visível1nem sempre corresponde aG2nem sempre corresponde aF
O campo precisa persistir o valor técnico real da opção selecionada:
''para padrão SIGGA P&SGpara SAP WebGUIFpara 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.jswebapp/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.DefaultOrdNotInterface.WebGuiOrdNotInterface.Fiori
Resultado esperado
Após a correção:
WoNotInterfacepassa a ser persistido como'',GouFeditorOptiondeixa de depender da posição visual dos itensgetSelectedKey()substituigetSelectedIndex()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:
editorOptionexibe apenas SIGGA P&SWoNotInterfacesalva''
-
WebGUI disponível:
editorOptionexibe SIGGA P&S e SAP WebGUI- ao selecionar SAP WebGUI,
WoNotInterfacesalvaG
-
Fiori disponível:
editorOptionexibe SIGGA P&S e SAP Fiori- ao selecionar SAP Fiori,
WoNotInterfacesalvaF
-
Combinações diferentes de opções visíveis:
- mesmo com ordem visual variável,
WoNotInterfacecontinua persistindo o valor correto
- mesmo com ordem visual variável,
-
Reabertura da tela:
- o valor salvo volta corretamente selecionado via
setSelectedKey(...)noeditorOption
- o valor salvo volta corretamente selecionado via