¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Solución al error System.BadImageFormatException al intentar ejecutar un complemento SAPBouiCOM.DataTable con VB.NET

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 66 Vistas
0
Cargando...

Experts,

He estado trabajando en una función para ingresar un DataTable de VB.NET y analizar los elementos automáticamente en un SAPBouiCOM.DataTable, para luego poder enviar los datos eventualmente a la base de datos de SAP utilizando la DI API.

Sin embargo, cuando intento ejecutar mi complemento, recibo el siguiente error:


System.BadImageFormatException ocurrió
  HResult=-2147024703
  Message=Recuperación de la fábrica de clases COM para el componente con CLSID {1B832D56-1A5A-4681-BB05-FE957666BF33} falló debido al siguiente error: 800700c1  no es una aplicación Win32 válida. (Excepción de HRESULT: 0x800700C1).
  Source=mscorlib
  StackTrace:
       at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
       at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
       at System.Activator.CreateInstance(Type type, Boolean nonPublic)
       at System.Activator.CreateInstance(Type type)
       at ASAP_Shipping_AddOn.modMain.ConvertVBDataTableToSAPDataTable(DataTable dtInput) in D:\Sandbox - Westley\ASAP Shipping AddOn\ASAP_Shipping_AddOn\ASAP_Shipping_AddOn\RestockStoreQuery\modMain.vb:line 170
  InnerException: 

Y el punto de error es simplemente:


Dim dtSAPOutput As New SAPbouiCOM.DataTable

Ahí es donde ocurre el error. Ya he verificado todas mis referencias, y deberían estar configuradas para apuntar a versiones de 64 bits de las diversas DLL. No entiendo por qué Visual Studio está intentando hacer algo en un entorno de 32 bits.

¿Alguno de ustedes tiene alguna idea al respecto?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Westley,

Un SAPbouiCOM.DataTable no tiene un constructor expuesto para nosotros, por lo tanto, no podemos crearlo usando la palabra clave 'new'.

Como señaló Pedro, SAPbouiCOM.DataTable está vinculado a un formulario.

Si no tienes un formulario en este punto, primero necesitas crear el formulario.

SAPbouiCOM.Form oForm = SBO_Application.Forms.Add("frmUID", BoFormTypes.ft_Fixed, -1);

Agrega el DataTable a continuación.

SAPboiCOM.DataTable oDT = oForm.DataSources.DataTables.Add("TableUID");

Dicho esto, tu objetivo de copiar un DataTable de .Net a SAPbouiCOM.DataTable

 para luego empujar los datos eventualmente hacia la base de datos de SAP utilizando la API DI

No se puede lograr.

Un SAPbouiCOM.DataTable no puede enviar los datos automáticamente a la base de datos de SAP, aún necesitarás obtener los valores celda por celda y confirmarlos en el objeto SAP.

Sin embargo, un SAPbouiCOM.DBDataSource puede hacerlo (de una manera específica y limitada).

Lo único que puedes lograr con esto es mostrar los registros del DataTable de .Net en un SAPbouiCOM.Grid o SAPbouiCOM.Matrix.

Saludos

Edy

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Sr. Magueija,

Lo siento, pero no veo el ejemplo. Tal vez tenga algunos problemas con mi navegador, ¿podría por favor volver a publicar el ejemplo en un nuevo mensaje o confirmar que ha modificado su publicación original para mí?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Westley,

He añadido un ejemplo al post anterior.

Por lo general, la forma recomendada de "obtener" el DataTable es usando su id (en forma de cadena). El índice entero también funciona pero es engorroso.

Saludos.


Saludos cordiales,

Pedro Magueija


Ver el perfil de Pedro Magueija en LinkedIn

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Sr. Magueija,

Tu explicación tiene sentido. ¿Tienes un ejemplo de tal proceso que pueda revisar?

Supongo que estás hablando de abrir un nuevo formulario de SAP y asociar un nuevo "DataTable" en blanco con la matriz del formulario de SAP... ¿es correcto? Si es así, ¿cuál es el objeto que debo obtener? SAPForm.DataSources.DataTables.Item(0)... o algo así?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?