دسته بندی ها
09:22 1399/04/31

بسته شدن برنامه هنگامی که کریستال ریپورت در حال ران شدن در کامپیوتر کلاینت است

مشخصات سوال کننده :
کاربر : Mfarahmand     امتیاز کاربر : 20     رتبه کاربر : 36
دسته بندی : سی شارپ WPF

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2466
پاسخ دهنده : Sowgandi 18:44 1399/04/31

سلام. بله همین Runtime32 برای کلاینت ها کافیه و نیازی به نصب روی سرور نیست. فقط چون شما میگید روی سیستم خودتون درست اجرا میشه به احتمال زیاد مشکلتون در کانکشن استرینگ کریستال هست. احتمال داره شما کانکشن استرینگ رو به صورت دستی و لوکال برای کریستال تعریف کردید و وقتی گزارش روی کلاینت اجرا میشه،  نمیتونه به دیتابیس متصل بشه. این مورد رو چک کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 871 رتبه: 3
پاسخ دهنده : Mfarahmand 22:54 1399/04/31

این قطعه کد بنده برای پنجره گزارش هست:


namespace TEMAR.window
{
    /// <summary>
    /// Interaction logic for win_showReports.xaml
    /// </summary>
    public partial class win_showReports : Window
    {
        public string Report_Name { get; set; }
        public string GetFormula { get; set; }

        public string[] Params = new string[15];

        ReportDocument RD = new ReportDocument();

        public win_showReports()
        {
            InitializeComponent();
        }

        private void SetDBLoginForReport(ConnectionInfo conectioninfo, ReportDocument reportDocument)
        {
            Tables tables = reportDocument.Database.Tables;

            foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
            {
                TableLogOnInfo Tinfo = table.LogOnInfo;
                Tinfo.ConnectionInfo = conectioninfo;
                table.ApplyLogOnInfo(Tinfo);
            }
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            if (Report_Name == null)
            {
                return;
            }
            string path = System.AppDomain.CurrentDomain.BaseDirectory + "Reports\\" + this.Report_Name;
            RD.Load(path);
            RD.RecordSelectionFormula = this.GetFormula;




            ConnectionInfo connectioninfo = new ConnectionInfo();

            connectioninfo.UserID = PublicVariables.GetUserDatabase(PublicVariables.ConnectionString);
            connectioninfo.DatabaseName = PublicVariables.GetDatabaseName(PublicVariables.ConnectionString); ;
            connectioninfo.Password = PublicVariables.GetPassword(PublicVariables.ConnectionString); ;
            connectioninfo.ServerName = PublicVariables.GetServerName(PublicVariables.ConnectionString); ;

            connectioninfo.IntegratedSecurity = false;

            SetDBLoginForReport(connectioninfo, RD);


            switch (Report_Name)
            {
                case "UserList.rpt":
                    {
                        RD.SetParameterValue("ReportDate", String.Format("{0:dd/MM/yyyy}", DateTime.Now));
                        break;
                    }
                case "PersonnelList.rpt":
                    {
                        break;
                    }
                case "PartList.rpt":
                    {
                        //RD.SetParameterValue("preparDate", String.Format("{0:dd/MM/yyyy}", DateTime.Now));
                        RD.SetParameterValue("storeNam", Params[4]);
                        RD.SetParameterValue("toolsTyp", Params[5]);
                        RD.SetParameterValue("fromLID", Params[7]);
                        RD.SetParameterValue("toLID", Params[8]);
                        if (Params[9] != null)
                        { RD.SetParameterValue("fromNID", Params[9]); }
                        if (Params[10] != null)
                        { RD.SetParameterValue("toNID", Params[10]); }
                        break;
                    }
                case "InOutList.rpt":
                    {
                        //RD.SetParameterValue("preparDate", String.Format("{0:dd/MM/yyyy}", DateTime.Now));
                        RD.SetParameterValue("InOut_az", Params[0]);
                        RD.SetParameterValue("InOut_ta", Params[1]);
                        break;
                    }
                case "CalibrationTags.rpt":
                    {
                        RD.SetParameterValue("partType", Params[2]);
                        RD.SetParameterValue("storeName", Params[3]);
                        break;
                    }
                case "ServicingCard.rpt":
                    {
                        RD.SetParameterValue("PARTtype", Params[11]);
                        RD.SetParameterValue("STOREname", Params[12]);
                        RD.SetParameterValue("PARTcond", Params[13]);
                        break;
                    }

            }





            CRV.ViewerCore.ReportSource = RD;


        }



    }
}

 

به این پاسخ امتیاز بدهید    0
امتیاز: 20 رتبه: 36
پاسخ دهنده : Sowgandi 08:02 1399/05/01

کدها ظاهرا مشکلی ندارند. کدهای قسمت Window_Loaded رو داخل Try و Cach به شکل زیر قرار بدید تا زمانی که در کلاینت اجرا میشه متن خطارو بهتون بده.

            try
            {

              //// محل قرار گیری کدها
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }        

 

به این پاسخ امتیاز بدهید    0
امتیاز: 871 رتبه: 3
پاسخ دهنده : Mfarahmand 13:24 1399/05/01

با سلام،

مشکل حل شد.

می بایست در کامپیوتر کلاینت ورژن نسخه Runtime32 بیتی مرتبط با همان کریستال ریپورتی که گزارشات در آن ساخته شده را نصب می کردم که اینطور نبود.

با نصب نسخه مربوطه مشکل حل شد.

سپاس از شما جناب Sowgandi.

به این پاسخ امتیاز بدهید    1
امتیاز: 20 رتبه: 36
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود