adb reverse tcp:8081 tcp:8081 -> Forçar a porta para o seu PC
adb shell input text “RR” -> Forçar o reload
adb shell input keyevent 82 -> Forçar abrir o menu do react native
Comandos úteis React Native
Responder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
docker commit 822da9494718 aj/ngnix-ubuntu:1.1 -> gerar uma nova imagem a partir de um docker em execução docker run -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash -> executar o docker mandando a 80 do docker para a 8080 da máquina física docker run -d -i -t -p 8080:80 aj/ngnix-ubuntu:1.1 /bin/bash -> executar o docker mandando a 80 do docker para a 8080 da máquina física sem abrir o shell docker run -it --name web02 --link inspiring_bose:web01 aj/ngnix-ubuntu:1.0 /bin/bash -> para os dois dockers ficarem visível na rede um para o outro docker start 5aacdcd188f4 -> iniciar um docker que está parado docker inspect 5aacdcd188f4 -> obter as informações do docker docker exec 5aacdcd188f4 /etc/init.d/nginx start -> executar um comando dentro do docker sem entrar nele docker exec 5aacdcd188f4 ps -ef -> executar um comando dentro do docker sem entrar nele docker attach 27ed54219d4b -> entrar no shell do docker docker run -i -t ubuntu /bin/bash -> executar um docker e abrir o shell nele docker ps -a -q | ForEach { docker stop $_ } -> parar todos os dockers no powershell docker-compose up -d -> cria o docker de acordo com o Dockerfile docker build -t webserver:1.0 . -> cria o docker de acordo com o Dockerfile docker network ls -> redes docker network inspect laradock_backend -> obter detalhes da rede CTRL+Z CTRL+C -> Para sair do docker sem desliga-lo no powershell docker stats -> uso de recurso do docker docker ps -f "status=exited" -> filtrar os dockers para a exibição docker ps -a -> exibir todos os dockers apt-get install net-tools -> instalar o netstat netstat -atunp -> confirmar se o apache está escutando a porta 80 docker-compose up --force-recreate -> rodar o composer |
Exemplo de Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
FROM ubuntu MAINTAINER adeilson@gmail.com RUN apt-get update && apt-get install -y apache2 && apt-get install -y net-tools && apt-get clean ENV APACHE_LOCK_DIR="/var/lock" ENV APACHE_PID_FILE="/var/run/apache2.pid" ENV APACHE_RUN_USER="www-data" ENV APACHE_RUN_GROUP="www-data" ENV APACHE_LOG_DIR="/var/log/apache2" LABEL Description="Webserver" VOLUME /var/www/html # RUN /etc/init.d/apache2 start EXPOSE 80 CMD apachectl -D FOREGROUND |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 |
*&---------------------------------------------------------------------* *& Report ZADE7 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zade7. *&---------------------------------------------------------------------* *& TOP *&---------------------------------------------------------------------* TABLES: zade. TYPE-POOLS slis. "ALV * Estrutura de campos do relatório TYPES: BEGIN OF ty_ade. INCLUDE STRUCTURE zade. "Tab resultado RFC TYPES: handle_style TYPE lvc_t_styl, "Estilo edição novo TYPE c, "Tipo proc => Novo delete TYPE c. "Tipo proc => Eliminar TYPES: END OF ty_ade. DATA: t_ade_ori TYPE TABLE OF zade, "Tabela interna original. t_ade TYPE TABLE OF ty_ade, "Tabela interna com os campos para CRUD. t_fieldcat TYPE lvc_t_fcat, "Fieldcat alv w_fieldcat TYPE lvc_s_fcat, t_sort TYPE lvc_t_sort, "Ordenação w_sort TYPE lvc_s_sort, w_layout TYPE lvc_s_layo, "Layout alv t_new TYPE lvc_t_styl, "Registros novos w_new TYPE lvc_s_styl, t_edit TYPE lvc_t_styl, "Registros editar w_edit TYPE lvc_s_styl, t_show TYPE lvc_t_styl, "Registros exibir w_show TYPE lvc_s_styl, w_ade TYPE ty_ade, w_ade_ori TYPE zade, v_modific(1) TYPE c, "Modif ou Visual v_elimino(1) TYPE c, "Eliminou registro v_alterou(1) TYPE c, "Alterou registro v_inseriu(1) TYPE c, "Criou regitro t_ade_new TYPE TABLE OF ty_ade, "Registros novos w_ade_new TYPE ty_ade, t_ade_del TYPE TABLE OF ty_ade, "Registros eliminar w_ade_del TYPE ty_ade, t_ade_de2 TYPE TABLE OF zade, "Registros eliminar w_ade_de2 TYPE zade, t_ade_upd TYPE TABLE OF ty_ade, "Registros editar w_ade_upd TYPE ty_ade, t_ade_up2 TYPE TABLE OF zade, "Registros editar w_ade_up2 TYPE zade, v_log_handle TYPE balloghndl, "handle da mensagem v_msg TYPE abap_bool. *&---------------------------------------------------------------------* *& SCREEN *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-003. SELECT-OPTIONS: s_matnr FOR zade-matnr, " Centro s_descri FOR zade-descri NO INTERVALS NO-EXTENSION. " Data Documento SELECTION-SCREEN END OF BLOCK a. START-OF-SELECTION. * Limpar conteúdo dos objetos PERFORM zf_clear. * Selecionar registros PERFORM zf_selecionar_dados. * Estrutura de campos e layout do ALV PERFORM zf_alv_fieldcat. * Estrutura de campos ordenados no ALV PERFORM zf_alv_sort. * Mapeamento para registros novos PERFORM zf_new_fields. * Mapeamento para registros alterados PERFORM zf_edit_fields. * Mapeamento para visualizar registros PERFORM zf_show_fields. * Loop para montar tabela com campos editaveis ou não PERFORM zf_make_fields. * Exibir relatório ALV PERFORM zf_show_alv. END-OF-SELECTION. *&---------------------------------------------------------------------* *& FORMS *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form ZF_SELECIONAR_DADOS *&---------------------------------------------------------------------* FORM zf_selecionar_dados . SELECT * INTO TABLE t_ade_ori FROM zade WHERE matnr IN s_matnr AND descri IN s_descri. IF sy-subrc IS INITIAL. SORT t_ade_ori BY matnr. ELSE. MESSAGE 'Dados não encontrado!' TYPE 'I' DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. " ZF_SELECIONAR_DADOS *&---------------------------------------------------------------------* *& Form ZF_CLEAR *&---------------------------------------------------------------------* FORM zf_clear . CLEAR: v_modific, v_elimino, v_alterou, v_inseriu, t_fieldcat[], w_fieldcat, w_layout, w_new, t_new[], w_edit, t_edit[], w_show, t_show[], w_ade, t_ade[], t_ade_new[], w_ade_new, t_ade_del[], w_ade_del, t_ade_de2[], w_ade_de2, t_ade_upd[], w_ade_upd, t_ade_up2[], w_ade_up2, t_ade_ori[]. FREE: t_fieldcat[], t_new[], t_edit[], t_show[], t_ade[], t_ade_new[], t_ade_del[], t_ade_de2[], t_ade_upd[], t_ade_up2[], t_ade_ori[]. ENDFORM. " ZF_CLEAR *&---------------------------------------------------------------------* *& Form ZF_ALV_FIELDCAT *& Estrutura de campos e layout do ALV *&---------------------------------------------------------------------* FORM zf_alv_fieldcat . CLEAR t_fieldcat[]. * Campos do relatório w_fieldcat-tabname = 'T_ADE'. w_fieldcat-fieldname = 'MATNR'. w_fieldcat-edit = abap_false. w_fieldcat-ref_table = 'ZADE'. w_fieldcat-ref_field = 'MATNR'. * w_fieldcat-scrtext_l = 'CNPJ'. * w_fieldcat-scrtext_m = 'CNPJ'. * w_fieldcat-scrtext_s = 'CNPJ'. w_fieldcat-outputlen = 18. w_fieldcat-emphasize = abap_true. APPEND w_fieldcat TO t_fieldcat. CLEAR w_fieldcat. w_fieldcat-tabname = 'T_ADE'. w_fieldcat-fieldname = 'DESCRI'. w_fieldcat-edit = abap_true. w_fieldcat-ref_table = 'ZADE'. w_fieldcat-ref_field = 'DESCRI'. w_fieldcat-outputlen = 30. APPEND w_fieldcat TO t_fieldcat. CLEAR w_fieldcat. * Layout do relatório w_layout-zebra = abap_true. w_layout-stylefname = 'HANDLE_STYLE'. ENDFORM. " ZF_ALV_FIELDCAT *&---------------------------------------------------------------------* *& Form ZF_NEW_FIELDS *& Mapeamento para registros novos *&---------------------------------------------------------------------* FORM zf_new_fields . CLEAR t_new[]. w_new-fieldname = 'MATNR'. w_new-style = cl_gui_alv_grid=>mc_style_enabled. w_new-style2 = abap_false. w_new-style3 = abap_false. w_new-style4 = abap_false. INSERT w_new INTO TABLE t_new. CLEAR w_new. w_new-fieldname = 'DESCRI'. w_new-style = cl_gui_alv_grid=>mc_style_enabled. w_new-style2 = abap_false. w_new-style3 = abap_false. w_new-style4 = abap_false. INSERT w_new INTO TABLE t_new. CLEAR w_new. ENDFORM. " ZF_NEW_FIELDS *&---------------------------------------------------------------------* *& Form ZF_EDIT_FIELDS *& Mapeamento para registros a serem alterados *&---------------------------------------------------------------------* FORM zf_edit_fields . CLEAR t_edit[]. w_edit-fieldname = 'MATNR'. w_edit-style = cl_gui_alv_grid=>mc_style_disabled. w_edit-style2 = abap_false. w_edit-style3 = abap_false. w_edit-style4 = abap_false. INSERT w_edit INTO TABLE t_edit. CLEAR w_edit. w_edit-fieldname = 'DESCRI'. w_edit-style = cl_gui_alv_grid=>mc_style_enabled. w_edit-style2 = abap_false. w_edit-style3 = abap_false. w_edit-style4 = abap_false. INSERT w_edit INTO TABLE t_edit. CLEAR w_edit. ENDFORM. " ZF_EDIT_FIELDS *&---------------------------------------------------------------------* *& Form ZF_SHOW_FIELDS *& Mapeamento para visualizar registros *&---------------------------------------------------------------------* FORM zf_show_fields . CLEAR t_show[]. w_show-fieldname = 'MATNR'. w_show-style = cl_gui_alv_grid=>mc_style_disabled. w_show-style2 = abap_false. w_show-style3 = abap_false. w_show-style4 = abap_false. INSERT w_show INTO TABLE t_show. CLEAR w_show. w_show-fieldname = 'DESCRI'. w_show-style = cl_gui_alv_grid=>mc_style_disabled. w_show-style2 = abap_false. w_show-style3 = abap_false. w_show-style4 = abap_false. INSERT w_show INTO TABLE t_show. CLEAR w_show. ENDFORM. " ZF_SHOW_FIELDS *&---------------------------------------------------------------------* *& Form ZF_SHOW_ALV *& Exibir relatório ALV *&---------------------------------------------------------------------* FORM zf_show_alv . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = w_layout it_fieldcat_lvc = t_fieldcat i_callback_user_command = 'ZF_COMMANDS' i_callback_pf_status_set = 'ZF_STATUS' it_sort_lvc = t_sort TABLES t_outtab = t_ade[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc IS NOT INITIAL. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " ZF_SHOW_ALV *&---------------------------------------------------------------------* *& Form ZF_STATUS *& Botões do ALV *&---------------------------------------------------------------------* FORM zf_status USING ct_extab TYPE slis_t_extab. * DATA l_extab LIKE LINE OF ct_extab. CLEAR ct_extab. * AUTHORITY-CHECK OBJECT 'ZOAXXXX' * ID 'MATNR' FIELD p_matnr "Material * ID 'ACTVT' FIELD '01'. "Criar * IF NOT sy-subrc IS INITIAL. * MOVE '&NOVO' TO l_extab. * APPEND l_extab TO ct_extab. * ENDIF. * * AUTHORITY-CHECK OBJECT 'ZOAXXXX' * ID 'MATNR' FIELD p_emp "Material * ID 'ACTVT' FIELD '06'. "Excluir * IF NOT sy-subrc IS INITIAL. * MOVE '&DELE' TO l_extab. * APPEND l_extab TO ct_extab. * ENDIF. * * AUTHORITY-CHECK OBJECT 'ZOAXXXX' * ID 'MATNR' FIELD p_emp "Material * ID 'ACTVT' FIELD '02'. "Altera * IF NOT sy-subrc IS INITIAL. * MOVE '&MODF' TO l_extab. * APPEND l_extab TO ct_extab. * ENDIF. SET PF-STATUS 'ZPFADE7' EXCLUDING ct_extab. ENDFORM. "ZF_STATUS *&---------------------------------------------------------------------* *& Form ZF_MAKE_FIELDS *& Manutenção dos dados quando alterados *&---------------------------------------------------------------------* FORM zf_make_fields . LOOP AT t_ade_ori INTO w_ade_ori. MOVE-CORRESPONDING w_ade_ori TO w_ade. * w_ade-novo = abap_true. APPEND LINES OF t_show TO w_ade-handle_style. APPEND w_ade TO t_ade. CLEAR w_ade-handle_style[]. ENDLOOP. ENDFORM. " ZF_MAKE_FIELDS *&---------------------------------------------------------------------* *& Form ZF_COMMANDS *& Ação dos botões do ALV *&---------------------------------------------------------------------* FORM zf_commands USING ucomm TYPE sy-ucomm selfield TYPE slis_selfield. DATA: lv_tabix TYPE sy-tabix, lv_duplic(1) TYPE c, ref_grid TYPE REF TO cl_gui_alv_grid, lt_index_rows TYPE lvc_t_row, lt_row_no TYPE lvc_t_roid, lw_row_no TYPE lvc_s_roid. * Busca valores do ALV ------------------------------------------------* IF ref_grid IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid. ENDIF. IF NOT ref_grid IS INITIAL. CALL METHOD ref_grid->check_changed_data. ENDIF. * Refresh -------------------------------------------------------------* CASE ucomm. WHEN '&REFR'. * Atualizar alv PERFORM zf_refresh. WHEN '&MODF'. * Ver/Modificar registro ----------------------------------------------* IF v_modific IS INITIAL. LOOP AT t_ade INTO w_ade. lv_tabix = sy-tabix. CLEAR w_ade-handle_style[]. IF w_ade-matnr IS INITIAL. APPEND LINES OF t_new TO w_ade-handle_style. ELSE. APPEND LINES OF t_edit TO w_ade-handle_style. ENDIF. MODIFY t_ade FROM w_ade INDEX lv_tabix. ENDLOOP. v_modific = abap_true. ELSE. LOOP AT t_ade INTO w_ade WHERE matnr IS NOT INITIAL. lv_tabix = sy-tabix. CLEAR w_ade-handle_style[]. APPEND LINES OF t_show TO w_ade-handle_style. MODIFY t_ade FROM w_ade INDEX lv_tabix. ENDLOOP. v_modific = abap_false. ENDIF. * Novo registro -------------------------------------------------------* WHEN '&NOVO'. CLEAR w_ade. w_ade-mandt = sy-mandt. APPEND LINES OF t_new TO w_ade-handle_style. w_ade-novo = abap_true. APPEND w_ade TO t_ade. CLEAR w_ade-handle_style[]. * Eliminar registro ---------------------------------------------------* WHEN '&DELE'. CALL METHOD ref_grid->get_selected_rows IMPORTING et_index_rows = lt_index_rows et_row_no = lt_row_no. LOOP AT lt_row_no INTO lw_row_no. READ TABLE t_ade INTO w_ade INDEX lw_row_no-row_id. IF sy-subrc IS INITIAL. lv_tabix = sy-tabix. w_ade-delete = abap_true. MODIFY t_ade FROM w_ade INDEX lv_tabix. MOVE-CORRESPONDING w_ade TO w_ade_del. APPEND w_ade_del TO t_ade_del. CLEAR w_ade_del. ENDIF. ENDLOOP. DELETE t_ade WHERE delete = abap_true. * Gravar atualizações -------------------------------------------------* WHEN '&SAVE'. v_msg = abap_false. PERFORM log_create. * Valida registros novos t_ade_new[] = t_ade[]. DELETE t_ade_new WHERE novo IS INITIAL. DELETE t_ade WHERE novo IS NOT INITIAL. LOOP AT t_ade_new INTO w_ade_new. * Atualiza tabela de visualização do ALV READ TABLE t_ade INTO w_ade WITH KEY matnr = w_ade_new-matnr. IF sy-subrc IS INITIAL. lv_duplic = abap_true. ELSE. w_ade-matnr = w_ade_new-matnr. w_ade-descri = w_ade_new-descri. w_ade-novo = abap_false. CLEAR w_ade-handle_style[]. APPEND LINES OF t_show TO w_ade-handle_style. APPEND w_ade TO t_ade. ENDIF. ENDLOOP. * Insere registros na tabela original IF t_ade[] IS NOT INITIAL. * Atualizar registros LOOP AT t_ade INTO w_ade. lv_tabix = sy-tabix. * Adicionar/modificar registros IF w_ade-matnr IS INITIAL. PERFORM log_add USING 'Material deve ser preenchido!' 'E'. CONTINUE. ENDIF. w_ade_upd-matnr = w_ade-matnr. w_ade_upd-descri = w_ade-descri. READ TABLE t_ade_ori INTO w_ade_ori WITH KEY matnr = w_ade_upd-matnr. IF sy-subrc IS INITIAL. IF w_ade_ori-descri = w_ade_upd-descri. CONTINUE. ELSE. v_alterou = abap_true. ENDIF. ELSE. v_inseriu = abap_true. ENDIF. APPEND w_ade_upd TO t_ade_upd. ENDLOOP. * Alterar tabela de fornecedores CLEAR t_ade_up2[]. LOOP AT t_ade_upd INTO w_ade_upd. MOVE-CORRESPONDING w_ade_upd TO w_ade_up2. APPEND w_ade_up2 TO t_ade_up2. ENDLOOP. IF NOT t_ade_up2[] IS INITIAL. MODIFY zade FROM TABLE t_ade_up2. ENDIF. CLEAR t_ade_upd[]. ENDIF. * Elimina registros CLEAR t_ade_de2[]. LOOP AT t_ade_del INTO w_ade_del. MOVE-CORRESPONDING w_ade_del TO w_ade_de2. APPEND w_ade_de2 TO t_ade_de2. ENDLOOP. IF t_ade_de2[] IS NOT INITIAL. DELETE zade FROM TABLE t_ade_de2. v_elimino = abap_true. ENDIF. * Mensagens IF v_inseriu IS NOT INITIAL. PERFORM log_add USING 'Registro(s) inseridos(s) com sucesso!' 'S'. ENDIF. IF v_alterou IS NOT INITIAL. PERFORM log_add USING 'Registro(s) modificado(s) com sucesso!' 'S'. ENDIF. IF v_elimino IS NOT INITIAL. PERFORM log_add USING 'Registro(s) eliminado(s) com sucesso!' 'S'. ENDIF. IF lv_duplic IS NOT INITIAL. PERFORM log_add USING 'Um ou mais registros duplicados foram removidos!' 'S'. ENDIF. PERFORM log_show. * Atualizar alv PERFORM zf_refresh. ENDCASE. * SORT t_ade BY matnr. * Atualiza os dados no ALV selfield-refresh = abap_true. ENDFORM. "ZF_COMMANDS *&---------------------------------------------------------------------* *& Form ZF_REFRESH *& Atualizar alv *&---------------------------------------------------------------------* FORM zf_refresh . * Limpar conteúdo dos objetos PERFORM zf_clear. * Selecionar registros PERFORM zf_selecionar_dados. * Estrutura de campos e layout do ALV PERFORM zf_alv_fieldcat. * Estrutura de campos ordenados no ALV PERFORM zf_alv_sort. * Mapeamento para registros novos PERFORM zf_new_fields. * Mapeamento para registros a serem alterados PERFORM zf_edit_fields. * Mapeamento para visualizar registros PERFORM zf_show_fields. * Loop para montar tabela com campos editaveis ou não PERFORM zf_make_fields. ENDFORM. " ZF_REFRESH *&---------------------------------------------------------------------* *& Form ZF_ALV_SORT *&---------------------------------------------------------------------* FORM zf_alv_sort. CLEAR w_sort. w_sort-fieldname = 'MATNR'. w_sort-spos = '1'. w_sort-up = 'X'. APPEND w_sort TO t_sort. ENDFORM. " ZF_ALV_SORT *&---------------------------------------------------------------------* *& Form log_create *& Cria o handle do LOG *&---------------------------------------------------------------------* FORM log_create. DATA l_s_log TYPE bal_s_log. IF v_log_handle IS INITIAL. * create an initial log file l_s_log-extnumber = 'ZADE7'(001). CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING i_s_log = l_s_log IMPORTING e_log_handle = v_log_handle EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. * Limpar as mensagens anteriores CALL FUNCTION 'BAL_LOG_MSG_DELETE_ALL' EXPORTING i_log_handle = v_log_handle EXCEPTIONS log_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "log_create *&---------------------------------------------------------------------* *& Form LOG_ADD *& Adiciona mensagem para exibir *&---------------------------------------------------------------------* FORM log_add USING p_msg TYPE bal_s_msg-msgv1 p_msgty TYPE bal_s_msg-msgty. "E / W / S * p_probclass TYPE bal_s_msg-probclass. "1 / 2 / 3 DATA l_s_msg TYPE bal_s_msg. v_msg = abap_true. l_s_msg-msgid = '88'. l_s_msg-msgno = 0. l_s_msg-msgty = p_msgty. * l_s_msg-probclass = p_probclass. l_s_msg-msgv1 = p_msg. * add message to log file * (we explicitly specify I_LOG_HANLDE since we want to add this * message to the new opened log. The default log might be different * from this!). CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = v_log_handle i_s_msg = l_s_msg EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "LOG_ADD *&---------------------------------------------------------------------* *& Form LOG_SHOW *& Exibi a mensagem *&---------------------------------------------------------------------* FORM log_show. DATA: l_s_display_profile TYPE bal_s_prof. IF v_msg EQ abap_true. * get a prepared profile CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET' IMPORTING e_s_display_profile = l_s_display_profile EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * set report to allow saving of variants l_s_display_profile-disvariant-report = sy-repid. * when you use also other ALV lists in your report, * please specify a handle to distinguish between the display * variants of these different lists, e.g: l_s_display_profile-disvariant-handle = 'LOG'. * call display function module * We do not specify any filter (like I_S_LOG_FILTER, ..., * I_T_MSG_HANDLE) since we want to display all logs available CALL FUNCTION 'BAL_DSP_LOG_DISPLAY' EXPORTING i_s_display_profile = l_s_display_profile EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. "LOG_SHOW |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //var buffer1 = new BlockingCollection<int>(10); //Qtd maxima de 10 na pilha //var buffer2 = new BlockingCollection<int>(10); var buffer1 = new BlockingCollection<int>(); //Sem qtd maxima na pilha var buffer2 = new BlockingCollection<int>(); var f = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.None); //List<Task> t = new List<Task>(); //t.Add(f.StartNew(() => CreateInitialRange(buffer1))); Task[] tasks = new Task[3]; //Start the phases of the pipeline //Task stage1 = f.StartNew(() => CreateInitialRange(buffer1)); //Task stage2 = f.StartNew(() => DoubleTheRange(buffer1, buffer2)); //Task stage3 = f.StartNew(() => WriteResults(buffer2)); tasks[0] = f.StartNew(() => CreateInitialRange(buffer1)); tasks[1] = f.StartNew(() => DoubleTheRange(buffer1, buffer2)); tasks[2] = f.StartNew(() => WriteResults(buffer2)); //wait for the phases to complete //Task.WaitAll(stage1, stage2, stage3); Task.WaitAll(tasks); Console.WriteLine("Pressione uma tecla..."); Console.ReadLine(); } static void CreateInitialRange(BlockingCollection<int> output) { try { for (int i = 1; i <= 50; i++) { Console.WriteLine("Inicio {0}, qtd {1}", i, output.Count()); //Console.WriteLine("CreateInitialRange {0}", i); Thread.Sleep(200); output.Add(i); } } finally { output.CompleteAdding(); } } static void DoubleTheRange(BlockingCollection<int> input, BlockingCollection<int> output) { try { foreach (var number in input.GetConsumingEnumerable()) { Console.WriteLine("Meio {0}, qtd input {1}, qtd output {2}", number * number, input.Count(), output.Count()); Thread.Sleep(400); output.Add(number * number); } } finally { output.CompleteAdding(); } } static void WriteResults(BlockingCollection<int> input) { foreach (var squaredNumber in input.GetConsumingEnumerable()) { //Console.WriteLine("Result is {0}", squaredNumber); Console.WriteLine("Fim {0}, qtd {1}", squaredNumber, input.Count()); Thread.Sleep(800); } } } } |
Fonte: Link
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
REPORT zemail. DATA: send_request TYPE REF TO cl_bcs, text TYPE bcsy_text, document TYPE REF TO cl_document_bcs, sender TYPE REF TO cl_cam_address_bcs, recipient TYPE REF TO cl_cam_address_bcs, bcs_exception TYPE REF TO cx_bcs, sent_to_all TYPE os_boolean. BREAK-POINT. TRY. send_request = cl_bcs=>create_persistent( ). APPEND '<!doctype html public "-//w3c//dtd html 3.2 final//en">' TO text. APPEND '<html>' TO text. APPEND ' <head>' TO text. APPEND ' <title>Título</title>' TO text. APPEND ' </head>' TO text. APPEND ' <body>' TO text. APPEND ' <p align="center">' TO text. APPEND ' Corpo do e-mail' TO text. APPEND ' </p>' TO text. APPEND ' <br />' TO text. APPEND ' Em HTML' TO text. APPEND ' </body>' TO text. APPEND '</html>' TO text. document = cl_document_bcs=>create_document( i_type = 'HTM' i_text = text i_subject = 'Assunto E-MAIL' ). send_request->set_document( document ). sender = cl_cam_address_bcs=>create_internet_address( 'email@de.com.br' ). recipient = cl_cam_address_bcs=>create_internet_address( 'email@para.com.br' ). send_request->set_sender( sender ). send_request->add_recipient( EXPORTING i_recipient = recipient i_express = 'X' ). send_request->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = sent_to_all ). IF sent_to_all = 'X'. MESSAGE 'E-mail enviado com sucesso' TYPE 'I'. ENDIF. COMMIT WORK. CATCH cx_bcs INTO bcs_exception. MESSAGE bcs_exception->error_type TYPE 'E'. ENDTRY. |