Can Crsytal Reports v.11 be used in inside axapta through x++. FOr example I will make a sales invoice in crsytal reports. How can it be called using x++;
I am not very keen on Crystal Reports.
All I did is a couple of reports in CS that was based on data stored in Axapta Database.
CS is now owned by Microsoft, isn't it?
If it provides a COM interface which may be called from Axapta you could possibly do anything.
Another solution would be (not sure if it is possible), when you create and save a report in CS maybe there is a CS library to call this report with some parameters e.g. Data needed for Sales Invoice
I did some work on integrating CR with Axapta in the past. One solution that you might want to give it a go is -
compiling CR report into an executable and calling them from Axapta.
Just curious - is there any particular reason that you want to go down this route at all?
Any more info you can give on this would be greatly appreciated. I use crystal a lot, as I dont quite have the ablility to create the same reports in Axapta X++ I can do in Crystal XI.
I would love to learn how I can create a report in Axapta with the datasource set up from Crystal... if any such way exists.
I want to change the value of “Use DSN Default Properties” at runtime.
We have a TMS application, the reports of which we want to display in AX. These reports successfully run on TMS when “Use DSN Default Properties” is set to True. On setting it to False the reports do not work in TMS.
But with “Use DSN Default Properties=True” these reports are not working in AX. Following error is generated in AX.
Method 'readrecords' in COM object of class 'IReport' returned error code 0x80047E48 (<unknown>) which means: Logon failed.
Details: [Database Vendor Code: 18456 ].
This error is being generated on the following line of code;
reporting.readrecords();
When I change this value to False at report level, no error is then generated in AX at reporting.readrecords(); line. But again, they stopped working in TMS when its value is changed to False.
Hence, I want to change its value at runtime for running them in AX. How can I change the value of "Use DSN Default Properties" to False at runtime, any help will be appreciated.
Following is the complete code;
public void run()
{
Com comapp;
Com reporting;
Com IDatabase;
Com IDatabaseTable;
Com IDatabaseSingleTable;
Com INameValuePairs;
Com INameValuePairs2;
Com INameValuePairs3;
COM tc;
COM IConnectionProperty2;
Com IConnectionProperty;
Com ds;
COM DLL_Name;
str paramwhole;
str paramfilename;
str paramCond;
str ViewYesNo;
int ret;
str selectionFormula;
COMVariant variant;
Comments
I am not very keen on Crystal Reports.
All I did is a couple of reports in CS that was based on data stored in Axapta Database.
CS is now owned by Microsoft, isn't it?
If it provides a COM interface which may be called from Axapta you could possibly do anything.
Another solution would be (not sure if it is possible), when you create and save a report in CS maybe there is a CS library to call this report with some parameters e.g. Data needed for Sales Invoice
Regards,
Sebastian
Sebastian
I did some work on integrating CR with Axapta in the past. One solution that you might want to give it a go is -
compiling CR report into an executable and calling them from Axapta.
Just curious - is there any particular reason that you want to go down this route at all?
Hope this helps,
Long way to go before I sleep..
I would love to learn how I can create a report in Axapta with the datasource set up from Crystal... if any such way exists.
I have integrted crsytal reports in axapta.. Use the Active X viewer of crystal reports. put it on the form and then call the crystal report .rpt.
void ViewCrystalReport()
{
Com comapp;
Com reporting;
str paramwhole;
str paramfilename;
str paramCond;
str ViewYesNo;
int ret;
COMVariant variant;
;
variant = new COMvariant(COMVariantInOut::OUT,COMVariantType::VT_BOOL) ;
paramwhole = this.args().parm();
comapp = new COM("CrystalRuntime.Application.11");
ret = strfind(paramwhole,"|",2,strlen(paramwhole));
paramfilename = substr(paramwhole,2,ret-2) ;
ViewYesNo = substr(paramwhole,1,1);
reporting = comapp.openreport(paramfilename);
reporting.discardsaveddata();
reporting.readrecords();
paramcond = substr(paramwhole,ret+1,strlen(paramwhole));
reporting.RecordSelectionFormula(paramCond);
if(ViewYesNo == 'N')
{
variant.boolean(false);
reporting.PrintOut(variant);
}
else
{
ActiveX.ReportSource(reporting);
ActiveX.width(1200);
ActiveX.height(750);
ActiveX.DisplayToolbar(true);
ActiveX.DisplayGroupTree(false);
ActiveX.Refresh();
ActiveX.ViewReport();
ActiveX.Refresh();
}
}
Method 'add' in COM object of class 'INameValuePairs' returned error code 0x80070057 (E_INVALIDARG) which means: One or more arguments are invalid.
This error is being generated on the following line of code;
IConnectionProperty = INameValuePairs.add("Use DSN Default Properties",False);
I want to change the value of “Use DSN Default Properties” at runtime.
We have a TMS application, the reports of which we want to display in AX. These reports successfully run on TMS when “Use DSN Default Properties” is set to True. On setting it to False the reports do not work in TMS.
But with “Use DSN Default Properties=True” these reports are not working in AX. Following error is generated in AX.
Method 'readrecords' in COM object of class 'IReport' returned error code 0x80047E48 (<unknown>) which means: Logon failed.
Details: [Database Vendor Code: 18456 ].
This error is being generated on the following line of code;
reporting.readrecords();
When I change this value to False at report level, no error is then generated in AX at reporting.readrecords(); line. But again, they stopped working in TMS when its value is changed to False.
Hence, I want to change its value at runtime for running them in AX. How can I change the value of "Use DSN Default Properties" to False at runtime, any help will be appreciated.
Following is the complete code;
public void run()
{
Com comapp;
Com reporting;
Com IDatabase;
Com IDatabaseTable;
Com IDatabaseSingleTable;
Com INameValuePairs;
Com INameValuePairs2;
Com INameValuePairs3;
COM tc;
COM IConnectionProperty2;
Com IConnectionProperty;
Com ds;
COM DLL_Name;
str paramwhole;
str paramfilename;
str paramCond;
str ViewYesNo;
int ret;
str selectionFormula;
COMVariant variant;
DialogButton diagBut;
str strMessage;
str strTitle;
;
super();
variant = new COMvariant(COMVariantInOut::OUT,COMVariantType::VT_BOOL) ;
//paramwhole = this.args().parm("'{Employee.empcode}'='11752'");
paramwhole = this.args().parm();
//paramwhole = this.args().parm("{Employee.empcode}='11752'");
//paramwhole = this.args().parm("{?DateFrom}='01/01/2021';{?DateTo}='03/03/2021';{Employee.empcode}='11752'");
comapp = new COM("CrystalRuntime.Application.11");
ret = strfind(paramwhole,"|",2,strlen(paramwhole));
paramfilename = "e:\\Report10.rpt"; //substr(paramwhole,2,ret-2) ;
ViewYesNo = substr(paramwhole,1,1);
reporting = comapp.openreport(paramfilename);
reporting.discardsaveddata();
comapp.LogonServer("crdb_odbc.dll","tms","tacs", "sa", "Hubleather123");
// breakpoint;
IDatabase =reporting.Database();
IDatabaseTable = IDatabase.Tables();
IDatabaseSingleTable = IDatabaseTable.Item(1);
INameValuePairs = IDatabaseSingleTable.connectionproperties();
IConnectionProperty = INameValuePairs.add("Use DSN Default Properties",False);
paramcond = substr(paramwhole,ret+1,strlen(paramwhole));
reporting.RecordSelectionFormula(paramCond);
reporting.readrecords();
if(ViewYesNo == 'N')
{
variant.boolean(false);
reporting.PrintOut(variant);
}
else
{
ActiveX.ReportSource(reporting);
ActiveX.width(600);
ActiveX.height(350);
ActiveX.DisplayToolbar(true);
ActiveX.DisplayGroupTree(false);
ActiveX.ViewReport();
ActiveX.Refresh();
}
}