No envio de email da oferta de frete você pode criar simbolos que poderam ser então alterados via BAdI /SCMTMS/IF_EX_TEND_SEND_MAILS, método REPLACE_TEXT_SYMBOL.
A SAP já provê alguns simbolos que são alterados por padrão, como por exemplo o número da ordem de frete.
- CARRIER: Carrier
- NUMBER: Number of bundled issues
- TEND_MANAGER: Full name of tendering manager
- WORKLIST: URL to carrier‘s worklist
- TEND_MANAGER_PHONE: Tendering manager's phone number
- TEND_MANAGER_FAX: Tendering manager's fax number
- TEND_MANAGER_MAIL: Tendering manager's e-Mail address
- RFQ_ID: Request for quotation
- FO_ID: Freight order
- SOURCE: Source location with address description
- DESTINATION: Destination location with address description
- START_DATE: Start date
- END_DATE: End date
- TR: Means of transport
- MULTI: Multi-pick indicator with number of stops
- VOLUME: Total net volume
- WEIGHT: Total net weight
- QUANTITY: Total quantity
- PRICE_LIMIT: Price limit
- PRICE_CHANGEABLE: Indicator, whether or not a new price is accepted
- RESPONSE_DATE: Response due date
- SUBMITTED_PRICE: Price submitted by the carrier
- QUOTATION_NUMBER: Sequence number of quotation within the RFQ
- QUOT_SUBMISSION_DATE_TIME: Date/time, when quotation was submitted
No caso abaixo fizemos um desenvolvimento para reenviar o email após a adjucação da cotação; porém o assunto do email indicava sempre como Nova cotação aprovada. O usuário pediu então que fosse informado no assunto do email quando se tratava de uma nova aprovação ou modificação.
Criar um simbolo no email e ajustar na BAdi é tranquilo.. porém, como identificar se é um envio novo ou uma alteração?
Para isso tivemos que verificar a lista de programas chamados para identificar se havia sido feito o reenvio; no caso a classe que disparava a ação: ZCL_850_TOR_ROOT_A_SEND_AWARD=CP. Com isso identificamos quando era um reenvio/alteração.
CALL FUNCTION 'SYSTEM_CALLSTACK'
IMPORTING
et_callstack = lt_callstack.
READ TABLE lt_callstack INTO DATA(ls_callstack) WITH KEY progname = 'ZCL_850_TOR_ROOT_A_SEND_AWARD=CP'.
Uma coisa interessante da forma como a SAP entregou a solução é que você pode adicionar QUALQUER simbolo (termo) que poderá ser substituido no email. Não existe a necessidade de modificar qualquer estrutura. basta colocar o seu simbolo (parâmetro) entre &.
A processar a BAdI você vai ter na variável iv_symbol_name o simbolo a ser alterado. Aqui no meu exemplo definir como CHANGE_TYPE.
iv_symbol_name = 'CHANGE_TYPE'.
Veja abaixo o código implementado.
* Lembre-se o uso do código abaixo é por sua conta e risco.
DATA lt_callstack TYPE sys_callst.
CALL FUNCTION 'SYSTEM_CALLSTACK'
IMPORTING
et_callstack = lt_callstack.
READ TABLE lt_callstack INTO DATA(ls_callstack) WITH KEY progname = 'ZCL_850_TOR_ROOT_A_SEND_AWARD=CP'.
IF sy-subrc EQ 0.
cv_symbol_value = get_text_from_msg_class(
iv_msg_number = '059' " CHANGE
iv_language = is_mail_content-language
).
ELSE.
cv_symbol_value = get_text_from_msg_class(
iv_msg_number = '060' " NEW
iv_language = is_mail_content-language
).
ENDIF.