DDEAdvise( ) (Función)

Crea un vínculo de notificación o un vínculo automático que se utiliza en el intercambio dinámico de datos (DDE).

DDEAdvise(nChannelNumber, cItemName, cUDFName, nLinkType)

Valores devueltos

Logical

Parámetros

  • nChannelNumber
    Especifica el número de canal.

  • cItemName
    Especifica el nombre del elemento. Por ejemplo, Microsoft Excel utiliza la notación de fila y columna para hacer referencia a las celdas de una hoja de cálculo. El nombre de elemento R1C1 designa la celda de la primera fila y la primera columna de la hoja de cálculo.

  • cUDFName
    Especifica la función definida por el usuario (FDU) que se ejecuta cuando se establece un vínculo de notificación o un vínculo automático, y se modifica el elemento cItemName. Cuando se ejecuta la FDU, se transfieren los seis parámetros siguientes, en el orden que se indica a continuación:

    Parámetro Contenido
    Channel Number Número de canal de la aplicación de servidor.
    Action ADVISE o TERMINATE.
    Item Nombre del elemento; por ejemplo, R1C1 para una celda de una hoja de cálculo de Microsoft Excel.
    Data Nuevos datos (vínculo automático) o la cadena vacía (vínculo de notificación).
    Format Formato de datos; por ejemplo, CF_TEXT.
    Advise Status Tipo de vínculo (0 = manual, 1 = notificación, 2 = automático).

    La FDU debería tener seis parámetros en su instrucción LPARAMETER o PARAMETER para aceptar los valores transferidos desde la aplicación de servidor. Si se establece un vínculo de notificación, se ejecutará la FDU y se transferirá la cadena vacía en el parámetro Data. Puede ejecutar DDERequest( ) posteriormente para recuperar los datos. Si se establece un vínculo automático, la FDU se ejecutará y los datos se transferirán en el parámetro Data.

    El parámetro Action contiene ADVISE cuando el servidor está actualizando el vínculo. Se llama a la FDU y el parámetro Action contendrá TERMINATE cuando el cliente o el servidor cierre el vínculo.

    Se pasa por alto cualquier valor devuelto por la FDU.

  • nLinkType
    Especifica el tipo de vínculo de la forma siguiente:

    nLinkType Tipo de vínculo
    0 Manual
    1 Notificación
    2 Automático

    Puede desactivar la notificación desde la aplicación de servidor al especificar 0 en nLinkType. Si cambia el elemento, la FDU no se ejecutará.

Observaciones

DDEAdvise( ) se utiliza para crear un vínculo de notificación o un vínculo automático con un nombre de elemento en una aplicación de servidor. Cuando se crea un vínculo de notificación con DDEAdvise( ), la aplicación de servidor notifica a Visual FoxPro la modificación del nombre del elemento. Si se crea un vínculo automático, la aplicación de servidor notifica a Visual FoxPro la modificación del nombre del elemento y pasa los nuevos datos a Visual FoxPro.

Antes de que pueda crear un vínculo, debe establecer un canal con la aplicación de servidor mediante DDEInitiate( ).

También puede utilizar DDEAdvise( ) para desactivar la notificación desde el servidor.

DDEAdvise( ) devuelve el valor verdadero (.T.) si se ejecuta correctamente; de lo contrario, devuelve falso (.F.).

Ejemplo

El ejemplo siguiente demuestra cómo puede establecer un canal DDE con una hoja de cálculo de Microsoft Excel llamada Sheet1. Se utiliza DDEAdvise( ) para establecer dos vínculos con datos de dos celdas (R1C1 y R1C2) de la hoja de cálculo. La función definida por el usuario NEWDATA se ejecuta cuando cambian los datos de una de estas celdas. Esta función comprueba los parámetros item y advise para determinar qué elemento cambió y qué tipo de vínculo se ha establecido.

PUBLIC mchannum
mchannum = DDEInitiate('Excel', 'Sheet1')
IF mchannum != -1
   = DDEAdvise(mchannum, 'R1C1', 'newdata', 1)     && Notify link
   = DDEAdvise(mchannum, 'R1C2', 'newdata', 2)     && Automatic link
   WAIT WINDOW 'Enter data in first two cells in Excel.'
ENDIF
PROCEDURE newdata
PARAMETERS channel, action, item, data, format, advise
IF action = 'ADVISE'
   DO CASE
      CASE item = 'R1C1'   && Notify link
         newvalue = DDERequest(channel, item)
         ? 'R1C1 notify link: ' + newvalue
      CASE item = 'R1C2'   && Automatic link
         newvalue = data
         ? 'R1C2 automatic link: ' + newvalue
   ENDCASE
ELSE
   IF action != "TERMINATE"
      = DDETerminate(mchannum)
 ENDIF
ENDIF

Vea también

DDEInitiate( ) | DDELastError( ) | DDESetOption( ) | DDETerminate( )