2017-04-04 1 views
0

WAIT 사용에 대한 질문이 있습니다. 코드 검토 및 승인을 담당하는 내부 소스 코드 품질 팀과 협력합니다. 죄송 합니다만, WAIT UP TO x SECONDS 사용법은 금지되어 있으며 양도 할 수 없습니다. I이 의사 코드를 실행하면대기 오류를 방지하고 메모리를 확보하기 위해 WAIT를 바꾸는 방법

CALL FUNCTION 'ANY_FUNCTION_WITH_LOCK'. 

CALL FUNCTION 'ANY_FUNCTION_WITH_LOCK_2'. 

는 I 오류 (잠긴 물체) I 공유 객체를 사용하기 때문에 (I는 동기/비동기 모드 않고 기능 모듈을 사용)을 가질 것이다.

이 문제는 WAIT의 사용으로 해결할 수 있습니다.

CALL FUNCTION 'ANY_FUNCTION_WITH_LOCK'. 

WAIT UP TO 5 SECONDS. " or 1, 2, 3, 4, 5, ... seconds <------------ 

CALL FUNCTION 'ANY_FUNCTION_WITH_LOCK_2'. 

이 방법 (및 std 기능)을 사용하면 시스템이 중지되고 특정 시간 동안 대기합니다. 하지만 시스템에 1 초 이상 걸릴 수도 있습니다. 필요한 정확한 시간을 알 수 없습니다. 우리는 많은 수의 개체와 루프 내부에이 코드를 실행하면

하지만, 시스템은 메모리 덤프 때까지 무한 시간 동안 기다릴 수 있습니다.

의 필요성은 WAIT 명령을 대체하는 방법 입니다 필요

(매복 기능 VL32N, QA11, ... 그리고 해당 개체와 관련된)? 우리는 WAIT UP TO와 같은 동작을 가진 솔루션/기능을 찾아야하지만 사실 (... 덤프, 자원의 과도한 소비)

를 메모리 수준에 영향을 미칠 (이하)하지 않습니다 우리 COMMIT WORK AND WAIT과 같은 것이 필요하지만 데이터베이스가 아닌 기능의 결과가 필요합니다.

솔루션?

는 타임 스탬프 comparaison와 루프를 사용하여 X의 secondes 때까지 잠긴 개체의 목록을 얻을 필요한 객체가이 목록에 있는지 확인하는 ENQUEUE_READ를 사용합니다. 이 솔루션은 WAIT과 동일한 수준의 리소스가 필요합니다.

  • ENQUE_SLEEP는 아직 메모리 (How to make an abap program pause?)

  • 리팩터링 모든 코드에 WAIT 같은 동작을, 동기 기능을 사용할 것으로 보인다.

  • 다른 건 없습니까? 어떤 생각? 심지어 가능할까요? 사전 :

    +0

    둘 다 비동기 RFC의 기능을합니까? 아니면 'UPDATE TASK'를 사용합니까? 우선 나는 왜 '5 초간 기다려야하는지'에 초점을 맞추었고 그 질문에는 아무 것도 없습니다. 'x 초 기다리기'를 제거하는 것은 오히려 최소한 첫 번째 함수 모듈을 동기로 만들고 싶다는 의미이며, 내 관점에서 합리적인 해결책은 동기 화하는 것입니다. 다른 해결책은 재 시도 카운터를 도입하는 것인데, '기다려야합니다'를하지 않고 잠금 장치가 해제되거나 카운터가 올라올 때까지 다시 시도하는 것입니다. – Jagger

    +0

    이 'WAIT' 문 때문에 프로그램이 멍청하다고 말하는가? 그래서 그걸 제거하고 싶은거야? – Suncatcher

    +0

    표준 FM입니까? FM 대신 BAPI를 사용할 수 있습니까? – Brian

    답변

    1

    가 왜 그냥 두 기능 모듈 사이에서 잠금 체크를 넣어에서

    감사합니다? 잠금 장치를 FM 1에서 지우 자마자 루프 내부에 넣고 루프를 빠져 나올 수 있습니다.

    +0

    어떤 이유로 든 지워지지 않는다면 어떻게 될까요? – Jagger

    +0

    루프 패스 수에 제한이 필요합니다. 제한은 정확히 무엇을하고 있는지에 달려 있습니다. 일부 프로세스는 다른 프로세스보다 긴 대기 시간을 허용 할 수 있습니다. –

    0

    지정된 시간 동안 기다렸다가 다시 확인하려면 ENQUE_SLEEP을 사용합니다. 예를 들어 5 초를 기다린 다음 잠금 장치가 있는지 확인할 수 있습니다. 객체가 더 이상 잠겨 있지 않으면 계속 진행합니다. 자물쇠가 계속 있으면 다시 잠을 자. 무한 루프를 피하려면 일종의 오류를 포기하고 로그하기 전에 잠자기 할 횟수에 제한이 있어야합니다.

    WAIT의 문제점은 암시 적 커밋을 트리거한다는 것입니다. ENQUE_SLEEP하지 않습니다.

    관련 문제