서버 작업 지속성 구성 요소를 사용하여 목표를 달성 할 수 있습니다. 이 구성 요소 (버전 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);
}