A priori debería dar igual la versión de IRIS porque la Community me parece que no está limitada, pero si lo que vais a hacer es algo más corporativo deberíais usar vuestra licencia de IRIS licenciada.

Buenas @Francisco.López1549.

Para una demo que tuve que hace utilicé un simple Ens.InboundAdapter en el que configuré una simple consulta SQL a la tabla que quería controlar:

Class Local.BS.GetAppointmentBS Extends Ens.BusinessService
{

Property Target As Ens.DataType.ConfigName;Parameter SETTINGS = "Target:Basic";Parameter ADAPTER = "Ens.InboundAdapter";

Method OnProcessInput(pRequest As%RegisteredObject, pResponse As%RegisteredObject) As%Status
{
    set tSC = $$$OKset selectAppointments = "SELECT PatientId, Facility, AppointmentId FROM Local_Object.Appointment WHERE AppointmentDate = ?"set statementAppointments = ##class(%SQL.Statement).%New()
    set statusAppointments = statementAppointments.%Prepare(selectAppointments)
    if ($$$ISOK(statusAppointments)) {
        set resultSetAppointments = statementAppointments.%Execute($H+1)
        if (resultSetAppointments.%SQLCODE = 0) {
            $$$TRACE($ZDT($H+1,4))
            while resultSetAppointments.%Next() {
                $$$TRACE("Consulta con resultados")
                set appointmentRequest = ##class(Local.Message.PatientInfoRequest).%New()
                set appointmentRequest.PatientId = resultSetAppointments.%GetData("PatientId")
                set appointmentRequest.Facility = resultSetAppointments.%GetData("Facility")
                set appointmentRequest.AppointmentId = resultSetAppointments.%GetData("AppointmentId")
                set tSC=..SendRequestAsync(..Target, appointmentRequest)            
            }
        }
    }

    Quit tSC
}

}

Le configuré un bonito intervalo de llamada:

Y con esto para mi demo fue suficiente.

Para tu caso necesitarías además controlar un campo que te permita identificar los registros nuevos o modificados (que es lo que hace en EnsLib.SQL.InboundAdapter por debajo), si tu tabla dispone de un campo de tipo fecha que refleje la última actualización/creación te bastará con almacenar en un global cuando fue la última vez que lanzaste una consulta para buscar todos los nuevos registros entre la ejecución actual y la anterior.

Si no dispones de un campo de última actualización puedes usar siempre la clave primaria en el caso de que sea un tipo numérico autoincremental, en ese caso sólo podrías controlar los nuevos registros insertados. La implementación sería igual al punto anterior, grabas el último identificador en un global y a la siguiente ejecución buscas todos los registros mayores al identificador del global.

Pues igual resulta un poco kafkiano, pero para calcular la diferencia entre la hora local y la hora UTC puedes hacer un cálculo tal que así:

##class(%Library.UTC).Diff(##class(%Library.TimeStamp).DisplayToLogical($zdatetime($horolog,3)),##class(%Library.UTC).ConvertLocaltoUTC($zdatetime($horolog,3)))/3600

En ese ejemplo cojo la hora local con el DisplayToLogical y la hora UTC con el ConvertLocaltoUTC y calculo la diferencia en segundos, la cual la divido entre los segundos que tiene una hora et...voila! Ya tienes la diferencia de horas entre hora local y UTC, ahora sólo tienes que concatenar esa diferencia con tu hora local y tendrías lo que estás buscando.

Podemos asegurar que no tomaremos ningún tipo de represalia sobre aquellas personas que eliminen su cuenta, a título corporativo.

Lo que no podremos evitar es que otros miembros de la comunidad persigan y den su merecido a todos los traid...ex-miembros.

Hola @Jaume Marcet! 

Echa un vistazo a este código de ejemplo que me ha sugerido nuestro amigo el chatbot de IA:

Class objectscript.postXML
{
    ClassMethod test() {
        Set HTTPRequest = ##class(%Net.HttpRequest).%New()
        Set HTTPRequest.ContentType = "text/xml"Set HTTPRequest.NoDefaultContentCharset = 1Set HTTPRequest.Server = "wph.foactive.com"// Specify server address hereSet HTTPRequest.Location = "/ITOMCZ"// Specify location or endpoint here// Modify headers if necessaryDo HTTPRequest.RemoveHeader("User-Agent")
        Do HTTPRequest.RemoveHeader("Accept-Encoding")
        Do HTTPRequest.RemoveHeader("Connection")
        Do HTTPRequest.SetHeader("Expect", "100-continue")
        
        // Open XML file and copy its content into the request bodySet RequestXML = ##class(%Library.File).%New("c:\\path\\to\\your\\file.xml")   // Specify file path hereDo RequestXML.Open("RS")
        Do HTTPRequest.EntityBody.CopyFrom(RequestXML)
        Do RequestXML.%Close()
        
        // Send the requestSet sc = HTTPRequest.Post(HTTPRequest.Location)
        
        // Check the responseIf$$$ISOK(sc) {
            Write HTTPRequest.HttpResponse.StatusCode, !
            Write HTTPRequest.HttpResponse.Data.Read(), !
        } Else {
            // Handle errorsWrite"Error in request: ", $System.OBJ.DisplayError(sc), !
        }
    }
}