Interazione con casi e attività da processi o flussi di servizi

È possibile interagire con i casi e le attività del caso da processi o flussi di servizi utilizzando uno script che contiene i metodi JavaScript per richiamare le API del caso. Ciò consente di gestire i valori delle proprietà del caso, come le proprietà multivalore o gli oggetti di business.

Questo argomento fornisce i seguenti esempi:
  • Uno script che interagisce con i valori delle proprietà del caso e dell'attività.
  • Script che creano un nuovo caso e inizializzano i valori.

Esempio di uno script che interagisce con i valori delle proprietà del caso e dell'attività

Questo script di esempio viene utilizzato in un processo che implementa un'attività del caso. Lo script accede alle proprietà dell'oggetto contenuto tramite le variabili del processo, come mostrato nel seguente frammento di codice:


tw.local.caseProperties.Payout.value -= tw.local.activityProperties.Deductible.value;
Il seguente esempio mostra come una versione precedente equivalente dello script include metodi che richiamano l'API parentCase JavaScript per eseguire le seguenti operazioni:
  1. Ottenere un valore di una proprietà dell'attività.
  2. Ottenere un valore per una proprietà del caso.
  3. Calcolare un nuovo valore per una proprietà del caso in base al valore della proprietà dell'attività richiamata.
  4. Impostare un nuovo valore per la proprietà del caso.
// Obtain the deductible amount from the parent activity:
var interestingActivityPropertyNames = new tw.object.listOf.toolkit.TWSYS.String();
interestingActivityPropertyNames[0] = "S1_Deductible";
var interestingActivityPropertyValues = tw.system.currentProcessInstance.parentCase.getParentActivityPropertyValues(interestingActivityPropertyNames);
var deductible = parseInt(interestingActivityPropertyValues[0]);

// Obtain the payout amount from the parent case:
var interestingCasePropertyNames = new tw.object.listOf.toolkit.TWSYS.String();
interestingCasePropertyNames[0] = "S1_Payout";
var interestingCasePropertyValues = tw.system.currentProcessInstance.parentCase.getCasePropertyValues(interestingCasePropertyNames);
var payout = parseInt(interestingCasePropertyValues[0]);

// Calculate the updated payout amount:
payout = payout - deductible;

// Set the updated payout amount on the parent case:
var casePropertyValuesToUpdate = new tw.object.listOf.toolkit.TWSYS.String();
casePropertyValuesToUpdate[0]=payout.toString();
tw.system.currentProcessInstance.parentCase.setCasePropertyValues(interestingCasePropertyNames, casePropertyValuesToUpdate);

Esempi di script per l'aggiornamento di più proprietà

Esempi di proprietà di stringhe e di stringhe a più valori vengono aggiornati utilizzando le proprietà degli oggetti Contenuto.
tw.local.caseProperties.Name.value= "Andrew Smith";
tw.local.caseProperties.Address.value[0]= "Street No 1";
tw.local.caseProperties.Address.value[1]= "Road No 2";
Limitazione : non impostare i valori di due proprietà separate utilizzando il JavaScript (setCasePropertyValues()) e le variabili di processo nello stesso script, come nel seguente esempio.
tw.local.caseProperties.Name.value= "Andrew Smith";

var casePropertyNames = new tw.object.listOf.String();
var casePropertyValues = new tw.object.listOf.String();
casePropertyNames[0] = "LO_Address";
casePropertyValues[0] = "{'Street No 1 ','Road No 2'}";
tw.system.currentProcessInstance.parentCase.setCasePropertyValues(casePropertyNames, casePropertyValues, true);

Esempi di script che creano un nuovo caso e inizializzano i valori

Gli script di esempio possono essere utilizzati in qualsiasi processo. Gli script creano un nuovo caso e lo inizializzano con i valori per i seguenti tipi:

  • Una proprietà multivalore.
  • Un oggetto di business che contiene una proprietà multivalore e alcune proprietà a valore singolo.

