c # — Просмотрщик отображает пустую страницу

Мы используем PBNI для вызова методов и открытия окон в C #, используя C ++ DLL и Crystal Reports 10.

В окне, содержащем OLE-элемент управления Crystal Reports Viewer, отображается только пустая страница без ошибок. В режиме отладки в Powerbuilder отчет отображается правильно. (Печать и экспорт данных работают, но не просмотрщик.)

Используя Process Monitor, мы видим, что исполняемый файл C # ищет и находит много DLL-файлов Crystal Reports (включая crviewer.dll). Отчеты должны подключаться к базе данных Oracle через ODBC. Изучая историю Oracle SQL, я думаю, что зритель не может подключиться к базе данных. Но когда я изменяю учетные данные подключения (псевдоним, идентификатор …) и пытаюсь получить SQLQueryString в отчете, у меня возникает ошибка (поэтому учетные данные верны).

Пустая страница отчета с ПБНИ

Тот же отчет в режиме отладки (функционал)

Код Powerbuilder (событие открытия окна):

OLEObject APP_CR, APPLICATION
OLEObject CONNECTION_INFO
APPLICATION = CREATE OLEObject
long li_ret
li_ret = APPLICATION.ConnectToNewObject('CrystalRuntime.Application.10')
APP_CR = APPLICATION.OpenReport("C:\Apps\PB120\HeliosII\Dev\Etat\CLI_LST.rpt", 1)
CONNECTION_INFO = APP_CR.database.tables[1].ConnectionProperties
CONNECTION_INFO.DeleteAll
CONNECTION_INFO.Add("DSN","DATABASE O10")
CONNECTION_INFO.Add("Database", "DATABASE")
CONNECTION_INFO.Add("User ID","ETAT")
CONNECTION_INFO.Add("Password","ETAT")

// Testing the connection
string ls_SQLQuery
ls_SQLQuery = APP_CR.SQLQueryString
APP_CR.SQLQueryString = ls_SQLQuery

// Showing the report
ole_CRViewer.object.ReportSource(App_CR)
ole_CRViewer.object.ViewReport

Код C ++ Dll (вызывает функцию, которая открывает окно)

pbgroup group = session->FindGroup("nvo_lanceur", pbgroup_userobject);
if (group == NULL) return false;

pbclass cls = session->FindClass(group, "nvo_lanceur");
if (cls == NULL) return false;

pbobject pbobj = session->NewObject(cls);
if (pbobj == NULL) return false;

pbmethodID mid = session->GetMethodID(cls, "of_traitermessage", PBRT_FUNCTION, "QS");

PBCallInfo ci;
session->InitCallInfo(cls, mid, &ci);

ci.pArgs->GetAt(0)->SetString(parameters);

// Call the function
try
{
session->InvokeObjectFunction(pbobj, mid, &ci);

// Was PB exception thrown?
if (session->HasExceptionThrown())
{
// Handle PB exception
session->ClearException();
}
}
catch (...)
{
// Handle C++ exception
}

Функция «of_traitermessage» объекта «nvo_lanceur» вызывает открытие окна, содержащего средство просмотра (и многие другие окна, в зависимости от параметров). Приложение C # вызывает метод C ++ каждые 100 мс, который вызывает «session-> ProcessPBMessage ( );» для отправки сообщений о событиях powerbuilder. Как я могу сделать это отображение отчета?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]