계정 BC에서 사용자 지정 필드 "잠금 플래그"가 S_ORG_EXT_X 테이블에 있습니다. 이 필드는 위의 테이블에 조인을 사용하여 기회 BC에서 사용할 수 있습니다. 조인 스펙은 다음과 같습니다. Opportunity.Account Id = Account.Id. 새 기회를 만들 때 계정 ID는 항상 채워집니다. 요구 사항은 "잠금 플래그"가 'Y'와 같으면 기회 BC의 새로 생성 된 레코드에 대해 레코드를 생성하도록 허용해서는 안되며 사용자 정의 오류 메시지를 표시해야합니다.PreWriteRecord 이벤트 처리기에서 새 레코드를 확인하고 조인 된 필드의 값을 확인하십시오.
초기 제안은 유효성 검사 규칙이 평가되고 오류 메시지가 표시되는 데이터 유효성 검사 관리자 비즈니스 서비스를 호출하는 런타임 이벤트를 사용하는 것이 었습니다. 레코드를 작성할지 여부를 결정해야한다고 가정하면 WriteRecord가 이미 데이터베이스에 커밋 된 행을 가지고있는 한 로직을 PreWriteRecord 이벤트 핸들러에 배치해야합니다.
주요 문제점은 새로운 레코드인지 또는 업데이트 된 레코드인지를 확인하는 것이 었습니다. WriteRecordNew 및 WriteRecordUpdated 런타임 이벤트가 있지만 레코드가 실제로 기록 된 후에 실행되므로 사용자가 레코드를 저장할 수 없습니다. 내 다음 접근 방식은 eScript를 사용하는 것이 었습니다 : BusComp_PreWriteRecord 서버 스크립트에서 사용자 정의 코드를 작성하고 BC의 메소드 IsNewRecordPending을 호출하여 새로운 레코드인지 확인한 다음 필요하면 플래그를 점검하고 오류 메시지를 표시하십시오.
하지만 불행히도 나는 또 다른 문제에 직면하고 있습니다. 새롭게 생성 된 기회 레코드에 대해 조인 된 필드 "잠금 플래그"가 채워지지 않습니다. 우리는 BC Opportunity에 대해 이야기하고 있으며 필드는 S_ORG_EXT_X 테이블에 있습니다. 새로운 기회를 창출 할 때 우리는 그것이 속한 계정을 선택합니다. 재현 가능 : OpportunityBC.GetFieldValue ("잠금 플래그")는 새로 생성 된 레코드에 대해 null을 반환하고 이전에 저장 한 레코드에 대해 올바른 값을 반환합니다. 새로 생성 된 기회에 대해 BC에 다시 쿼리하여 "잠금 플래그"가 채워지는 것을 확인해야합니다. 레코드를 만든 직후에 조인 된 필드 값을 표시하려면 PreDefaultValue 속성을 사용하는 Oracle's recomendation 등 여러 문서를 발견했습니다. 내가 찾은 가장 적합한 표현은 학부모 : BCName.FieldName 이었지만 활성 BO는 기회와 기회 BC가 주된 원인이기 때문에 그렇지 않습니다.
- 이 PreWrite 이벤트를 처리하고 eScript와 BC를 사용하지 않고, 그것은 새로운 기록인지 아닌지 판단 할 수있는 방법이 있나요 : 당신이 여기까지 읽고 결국 내 질문에 오면 양해
감사합니다 .NewRecordPending 메소드?
특히 PreWriteRecord 이벤트 처리기에서 새로 만든 레코드의 조인 된 필드의 값을 가져 오는 방법은 무엇입니까? 내 질문의 첫 번째 부분에 대한 해답을 발견 :
이 UPDATE가
시벨 8.1입니다. 이제는 처음에 어떻게하지 않았는지 궁금해하고 있습니다. 여기에 해결책이 있습니다.
- PreWriteRecord에서 트리거 된 런타임 이벤트 만들기. Data Validation Manager 비즈니스 서비스에 대한 호출을 지정합니다.조건
NOT (BCHasRows ("기회", "기회", "[ID = '"+ [ID] + "'"이다 DVM에서
은 룰 및 규칙을 만들 "AllView"))
그게 전부입니다. 우리는 동일한 행 ID와 함께 기록을 찾고 있습니다. 새로운 레코드 인 경우 아직 데이터베이스에 아무 것도 없어야합니다 (우리는 PreWriteRecord 핸들러에 있음을 기억하십시오). 함수는 FALSE를 반환합니다. 우리가 어떤 행을 업데이트한다면 TRUE가됩니다. NOT으로 결과를 반전 시키면 DVM이 새 레코드에 오류를 발생시킵니다.
제 질문의 두 번째 부분은 PickMap을 사용하여 가입 필드를 채우기 위해 제안한 @RanjithR입니다 (아래 참조). 내가 그 방법을 확인하고 적어도 당신이 적절한 PickMap을 가지고 있다면 잘 작동합니다.
실제로 계산 된 필드에 대해서는 이미 제안한 방식대로 처리했습니다. 다양한 PreDefaultValue 표현식을 사용해 본 후에 생각하기 시작한 또 다른 방법이 있습니다. 잠시 PickMap이 내 마음 속에 들어 왔으며 테스트를 마친 후에도 효과가 있다고 말할 수 있습니다. 스크립팅하지 않고 새 레코드를 확인하는 방법을 찾았으며 곧 내 질문을 업데이트 할 것입니다. 어쨌든 당신의 모든 제안에 감사드립니다! –
안녕 Yaroslav, 그것은 BCHasRows를 사용하여 깔끔한 트릭입니다. 결코 생각하지 못했습니다. 그러나 BC의 모든보기에서 쿼리하는 경우 장기적으로 성능 문제가 나타날 수 있습니다. 하지만, 깔끔한 트릭은 전혀 없습니다 :-D –
Well ROW_ID 컬럼은 고유 한 인덱스를 가지고 있습니다. 확실히 쿼리는 리소스를 소모하지만 너무 많이 믿지는 않습니다. :) –