Ir al contenido

SAP — Log on

Tipo: sap-logon  ·  Paquete: SAP Activities v1.0.5  ·  Salida: ZoanSapSession

Abre una conexión de SAP e inicia sesión por ti. Es el punto de partida de un robot desatendido: no depende de que alguien haya dejado SAP abierto, porque entra solo con el usuario que le indiques y la contraseña guardada como credencial de Zoan Cloud. Si la sesión ya está abierta y solo quieres usarla, usa SAP — Attach.

  1. Abre la conexión. El programa SAP Logon (saplogon.exe) tiene que estar en ejecución; la actividad abre una conexión, no el programa. Lánzalo antes, por ejemplo con Open App: si SAP Logon todavía está arrancando, la actividad espera hasta 30 segundos (comprobando cada medio segundo) a que esté disponible. Si pasado ese tiempo sigue sin estar abierto, falla con un mensaje que lo dice. connection puede ser el nombre de la entrada del SAP Logon o, si empieza por /, una cadena de conexión /H/servidor/S/3200, que no pasa por las entradas del SAP Logon.
  2. Llena la pantalla de acceso. Escribe el mandante (si lo indicas) en wnd[0]/usr/txtRSYST-MANDT, el usuario en txtRSYST-BNAME, la contraseña en pwdRSYST-BCODE y el idioma (si lo indicas) en txtRSYST-LANGU, y pulsa Enter. Si la conexión entra directo sin pedir credenciales (SSO o SNC), lo registra en el log y sigue.
  3. Atiende los diálogos conocidos que salen justo después (hasta tres seguidos):
    • Inicio de sesión múltiple (el usuario ya tiene otra sesión abierta): responde según ifAlreadyLoggedOn y deja un aviso en el log.
    • Cambio de contraseña obligatorio: se detiene con un error. Cambiar la contraseña desde un robot sería decidir por el dueño de la cuenta y dejaría la credencial desactualizada.
    • Cualquier otro diálogo (por ejemplo, los mensajes del sistema) lo deja abierto y avisa en el log para que lo cierres con SAP — Close modal.
  4. Comprueba que entró. Si al final la sesión no tiene usuario, falla con el mensaje que haya dejado SAP en la barra de estado. Si entró con un usuario distinto del pedido, lo avisa en el log.

Si el inicio de sesión falla en cualquier punto, la actividad cierra la conexión que abrió, para no dejar una pantalla de acceso ocupando un proceso de diálogo del sistema.

El elementTimeout que fijes aquí viaja con la sesión: es lo que esperan a su elemento todas las actividades que la usan. Si lo dejas vacío, vale el tiempo de espera de la configuración del proyecto y, si tampoco está definido, 30 segundos.

Con body, las actividades de dentro heredan la sesión y, al terminar (bien o con error), la conexión se cierra, salvo que actives keepOpen. Sin body, la sesión se devuelve en la salida para usarla en el parámetro session de otras actividades.

La contraseña entra como credencial: no se guarda en el playbook ni aparece en los logs.

ParámetroTipoPor defectoDescripción
connectionstring—Nombre de la entrada en el SAP Logon de ese equipo —la columna Name, no el ID del sistema— o una cadena de conexión /H/servidor/S/3200. Ej: "DEVELOP".
userstring—Usuario de SAP.
passwordcredential—Contraseña, desde el almacén de credenciales. Usa credential(...).
ParámetroTipoPor defectoDescripción
clientstring—Mandante, con sus ceros a la izquierda. Ej: "001". Vacío deja el que proponga la pantalla.
languagestring—Idioma de acceso (EN, ES…). Vacío usa el del sistema. Decide el idioma de todos los mensajes que el flujo lea después.
ifAlreadyLoggedOnstring"Keep other sessions"Qué responder si SAP avisa que el usuario ya tiene una sesión abierta: Keep other sessions (conserva las otras; SAP registra un inicio de sesión múltiple), End other sessions (las cierra) o Cancel logon (la actividad falla).
keepOpenboolfalseDejar la ventana de SAP abierta cuando termina el body. Apagado cierra la conexión que abrió esta actividad. También acepta una expresión que devuelva true o false.
elementTimeoutnumber30Segundos que cada actividad espera a que aparezca su elemento. Vacío usa el de la configuración del proyecto o, si no hay, 30. Con 0 fallan al primer intento, útil mientras depuras un selector.

Actividades que se ejecutan con esta sesión. Heredan la sesión sin configurar session. Al salir del body, la conexión se cierra (salvo con keepOpen) y se restaura la sesión del ámbito que hubiera antes.

Devuelve la sesión (ZoanSapSession) cuando no usas body (o el body está vacío). Con body, la sesión se usa dentro y la actividad no devuelve ningún valor.

MensajeCausa y solución
SAP Logon no está abierto: no hay objeto SAPGUI en la Running Object Table. sap-logon abre una CONEXIÓN, no el programa; inicia saplogon.exe primero (con open-app, por ejemplo). Se esperó 30 s.SAP Logon no arrancó en 30 segundos. Ábrelo antes con Open App.
SAP GUI responde pero no entrega el motor de scripting. …Scripting deshabilitado en el servidor o en el cliente. Ver Requisitos.
No se pudo abrir la conexión. Si es un nombre, debe ser exactamente el de la columna Name de SAP Logon en ESTE equipo; si es una cadena, tiene la forma /H/server/S/3200. (…)connection no corresponde a ninguna entrada del SAP Logon de ese equipo, o la cadena está mal formada. Cópiala tal cual de la columna Name.
La conexión se abrió pero no expuso ninguna sesión.SAP GUI abrió la conexión sin ventana de sesión. Reintenta; si persiste, revisa la entrada en el SAP Logon.
La pantalla de acceso no expone el campo de contraseña. …El perfil del sistema prohíbe escribir la contraseña desde scripting. Inicia sesión a mano (o por SSO) y usa SAP — Attach.
SAP exige cambiar la contraseña antes de iniciar sesión. Cámbiala a mano y después actualiza la credencial en el almacén.La contraseña caducó o es inicial. Cámbiala a mano y actualiza la credencial.
El usuario ya tenía otra sesión abierta e ifAlreadyLoggedOn = "Cancel logon".Pediste cancelar ante un inicio de sesión múltiple. Cierra la otra sesión o cambia ifAlreadyLoggedOn.
El inicio de sesión no se completó. SAP dijo: [E] …SAP rechazó el acceso (usuario o contraseña incorrectos, usuario bloqueado, mandante inexistente…). El texto es el de la barra de estado. Si SAP no dejó mensaje, sale solo El inicio de sesión no se completó.
'connection' es obligatorio. · 'user' es obligatorio.Falta la conexión o el usuario.

Además, los errores comunes a todas las actividades. Como un inicio de sesión fallido cierra la conexión, puedes reintentarlo con Retry sin dejar pantallas de acceso abiertas.

Open App path = "C:/Program Files (x86)/SAP/FrontEnd/SAPgui/saplogon.exe"
SAP Logon connection = "DEVELOP" client = "001" language = "ES"
user = credential("sap-dev")["user"] password = credential("sap-dev")
└─ body:
SAP Close Modal
SAP Run Transaction code = "SE16"
... resto del flujo ...

Sin body, guardando la sesión para usarla después:

SAP Logon connection = "DEVELOP" client = "001" language = "ES"
user = credential("sap-dev")["user"] password = credential("sap-dev") → output: sap
SAP Run Transaction session = sap code = "SE16"