Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

De acordo com a Figura abaixo pode-se a validação do retorno que ocorreu em xml e que identificamos que havia um bug na API.

...

Payload SAP ECC para o S4

O mapeamento dos campos permite realizar o de-para do payload das informações obtidas do SAP ECC para o S4. Tal processo foi realizada com o auxílio de uma planilha secundária (Anexo abaixo) que contém a dicionarização dos campos de cada tabela. Esta dicionarização possibilita mapear os campos do S4 a partir do SAP ECC, permitindo que a adequação dos campos sejam iguais.

View file
nameMapeamento BAPI SIMULATE ORDER ECC e S4.xlsx

Conforme o arquivo, a realização do mapeamento precisa do uso do notebook do databricks. O comando que cria o dataframe a partir dos campos do S4 está abaixo:

Code Block
dfvw= df.withColumn('customerNumber',get_json_object(to_json('d'),'$.results.Customer'))\
         .withColumn('salesOrganization',get_json_object(to_json('d'),'$.salesOrganization'))\
         .withColumn('division',get_json_object(to_json('A_SalesOrderSimulation'),'$.A_SalesOrderSimulationType.OrganizationDivision'))\
         .withColumn('termsOfPaymentKey',get_json_object(to_json('A_SalesOrderSimulation'),'$.A_SalesOrderSimulationType.CustomerPaymentTerms'))\
         .withColumn('salesDocumentType',get_json_object(to_json('A_SalesOrderSimulation'),'$.A_SalesOrderSimulationType.SalesGroup'))\
         .withColumn('distributionChannel',get_json_object(to_json('A_SalesOrderSimulation'),'$.A_SalesOrderSimulationType.DistributionChannel'))\
         .withColumn('shippingType',get_json_object(to_json('A_SalesOrderSimulation'),'$.A_SalesOrderSimulationType.IncotermsLocation1'))\
         .withColumn('clienteDaEntrega',lit(''))\
         .withColumn('materialNumber',get_json_object(to_json('d'),'$.results.Material'))\
         .withColumn('embalaLouca', when(get_json_object(to_json('rotationheader'),'$.customerGroup').cast(IntegerType()) >0,lit('true')).otherwise(lit('false')))\
         .withColumn('entregaPaletizada',lit('0').cast(BooleanType()))\
         .withColumn('dataInicioVigencia',get_json_object(to_json('quotationItems'),'$[1].returnDateForReturnablePackaging')) \
         .withColumn('cup',get_json_object(to_json('rotationheader'),'$.cup'))\
         .withColumn('plant',get_json_object(to_json('quotationItems'),'$.results.Plant'))\
         .withColumn('conditionUnit',get_json_object(to_json('quotationItems'),'$[1].conditionUnit'))\
         .withColumn('conditionPricingUnit' ,get_json_object(to_json('quotationItems'),'$[1].conditionPricingUnit'))\
         .withColumn('confirmedQuantity' ,get_json_object(to_json('quotationItems'),'$[1].confirmedQuantity'))\
         .withColumn('conditionBaseValue',get_json_object(to_json('quotationItems'),'$[1].conditionBaseValue'))\
         .withColumn('salePeriod' ,get_json_object(to_json('quoteConditions'),'$[0].salePeriod'))\
         .withColumn('salePrice',get_json_object(to_json('quoteConditions'),'$[0].salePrice'))\
         .withColumn('valueICMS',get_json_object(to_json('quoteConditions'),'$[0].valueICMS'))\
         .withColumn('valueICMSST',get_json_object(to_json('quoteConditions'),'$[0].valueICMSST'))\
         .withColumn('valueCofins',get_json_object(to_json('quoteConditions'),'$[0].valueCofins'))\
         .withColumn('valueIPI',get_json_object(to_json('quoteConditions'),'$[0].valueIPI'))\
         .withColumn('valuePIS',get_json_object(to_json('quoteConditions'),'$[0].valuePIS'))\
         .withColumn('totalValueItem',get_json_object(to_json('quoteConditions'),'$[0].totalValueItem'))\
         .withColumn('valueBonus',get_json_object(to_json('quoteConditions'),'$[0].valueBonus'))\
         .withColumn('discountTotal',get_json_object(to_json('quoteConditions'),'$[0].discountTotal'))\
         .withColumn('shippingPriceClosed',get_json_object(to_json('quoteConditions'),'$[0].shippingPriceClosed'))\
         .withColumn('insurancePriceClosed',get_json_object(to_json('quoteConditions'),'$[0].insurancePriceClosed'))\
         .withColumn('insurancePriceOpen',get_json_object(to_json('quoteConditions'),'$[0].insurancePriceOpen'))\
         .withColumn('manufacturingCost',get_json_object(to_json('quoteConditions'),'$[0].manufacturingCost'))\
         .withColumn('commercialCost',get_json_object(to_json('quoteConditions'),'$[0].commercialCost'))\
         .withColumn('otherCosts',get_json_object(to_json('quoteConditions'),'$[0].otherCosts'))\
         .withColumn('valueAdditionalSale',get_json_object(to_json('quoteConditions'),'$[0].valueAdditionalSale'))\
         .withColumn('valueTaxSubstitutionTributary',get_json_object(to_json('quoteConditions'),'$[0].valueTaxSubstitutionTributary'))\
         .withColumn('netValue',get_json_object(to_json('A_SalesOrderSimulation'),'$[0].A_SalesOrderSimulationType.NetAmount'))\
         .withColumn('salePricePeriodUnit',get_json_object(to_json('quoteConditions'),'$[0].salePricePeriodUnit'))\
         .withColumn('salePriceUnit',get_json_object(to_json('quoteConditions'),'$[0].salePriceUnit'))\
         .withColumn('tag',current_timestamp())\
         .withColumn('idsimulate',df.guuid)\
         .withColumn('dataProcesso',current_date())\

A metodologia para realizar o de-para é a seguinte:

  1. Visualiza o campo no notebook do databricks (código acima), por exemplo, o campo customerNumber

  2. Abre o arquivo do mapeamento em excel, utiliza a aba SAP ECC, procura este campo na coluna chamada “Campo Payload” e verifica o nome do campo na coluna “Parâmetro/Estrutura”.

  3. Utiliza a aba SAP S4 Hana, do mesmo arquivo, e verifica o mesmo nome de campo da coluna “Parâmetro/Estrutura”. Para este registro, obtém o campo correto na coluna “Campo do Payload”.

  4. Alterar o código

  • A partir do arquivo, na aba do SAP ECC, utiliza-se o campo chamado “Parâmetro/Estrutura” para visualizar o campo origem do SAP.

  • No código acima, realiza a adequação do campo para o mesmo nome do campo payload na cláusula que obtem o objeto do json - get_json_object(to_json('d'),'$.results.Customer')