Búsqueda de procesos y tareas
TWSearch para definir qué columnas recuperar, qué filtros aplicar, cómo ordenar y organizar los resultados. También puede analizar los resultados en una lista de variables.Display all of the tasks for the Service Order Process that are active now or have been completed in the last 24 hours.TWSearch y sus objetos relacionados.- La información de referencia para el objeto
TWSearchestá disponible en la página JavaScript API in processes and service flows
página.
Estructura de una consulta de TWSearch
TWSearch incluye los pasos siguientes.- Defina las columnas de datos que desee obtener. Consulte Columnas.
- Defina los filtros que desee aplicar a una columna. Consulte Filtros de búsqueda.
- Defina el orden de clasificación de los registros devueltos. Consulte Orden de resultados de búsqueda.
- Defina cómo se organizan los resultados. Consulte Organización de resultados de búsqueda.
- Ejecute la búsqueda y analice los resultados en una lista de variables complejas. Consulte Ejecución de búsqueda.
TWSearch.var search = new TWSearch();Columnas
TWSearchColumn. El siguiente ejemplo de código define una columna que devuelve el identificador de una instancia de proceso.var colInstanceId = new TWSearchColumn();
colInstanceId.type = TWSearchColumn.Types.ProcessInstance;
colInstanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;ProcessInstance, Task y BusinessData.TWSearchColumn.Types.ProcessInstance
TWSearchColumn.Types.Task
TWSearchColumn.Types.BusinessDataLos nombres de los tipos de columna ProcessInstance y Task son predefinidos y no se pueden editar. Los nombres de columna para el tipo BusinessData se definen en las definiciones de proceso cuando una variable se marca como Disponible en la búsqueda. Para obtener más información sobre la búsqueda de datos empresariales, consulte Hacer que los datos empresariales estén disponibles en búsquedas y vistas.
serviceOrderNumber.var colServiceOrderNumber = new TWSearchColumn;
colServiceOrderNumber.type = TWSearchColumn.Types.BusinessData;
colServiceOrderNumber.name = "serviceOrderNumber";search.columns =
new Array(
colInstanceStatus,
colInstanceId,
colInstanceName,
colTaskId,
colTaskStatus,
colClosedDateTime,
colDueDateTime,
);
Filtros de búsqueda
TWSearchCondition. Por ejemplo, el siguiente ejemplo de código define una columna que obtiene el nombre de una instancia de proceso y limita posteriormente los resultados a los nombres de instancia de proceso que empiecen por Realización de pedido de servicio.var colInstanceName = new TWSearchColumn();
colInstanceName.type = TWSearchColumn.Types.ProcessInstance;
colInstanceName.name = TWSearchColumn.ProcessInstanceColumns.Name;
var condInstanceName = new TWSearchCondition;
condInstanceName.column = colInstanceName;
condInstanceName.operator = TWSearchCondition.Operations.StartsWith;
condInstanceName.value = "Service Order Fulfillment:";
TWDate, primero debe convertir la fecha a una serie cuando construya la condición. El siguiente ejemplo de código define una columna para devolver la fecha de vencimiento de la tarea y, a continuación, define un before y una condición de fecha de vencimiento de after.var colDueDateTime = new TWSearchColumn;
colDueDateTime.type = TWSearchColumn.Types.Task;
colDueDateTime.name = TWSearchColumn.TaskColumns.DueDate;
var condDueDateTimeBefore = new TWSearchCondition;
condDueDateTimeBefore.column = colDueDateTime;
condDueDateTimeBefore.operator = TWSearchCondition.Operations.LessThan;
condDueDateTimeBefore.value = tw.local.dueDateBefore.format("MM/dd/yyyy HH:mm:ss", "PST");
var condDueDateTimeAfter = new TWSearchCondition;
condDueDateTimeAfter.column = colDueDateTime;
condDueDateTimeAfter.operator = TWSearchCondition.Operations.GreaterThan;
condDueDateTimeAfter.value = tw.local.dueDateAfter.format("MM/dd/yyyy HH:mm:ss", "PST");var conditions = new Array(condInstanceName, condInstanceStatus, condTaskStatus);
search.conditions = conditions;Para aplicar condiciones exclusivas (exclusive OR), debe ejecutar varias búsquedas y combinarlas usted mismo.
push, tal como se muestra en el siguiente ejemplo de código.push en todas las condiciones de la matriz. El código subyacente realiza una copia de la matriz.var conditions = new Array(condInstanceName, condInstanceStatus, condTaskStatus);
if(tw.local.fieldRepIdentifier != "All") {
conditions.push(condFieldRepIdentifier);
}
search.conditions = conditions;Orden de los resultados de búsqueda
TWSearchOrdering. El siguiente ejemplo de código muestra los identificadores de instancia de proceso obtenidos en orden ascendente.var orderInstanceId = new TWSearchOrdering();
orderInstanceId .column = colInstanceId;
orderInstanceId .order = TWSearchOrdering.Orders.Ascending;search.orderBy = new Array(orderInstanceId );
Organización de los resultados de búsqueda
TWSearch.organizedBy. El comportamiento es el mismo que el de las búsquedas guardadas en Process Portal. Si decide organizar por instancia de proceso, obtendrá solo un resultado por instancia de proceso. En este ejemplo de código los resultados de las búsquedas se organizan por tarea.search.organizedBy = TWSearch.OrganizeByTypes.Task;Ejecución de búsquedas
var results = search.execute();El método execute devuelve objetos TWSearchResults.El objeto TWSearch también da soporte a los métodos executeForProcessInstances y executeForTasks, que toman los mismos parámetros y devuelven matrices JavaScript nativas pero con distintos tipos de retorno. El método executeForTasks devuelve una matriz TWTask[] de tareas mientras executeForProcessInstances devuelve una matriz TWProcessInstance[] de instancias de proceso.
Si desea usar esos resultados fuera de su bloque de scripts, deberá analizarlos e inicializar variables equivalentes.
tw.local.serviceOrderTasks = new tw.object.listOf.ServiceOrderTask();
for(var i = 0; i < results.rows.length; i++) {
var row = results.rows[i];
tw.local.serviceOrderTasks[i] = new tw.object.ServiceOrderTask();
tw.local.serviceOrderTasks[i].processInstanceId = row.values[0].toString();
tw.local.serviceOrderTasks[i].processInstanceName = row.values[1].toString();
tw.local.serviceOrderTasks[i].taskId = row.values[2].toString();
tw.local.serviceOrderTasks[i].taskStatus = row.values[3].toString();
if(null != row.values[4])
{
tw.local.serviceOrderTasks[i].closedDate = row.values[4].toString();
}
if(null != row.values[5])
{
tw.local.serviceOrderTasks[i].dueDate = row.values[5].toString();
}
}Si escribe código para procesar resultados de TWSearch y comprueba resultados nulos, debería considerar especificar el resultado nulo en la parte izquierda del operador en lugar de hacerlo en la parte derecha, tal y como se muestra en el fragmento de código siguiente. De lo contrario, es posible que se produzca el siguiente error en el archivo SystemErr.log:
SystemErr R RHINO USAGE WARNING: Missed Context.javaToJS()
conversion:
Rhino runtime detected object Tue May 05 08:00:00 EDT 2020 of
class java.util.Date where it expected String, Number, Boolean
or Scriptable instance. Please check your code for missing
Context.javaToJS() call.