Gli script di esempio sono riportati nei seguenti due frammenti di codice:

var propertyNames = new tw.object.listOf.String(); // The list of property names to set during case creation.
var propertyValues = new tw.object.listOf.String();// The list of property values to set during case creation.

propertyNames[0] = "S1_Destination";
propertyValues[0] = "YYZ"; // Single String value.

propertyNames[1] = "S1_DepartureDate";
var depDate= new Date(Date.now() + 24 * 60 * 60 * 1000);
propertyValues[1] = depDate.toISOString().replace(/\.\d+/, ""); // DateTime in format: yyyy-MM-dd'T'HH:mm:ss'Z'

propertyNames[2] = "S1_Shippers";
propertyValues[2] = "{'ABC Logistic','XYZ Freight'}" // Multiple values.

propertyNames[3] = "S1_Closed";
propertyValues[3] = false.toString(); // Boolean value.

propertyNames[4] = "S1_Packages";
propertyValues[4] = "{\
    \"objects\": [{\
            \"properties\": [{\
                    \"name\": \"S1_TrackingNumber\",\
                    \"value\": \"T100001\"\
                }, {\
                    \"name\": \"S1_MinimumTemperature\",\
                    \"value\": \"-40\"\
                }, {\
                    \"name\": \"S1_ItemDescription\",\
                    \"value\": \"{'Foo','Bar'}\"\
                }, {\
                    \"name\": \"S1_Value\",\
                    \"value\": \"150,000.00\"\
                }\
            ]\
        }, {\
            \"properties\": [{\
                    \"name\": \"S1_TrackingNumber\",\
                    \"value\": \"T100002\"\
                }\
            ]\
        }\
    ],\
    \"requiredClass\": \"S1_Package\"\
}"; // Multiple business object values.

tw.system.currentProcessInstance.createCaseUsingSpecifiedCaseType("S1_Shipment", propertyNames, propertyValues);

Un modo alternativo di creare un caso consiste nell'utilizzare il metodo JavaScript tw.system.currentProcessInstance.createCase . Invece di utilizzare elenchi di parametri stringa con nomi e valori di proprietà, questo metodo accetta un oggetto di business Record disponibile nel toolkit di sistema. Passando un oggetto Record, è possibile inizializzare le proprietà di un nuovo caso in altri progetti di soluzione del caso senza dover convertire tutti i valori delle proprietà in stringhe:

tw.local.newCaseProperties = new tw.object.Record();

tw.local.newCaseProperties.setPropertyValue("S1_Destination", "YYZ");

var depDate = new tw.object.Date();
depDate.setUTCTime(depDate.getUTCTime() + 24 * 60 * 60); // tomorrow
tw.local.newCaseProperties.setPropertyValue("S1_DepartureDate", depDate);

var shippers = new tw.object.listOf.String();
shippers[0]="ABC Logistic";
shippers[1]="XYZ Freight";
tw.local.newCaseProperties.setPropertyValue("S1_Shippers", shippers);

tw.local.newCaseProperties.setPropertyValue("S1_Closed", false);

var packages = new tw.object.listOf.Record();
packages[0] = new tw.object.Record();
packages[0].setPropertyValue("S1_TrackingNumber", "T100001");
packages[0].setPropertyValue("S1_MinimumTemperature", -40);
var descriptions = new tw.object.listOf.String();
descriptions[0]="Foo";
descriptions[1]="Bar";
packages[0].setPropertyValue("S1_ItemDescription", descriptions);
packages[0].setPropertyValue("S1_Value", 150000.00);
packages[1] = new tw.object.Record();
packages[1].setPropertyValue("S1_TrackingNumber", "T100002");
tw.local.newCaseProperties.setPropertyValue("S1_Packages", packages);

tw.system.currentProcessInstance.createCase("S1_Shipment", tw.local.newCaseProperties);