Buenas @Laura Blázquez García, no soy muy experto en temas de OAuth2 pero quizás este artículo os pueda resultar de utilidad:
https://community.intersystems.com/post/oauth-authorization-and-intersy…
- Inicie sesión para enviar comentarios
Buenas @Laura Blázquez García, no soy muy experto en temas de OAuth2 pero quizás este artículo os pueda resultar de utilidad:
https://community.intersystems.com/post/oauth-authorization-and-intersy…
¿Has probado con la notación: file:///tucarpeta/tusubcarpeta/tuarchivo.xsd?
¿El fichero XSD tiene permisos para que pueda ser leído por cualquier usuario?
¡Buenas @Laura Blázquez García !
Por aquí tienes un artíc@Evgeny Shvarov al respecto de la creación y publicación de proyectos en el IPM, básicamente es añadir el archivo module.xml con determinados parámetros para que capture el código que quieras publicar. Posteriormente le mandas un mensaje y el incluye vuestro proyecto al repositorio del IPM.
Perdona, que te contesté desde el móvil y me comí la URL:
https://community.intersystems.com/post/setting-your-own-intersystems-o…
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.
En mi infancia teníamos el juego "Animal, vegetal o mineral" del Amstrad CPC que funcionaba exactamente igual:
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:
.png)
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.
Quizá sea algún problema de CORS, ¿podría ver la traza de HTTP que queda en el web gateway?
Parece que has hecho una llamada HTTP en lugar de HTTPS que requiere el puerto 8743. ¿Podrías confirmarlo?
Prueba a activar el Soporte SSL/TLS y selecciona una configuración SSL/TLS genérica que tengas configurada.
Bueno, está bastante bien explicado en la documentación oficial, pero si es necesario, se hará:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cl…
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)))/3600En 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.
Gran artículo @Kurro Lopez pero se te han perdido algunas de las imágenes:
.png)
Y a Dios gracias.
¿Has probado usando SendRequestSync en lugar de SendRequest?
O bien modificando el parámetro de SendRequest de 1 a 0:
..SendRequest(message,0)Ya que con el valor 1 que le indicas estás diciendo que la llamada sea asíncrona:
.png)
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), !
}
}
}@Jaume Marcet ¿Has podido probar el código?
Buenas, eso tiene pinta de que hay una redirección a la URL a la que estás invocando.