CALL FUNCTION 'SOTR_SERV_STRING_TO_TABLE'
EXPORTING
text = lr_struct_srv->ztexto_longo
flag_no_line_breaks = ''
line_length = 132
TABLES
text_tab = lt_line. " Text Table
Dicas para desenvolvedores ABAP.
CALL FUNCTION 'SOTR_SERV_STRING_TO_TABLE'
EXPORTING
text = lr_struct_srv->ztexto_longo
flag_no_line_breaks = ''
line_length = 132
TABLES
text_tab = lt_line. " Text Table
FUNCTION zfmmm_inforecord_maintain_m
IMPORTING
VALUE(iv_task) TYPE string
TABLES
ct_eina TYPE mewieina_mig_t OPTIONAL
ct_einax TYPE mewieinax_t OPTIONAL
ct_eine TYPE mewieine_t OPTIONAL
ct_einex TYPE mewieinex_t OPTIONAL
ct_txt_lines TYPE mewipirtext_tt OPTIONAL
ct_cond_validity TYPE mewivalidity_tt OPTIONAL
ct_condition TYPE mewicondition_tt OPTIONAL
ct_cond_scale_value TYPE mewiscaleval_tt OPTIONAL
ct_cond_scale_quan TYPE mewiscalequan_tt OPTIONAL
ct_return TYPE fs4mig_t_bapiret2 OPTIONAL.
DATA: lt_return TYPE fs4mig_t_bapiret2.
DATA: lv_infnr TYPE eina-infnr.
gv_esperar = abap_false.
CALL FUNCTION 'ZFMMM_INFORECORD_MAINTAIN_MULT'
DESTINATION 'NONE'
STARTING NEW TASK iv_task
PERFORMING f_recebe_dados_operacao ON END OF TASK
TABLES
ct_eina = ct_eina
ct_einax = ct_einax
ct_eine = ct_eine
ct_einex = ct_einex
ct_cond_validity = ct_cond_validity
ct_condition = ct_condition
ct_return = ct_return.
WAIT FOR ASYNCHRONOUS TASKS
UNTIL gv_esperar = abap_true.
*
ct_return[] = gt_return[].
CLEAR: lv_infnr.
READ TABLE ct_return ASSIGNING FIELD-SYMBOL(<lf_return>)
WITH KEY type = 'S'
id = '06'
number = '331'.
IF sy-subrc = 0.
lv_infnr = <lf_return>-message_v1.
DO 10 TIMES.
SELECT COUNT(*)
FROM eina
INNER JOIN eine
ON eina~infnr = eine~infnr
WHERE eina~infnr = lv_infnr.
IF sy-subrc = 0.
EXIT.
ENDIF.
WAIT UP TO 1 SECONDS.
ENDDO.
ENDIF.
ENDFUNCTION.
=================================
FORM f_recebe_dados_operacao USING iv_taskname.
DATA: lt_return TYPE TABLE OF fs4mig_s_bapiret2.
CLEAR gt_return.
RECEIVE RESULTS FROM FUNCTION 'ZFMMM_INFORECORD_MAINTAIN_MULT'
TABLES
ct_return = lt_return
EXCEPTIONS
resource_failure = 1
system_failure = 2
communication_failure = 3.
APPEND LINES OF lt_return TO gt_return.
ENDFORM.
Para oDataV4 , ocorre um erro ao tentar carregar os dados. Se procurar no SDN tem um post sobre esse erro e uma resposta que no V4 somente utilizando as annotations para analytics, link abaixo
=== VIEW ENTITY
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'TESTE'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define root view entity ZI_SZK1
as select from zszk_tab
{
key matnr as Matnr,
key status as Status,
waers as Waers,
@Semantics.amount.currencyCode: 'waers'
valor as Valor,
valor2 as Valor2
}
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Projectoi'
@Metadata.ignorePropagatedAnnotations: true
@Analytics.dataCategory: #CUBE
@UI.presentationVariant : [{
groupBy : [ 'Matnr' ],
total : [ 'Valor' ],
visualizations: [{
type: #AS_LINEITEM,
element: 'Valor'
}]
}]
=== PROJECTION
define root view entity ZC_SZK1
provider contract transactional_query
as projection on ZI_SZK1
{
@UI.facet: [
{
purpose: #STANDARD,
type: #IDENTIFICATION_REFERENCE,
targetQualifier: 'DPBP',
position: 10
}]
@UI.lineItem: [{ position: 10 }]
@UI.identification: [{ position: 10 }]
key Matnr,
@UI.lineItem: [{ position: 20 }]
@UI.identification: [{ position: 20 }]
key Status,
// @UI.lineItem: [{ position: 30 }]
// @UI.identification: [{ position: 30 }]
@Semantics.currencyCode: true
Waers,
@UI.lineItem: [{ position: 40 }]
@UI.identification: [{ position: 40 }]
@Semantics.amount.currencyCode: 'Waers'
@Aggregation.default: #SUM
Valor,
@UI.lineItem: [{ position: 50 }]
@UI.identification: [{ position: 50 }]
@Aggregation.default: #SUM
Valor2
}
No VS Code selecionar a opção de LIST REPORT PAGE, na seleção do tipo da tabela selecionar o Analytical
Tudo dentro da badi LE_SHP_DELIVERY_PROC
Tive q criar duas implementaçoes, uma para o processo de compra normal e outra para subcontratação
=== Compra normal
Método SAVE_DOCUMENT_PREPARE
==== Subcontratação - Solução muito louco por que precisa carregar os objetos do DRC para subcontração, fiz uma herança da Implementação da badi da subcontratação
Implentei todos os métodos herdados para redefinição mas sem código, a idéia é q mesmo q passe pelos métodos não seja executado nada nem na minha implementação como na classe superior
O único método implentado é o SAVE_DOCUMENT_PREPARE.
Adicionando campo customizado para regra de aprovação na configuração da administração de responsabilidade ;
SM30 - ATM_V_ATTRIBUT_C
Lembrar q o nome da definição tem q começar com Z_*, existe validação interna
2 - RSM_V_TC_S_ATR_C
Essa configuração é o q vai aparecer na tela do fiori
3 - ATM_V_ATRC_CDS_C
Essa configuração acho q não é necessário pq a busca ai ser definida na BADI
4 - Criação de implementação de lógica personalizada no FIORI
Contexto SD_RSM_CONTEXT_ATTRIB_CALC
No caso o filtro somente para SALES
Observações.
Classes para debugar usuário de workflow - externo
CL_RSM_TEAM_ATTRIBUTE_UTILS
CL_RSM_BADI_IMPL_TEAM
CL_RSM_TEAM_ATTRIBUTE
Utilizar classe cl_edoc_br_nfe_entity
Outra forma, tentei usar somente a classe cl_edoc_br_nfe_entity mas as estruturas vieram em branco, da forma abaixo consegui dar um bypass
DATA(lo_create_param) = NEW cl_edoc_br_create_entity_param( iv_xml = lv_file_raw ).
DATA(lo_entity) = new CL_EDOC_BR_NFE_ENTITY_CREATOR( ).
TRY.
lo_edoc_nfe ?= lo_entity-if_edoc_br_create_entity~create( lo_create_param ).
ENDTRY.
Por default aparece apenas a caixainha para desmarcar tudo, para habilitar para marcar tudo tem q fazer pelo VS Code. Com uma ressalva que é selecionado somente as linhas q estão na tela, linhas ocultas não são selecionadas, nesse caso existe uma solução mais porreta q não fiz mas fica o link abaixo
https://community.sap.com/t5/technology-blog-posts-by-members/how-to-select-all-rows-and-execute-custom-actions-on-a-list-report-like/ba-p/13984607