2013-01-15 2 views
0

이것은 매우 이상한 질문이지만 사용자가이 특정 페이지를 떠날 때 SQL UPDATE를 실행하는 프로세스를 트리거 할 수 있는지 궁금해했습니다. 이동 경로, 탭 또는 뒤로 버튼?APEX 페이지를 떠날 때 프로세스 (SQL 업데이트) 트리거

'뒤로'버튼을 실행하는 프로세스를 설정했습니다. 그러나 나는 문제가 생겼다 : 만약 그가 빵 부스러기 나 탭을 대신 클릭하면 어떻게 될까?

나는 그물을 검색하고이 질문을 게시하는 것은 최후의 수단이었습니다. 나는 누군가가 올바른 방향으로 나를 가리킬 수 있을지 궁금해했다.
텍스트 필드와 버튼을 포함 : POST

페이지 1 업데이트]

. 사용자는 텍스트 필드에 카테고리를 입력하고 버튼을 클릭하여 다음 페이지로 진행합니다. 페이지
두 지역 : 버튼은 2 페이지

2 페이지에 텍스트 필드에있는 텍스트 필드의 값을 전달합니다. 하나의 지역에는 카테고리에 대한 정보 (이전 페이지의 카테고리 이름, 카테고리 설명 및 카테고리 개정 번호)가 있습니다. 두 번째 영역은 범주 텍스트 필드에 범주 아래에 나열된 항목 이름과 번호를 가져 오는 보고서입니다. 보고서에서 '보기'링크를 사용하여 선택한 특정 항목에 대한 편집 페이지를로드합니다. 리스트 : '보기'링크 (카테고리 텍스트 필드에서)이 '카테고리 이름', 3

페이지 3
두 영역이 사용된다 , 제 1 영역 페이지 보고서에서 '항목 번호를'통과 페이지 2에서 나온 항목 번호와 항목 이름 (검색하는 데 사용하는 간단한 쿼리). 두 번째 영역 : 보고서는 두 개의 열, 즉 열 1의 항목 속성 목록과 업데이트 할 수있는 값을 보유하기 위해 열 2의 각 항목 속성 옆에있는 텍스트 필드와 함께 사용됩니다. 'Apply Changes'버튼에는 필요에 따라 변경 사항과 업데이트를 찾는 Plasql이 있습니다. 변경된 관련 필드를 업데이트 한 다음 사용자를 Page 2 (사용자가 intitally 입력 한 범주에 대해 나열된 항목을 표시하는 페이지)로 다시 이동합니다.

사용자가 동일한 카테고리 아래의 항목에 대한 수정을 완료 할 수 있기 때문에 3 페이지의 '변경 사항 적용'버튼의 카테고리 개정을 늘릴 수 없습니다. 그래서 나는 카테고리별로 vist를 1 씩 증가시킬 수있는 곳을 모른다. Ps 3 페이지의 '변경 사항 적용'버튼을 사용하여 정보가 변경된 경우 이미 각 항목의 개정 번호를 1 씩 증가시킵니다.

+0

데이터 입력 양식 인 경우 변경 사항이 있는지 확인하고 업데이트를 실행하는 대신 사용자에게 확인 메시지가 표시되면 더 좋지 않습니까? – Tom

+0

@Tom 자바 스크립트를 사용하여 변경 사항을 확인하는 블로그 게시물을 찾았습니다. 그러나 페이지는 정보 만 표시하므로 편집이 완료되지 않습니다. 실제로 나는 그것이 당신의 블로그일지도 모른다라고 생각한다. – Blob

+0

페이지에서 어떤 식 으로든 사용자가 떠날 때 실제로 업데이트를 실행 하시겠습니까? 페이지를 방문하면 특별한 것을 유발해야합니까? 그들은 어떤 방식으로 상호 작용할 필요가 있습니까? 왜, 항목이 없다면 어떤 프로세스를 실행해야합니까? – Tom

답변

0

이렇게하는 한 가지 방법은 페이지 항목의 세션 상태를 업데이트하는 것입니다. 페이지를 정상적으로 제출) ajax를 통해 그리고 javascript onbeforeunload에 의해 호출 될 때 테이블을 업데이트하는 응용 프로그램 프로세스를 호출합니다.

응용 프로그램 만들기 UpdatePageXOnExit 또는 다른 이름으로 On Demand를 시작하는 프로세스.해당 응용 프로그램 프로세스의 PL/SQL 블록에서 업데이트 할 페이지의 각 항목의 항목 상태와 함께 SQL update 명령을 사용하십시오. 특정 페이지에 대한, 그리고 자바 스크립트에서 페이지 설정을

BEGIN 
    UPDATE table_name SET col1 = :PX_ITEM_1, col2 = :PX_ITEM_2, col3 = :PX_ITEM3, col4 = :PX_ITEM_4, col5 = PX_ITEM_5 
WHERE (condition... I would suggest ROWIDs to simplify changes to the 
     fields of the PK; otherwise you will have to create additional 
     page items for each field of the PK, then set those items to 
     the values of the PK when the page loads using a before 
     header page process, and then use those values in this where 
     clause like this: where col1 = :PX_ORIGINAL_PK_FIELD_1 AND col2 = 
     :PX_ORIGINAL_PK_FIELD_2); 
END ; 

이동합니다 다음과 같이, 페이지로드 섹션에서 실행을 다음과 같이 쓰기 :

window.onbeforeunload = updateOnExit; 

그리고 자바 스크립트를

function updateOnExit() { 
    var get = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=UpdatePageXOnExit',&APP_PAGE_ID.); 
    get.add('PX_ITEM_1',$x('PX_ITEM_1').value) 
    get.add('PX_ITEM_2',$x('PX_ITEM_2').value) 
    get.add('PX_ITEM_3',$x('PX_ITEM_3').value) 
    get.add('PX_ITEM_4',$x('PX_ITEM_4').value) 
    get.add('PX_ITEM_5',$x('PX_ITEM_5').value) 
    gReturn = get.get(); 
    get = null; 
    // Comment out the following line or not, as per the note in the following paragraph 
    return 'Are you sure you would like to leave the page?'; 
} 

이 마지막 부분은 페이지의 페이지 항목의 세션 상태를 업데이트하는 AJAX입니다 : 기능 및 글로벌 변수의 선언은 다음과 같이 쓰기 사용자가 끝나면 변경되었지만 페이지 제출 중에 일반적으로 발생하는 서버 끝으로 업로드되지 않은 페이지 수입니다. 참고 : return 문을 주석 처리하면 사용자가 페이지에 머물 수있는 경고 상자가 표시되지 않습니다. 그것이 당신이 선호하는 것이라면, 그것을 위해 가십시오. 경고 상자를 사용하도록 선택한 경우 사용자가 페이지에 머물기를 선택하더라도 Ajax는 페이지 프로세스를 실행합니다.

관련 문제