Ejecutar informe Crystal desde UI API (C#)

Buenas tardes comunidad, actualmente estoy teniendo un primer acercamiento al SDK de B1 y la verdad me está costando un poco. Les cuento como es el asunto:

Tengo un informe de Crystal Reports que funciona perfecto, el informe recibe como parámetro el código de un artículo y muestra características del mismo. Ahora bien, lo que quiero desarrollar es un botón en la ventana de datos maestros de artículos el cual al presionarlo me genere el informe de Crystal que les mencioné.

Tengo el siguiente código:

private void Button0_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
        {
            BubbleEvent = true;
            try
            {
                oForm = Application.SBO_Application.Forms.Item(pVal.FormUID);
                SAPbouiCOM.EditText txt;
                txt = (SAPbouiCOM.EditText)oForm.Items.Item("5").Specific;
                txt2 = txt.Value.Trim();
                System.Windows.Forms.MessageBox.Show(txt2);
                Application.SBO_Application.Menus.Item("959b88b7429f4fad8a4c7af5428bbafb").Activate();
                System.Windows.Forms.MessageBox.Show(pVal.FormUID);
                oForm2 = Application.SBO_Application.Forms.Item(pVal.FormUID);
                SAPbouiCOM.EditText destino;
                destino = ((SAPbouiCOM.EditText)oForm2.Items.Item("1000003").Specific);
                string destino2 = txt2;
                destino.Value = destino2;
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }
            

        }

Al ejecutar el desarrollo en B1, veo el botón y al presionarlo funciona hasta el momento en que necesito asignar el código del artículo al parámetro del crystal, me genera el siguiente error:
image

El error se genera en esta línea de código:

destino = ((SAPbouiCOM.EditText)oForm2.Items.Item("1000003").Specific);

Espero haber expuesto bien mi idea y el problema que estoy teniendo.

Desde ya gracias a quienes puedan aportar.

hola saludos haber si no la riego de nuevo, pero por experiencia personal tu estas usando C# sino me equivoco, el problema como lo veo es que quieres hacer conexiones a un objeto Activex y este no es compatible en c# ya que usa un dll distinto, si no me equivoco lo soluciones fijándome que tablas usaba el reporte, cree un Odata dentro de SAP lo expuse y agarro el servicion en C# ya dentro con el dll que tiene crystal report lo hago natural. Espero no equivocarme pero es lo que veo por el codigo que estas usando ya que cristal usa visual script y c# no.

1 me gusta

echale un ojo a este post!

1 me gusta

Gracias @Jose_Eduardo por tu comentario, sin embargo lo que necesitaba era más sencillo.

Gracias por tu ayuda @juliancab, si bien no es exactamente lo que necesito, me sirvió para darme cuenta de que estaba utilizando mal un método.

Estimados, pude resolver mi problema y la verdad era mucho más sencillo de lo que creía. Sólo tuve que modificar la linea:

oForm2 = Application.SBO_Application.Forms.Item(pVal.FormUID);

y la reemplacé con lo siguiente:

oForm2 = (SAPbouiCOM.Form)Application.SBO_Application.Forms.ActiveForm;

Además agregué el clic automático en el form activo. El método quedó de la siguiente forma:

private void Button0_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
        {
            BubbleEvent = true;
            try
            {
                oForm = Application.SBO_Application.Forms.Item(pVal.FormUID);
                SAPbouiCOM.EditText txt;
                txt = (SAPbouiCOM.EditText)oForm.Items.Item("5").Specific;
                txt2 = txt.Value.Trim();
                Application.SBO_Application.Menus.Item("959b88b7429f4fad8a4c7af5428bbafb").Activate();
                oForm2 = (SAPbouiCOM.Form)Application.SBO_Application.Forms.ActiveForm;
                SAPbouiCOM.EditText destino;
                destino = ((SAPbouiCOM.EditText)oForm2.Items.Item("1000003").Specific);
                destino.Value = txt2;
                oForm2.Items.Item("1").Click(SAPbouiCOM.BoCellClickType.ct_Regular);
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }          
        }

Ya con eso, el Crystal que ya tenía cargado a B1 se genera automáticamente al hacer clic en el botón que agregué en la ventana de dato maestro de artículos.

Gracias a quienes comentaron y espero que esto le sirva a otras personas.
Saludos.

1 me gusta