2014-02-24 6 views
0

기본적으로 현재 실행중인 작업의 개체 관리자 이름을 확인해야합니다. 추가 이점은 작업 ID, 구성 요소 이름 (일반적으로), 구성 요소 그룹 이름, 서버 이름 및 엔터프라이즈 이름을 얻을 수도 있습니다.eScript로 Object Manager의 이름을 찾는 방법이 있습니까?

실제로 해결책이 here으로 제공되지만 심각한 제한이 있습니다. 순수한 메모리 내 객체이며 예제를 통한 쿼리를 지원하지 않는 Server Admin buscomps를 사용하는 한 모든 레코드를 반복해야합니다. 이로 인해 수백 또는 수천 개의 활성 작업을 수행하는 프로덕션 서버에서 성능 문제가 발생할 수 있습니다. 우리가 그 정보를 얻을 수있는 다른 방법이 있습니까?

답변

1

서버 작업 지속성 구성 요소를 사용하여 목표를 달성 할 수 있습니다. 이 구성 요소 (버전 8.0에서 도입)를 활성화하면 구성 요소 작업 정보가 S_SRM_TASK_HIST 테이블에 저장됩니다 (이 테이블의 각 buscomp는 "Enterprise Task History"입니다). 언급 된 비즈니스 구성 요소는 테이블을 기반으로하므로 일반적인 방식으로 쿼리 할 수 ​​있습니다. 구성 요소 비헤이비어를 설정하는 몇 가지 매개 변수가 있습니다. 나는. 매개 변수 "DeleteEventHistoryInterval"은 보관 된 작업 정보의 지속 시간 (기본적으로 24 시간)을 제어하고 매개 변수 "EnableEventHistory"은 각 서버 구성 요소에 대한 작업 정보가 저장되는지 여부를 제어합니다.

다음 eScript 코드가 작동하려면 서버 작업 지속 구성 요소가 실행 중이어야하며 대상 구성 요소에도 작업 기록 저장이 설정되어 있어야합니다. 우리는 또한 구성 요소 이름, 구성 요소 그룹 이름, 서버 이름를 얻을 수 있습니다 약간의 수정을 샘플에 태스크 ID를 얻을 기업 이름 및 필드의 전체 목록 다른 유용한 데이터는 (저장 Siebel Tools의 각 buscomp 정의 참조).

function Service_PreInvokeMethod (MethodName, psInputs, psOutputs) 
{ 
    if (MethodName == "Run") 
    { 
      var ProcessId = 0; 
      var ThreadId = 0; 
      var TaskId = 0; 
      var EntFound = false; 
      var SrvFound = false; 
      var TaskFound = false; 
      //Following two lines assume that Siebel server is running on Solaris OS 
      //Change as appropriate for other OS'es 
      ProcessId = SElib.dynamicLink("libsys.so", "getpid"); 
      ThreadId = SElib.dynamicLink("libpthread.so", "pthread_self"); 

      var boServerAdmin = TheApplication().GetBusObject("Server Admin"); 
      var bcEnterpriseServer = boServerAdmin.GetBusComp("Enterprise Server"); 
      var bcServerServer = boServerAdmin.GetBusComp("Server Server"); 
      var bcTaskHistory = boServerAdmin.GetBusComp("Enterprise Task History"); 

      with(bcEnterpriseServer) 
      { 
       ClearToQuery(); 
       ExecuteQuery(ForwardOnly); 
       EntFound = FirstRecord(); 
       while (EntFound) 
       //For all Enterprises 
       { 
        with(bcServerServer) 
        { 
         ClearToQuery(); 
         ExecuteQuery(ForwardOnly); 
         SrvFound = FirstRecord(); 
         while (SrvFound) 
         //For all Servers 
         { 
           with(bcTaskHistory) 
           { 
            ActivateField("O/S Proc Id"); 
            ActivateField("Thread Id"); 
            ActivateField("Task Id"); 
            ClearToQuery(); 
            SetSearchSpec("O/S Proc Id", ProcessId); 
            SetSearchSpec("Thread Id", ThreadId); 
            SetSortSpec("Task Start Time(DESCENDING)"); 
            ExecuteQuery(ForwardOnly); 
            TaskFound = FirstRecord(); 
            if (TaskFound) 
            { 
             //This sample returns TaskId 
             TaskId = GetFieldValue("Task Id"); 
             psOutputs.SetProperty("TaskId", TaskId); 
             return (CancelOperation); 
            } 
           } 
           SrvFound = NextRecord(); 
         } 
        } 
        EntFound = NextRecord(); 
       } 
      } 
      psOutputs.SetProperty("TaskId", NaN); 
      return (CancelOperation); 
    } 
    return (ContinueOperation); 
}