Saltar al contenido

La mejor manera de importar la biblioteca cometD a LWC

Solución:

No necesita EMP-Connector si está utilizando lwc. Salesforce tiene una lightning-emp-api componente base para él (https://developer.salesforce.com/docs/component-library/bundle/lightning:empApi).

El módulo lightning / empApi utiliza una conexión CometD compartida.

Puede utilizar las funciones proporcionadas desde el módulo

import { subscribe, unsubscribe, onError, setDebugFlag, isEmpEnabled } from 'lightning/empApi';

Actualizar

Tiene razón en que para las comunidades este componente no es compatible.Sigo sugiriendo que lo pruebes porque lo tengo funcionando al menos para el componente aura en el constructor de la comunidad Lightning usando emp api. No he probado el lwc.

Además, es posible que los temas de empuje no sean compatibles, pero los eventos de plataforma sí son compatibles con las comunidades Lightning.

Uno puede diseñar completamente el componente emp api con un componente personalizado porque, bajo el capó, usa la biblioteca cometd js.

Aquí hay un código de muestra para comenzar

NOTA – He usado la versión 3.1.1 de aquí. Puede extraer el archivo y, en la carpeta común, simplemente descargue el archivo comted.js para usarlo en un recurso estático.

También cargué el archivo cometd.js que he usado para probar. Puedes obtenerlo aqui

Aquí está el código de muestra para comenzar

<template>
  <div>Streaming Component</div>
</template>

El controlador JS es

import { LightningElement, wire, track } from "lwc";
import { loadScript } from "lightning/platformResourceLoader";
import cometdlwc from "@salesforce/resourceUrl/cometd";
import getSessionId from '@salesforce/apex/SessionUtil.getSessionId';


export default class Cometdlwc extends LightningElement {
 libInitialized = false;
 @track sessionId;
 @track error;

 @wire(getSessionId)
 wiredSessionId({ error, data }) {
  if (data) {
    console.log(data);
    this.sessionId = data;
    this.error = undefined;
    loadScript(this, cometdlwc)
    .then(() => {
        this.initializecometd()
    });
} else if (error) {
    console.log(error);
    this.error = error;
    this.sessionId = undefined;
  }
}

initializecometd() {

  if (this.libInitialized) {
    return;
  }

 this.libInitialized = true;

 //inintializing cometD object/class
 var cometdlib = new window.org.cometd.CometD();

//Calling configure method of cometD class, to setup authentication which will be used in handshaking
  cometdlib.configure({
    url: window.location.protocol + '//' + window.location.hostname + '/cometd/47.0/',
    requestHeaders: { Authorization: 'OAuth ' + this.sessionId},
    appendMessageTypeToURL : false,
    logLevel: 'debug'
});

cometdlib.websocketEnabled = false;

cometdlib.handshake(function(status) {

    if (status.successful) {
        // Successfully connected to the server.
        // Now it is possible to subscribe or send messages
        console.log('Successfully connected to server');
    } else {
        /// Cannot handshake with the server, alert user.
        console.error('Error in handshaking: ' + JSON.stringify(status));
     }
   });
  }
}

Requiere un controlador ápice simple para obtener sessionId

public with sharing class SessionUtil {

  @AuraEnabled(cacheable=true)
   public static String getSessionId() {
    return UserInfo.getSessionId();
  }
}

Las licencias comunitarias no son compatibles con Streaming API, por lo que empApi no funciona. La API de transmisión se basa en temas de inserción y la lectura de temas de inserción no es compatible con la licencia de la comunidad (por lo que puede crear eventos, pero no puede suscribirse a ellos)

ACTUALIZAR:
puede suscribirse con la biblioteca cometD, consulte los comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *