Ejemplo de InvalidateFieldChoiceList

En el ejemplo siguiente, un tipo de registro Defect tiene los dos campos product (una referencia al tipo de registro Product) y owner (una referencia a User). Cada tipo de registro Product tiene un campo denominado contributors (una lista de referencia a User).

Con el objeto de que el campo de lista de opciones de owner se actualice cada vez que cambie el valor de Product, puede utilizar el método InvalidateFieldChoiceList, en lugar de utilizar la opción de Recalcular lista de opciones. Consulte el apartado Consideraciones de rendimiento para utilizar enganches para obtener más información.

Por ejemplo, en el tipo de registro Defect, se añade un enganche de valor cambiado para el campo de producto,
  • Perl
    sub product_ValueChanged {
        my($fieldname) = @_;
        # $fieldname as string scalar
        # el nombre de tipo de registro es Defect
        # el nombre de campo es product
        # Asegúrese de que la lista de opciones del propietario se basa en
        # este nuevo valor para el producto.
        $entity->InvalidateFieldChoiceList("owner");
    	}

    y se añade un enganche de lista de opciones para el propietario del campo

    sub owner_ChoiceList 
    {
        my($fieldname) = @_;
        my @choices;
        # $fieldname as string scalar
        # @choices as string array
        # el nombre de tipo de registro es Defect
        # el nombre de campo es owner
        # ¿Se ha establecido el valor del producto?  
        # Si no es así, se devuelve una lista vacía.
        my $productFieldInfo = $entity->GetFieldValue("product");
        return @choices unless
        $productFieldInfo->GetValidationStatus() == $CQPerlExt::CQ__KNOWN_VALID;
        return @choices unless $productFieldInfo->GetValue() ne "";
        # El campo de producto está establecido y es válido
        # Obtener la lista de colaboradores de este producto
        @choices = $entity->GetFieldValue("product.contributors")
                          ->GetValueAsList();
        return @choices;
    } 
  • VBScript
    Sub product_ValueChanged(fieldname)
      ' fieldname As String
      ' el nombre de tipo de registro es Defect
      ' el nombre de campo es product
    	InvalidateFieldChoiceList "owner"
    End Sub

    y se añade un enganche de lista de opciones para el propietario del campo

    Sub owner_ChoiceList(fieldname, choices)
      ' fieldname As String
      ' choices As Object
      ' el nombre de tipo de registro es Defect
      ' el nombre de campo es owner
        ' ¿Se ha establecido el valor del producto?  
        # Si no es así, se devuelve una lista vacía.
    	Dim productFieldinfo
    	set productFieldinfo = GetFieldValue("product")
    	if productFieldinfo.GetValidationStatus() <> AD_KNOWN_VALID then exit sub
    	productFieldInfovalue = productFieldinfo.GetValue()
    	if productFieldInfovalue = "" then exit sub
    
        ' El campo de producto está establecido y es válido
        ' Obtener la lista de colaboradores de este producto
    	Dim productFieldvalues
    	productFieldvalues = GetFieldValue("product.contributors").GetValueAsList()
    	for each contributor in productFieldvalues
    		choices.AddItem contributor
    	next
    
    End Sub

Cada vez que se inicia una acción, owner_ChoiceList se ejecuta una vez y, cada vez que se cambia product, la lista de opciones owner se marca como no válida. A continuación, la interfaz de usuario solicita la lista de opciones, que fuerza que se vuelva a ejecutar el enganche de lista de opciones.



Comentarios