...
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 | ||
---|---|---|
|
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:
Visualiza o campo no notebook do databricks (código acima), por exemplo, o campo customerNumber
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”.
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”.
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')