如何在代码后面实现的.cs文件中调用方法?

时间:2014-11-26 05:36:08

标签: c# asp.net

我在代码隐藏文件中有一个按钮点击事件,如下所示:

    protected void btnArchive_Click(object sender, EventArgs e)
        {
            try
            {
                if (projectId == 0)
                {
                    return;
                }
                Int32 serverPathId = 0;

                ProjectArchiveResponse archiveResponse;
                if (!int.TryParse(this.ddlSourceServer.SelectedValue, out serverPathId))
                    return;
                if (string.IsNullOrEmpty(hidFileCount.Value))
                {
                    this.ShowMsg(this.divMessage, Resources.Resource.ProjectFileArchiveNotAllowed, MessageType.Failed);
                    //The project files couldn't be archived until archive operation was completed.
                    return;
                }
                ProjectManager projectManager = new ProjectManager(null, BasePage.GetCurrentUser(), null) { IsServiceCall = false};

                try
                {
                   archiveResponse = projectManager.StartProjectArchive(projectId, false, () =>
                         {
                             foreach (Control control in tdFileList.Controls.Cast<Control>())
                             {
                                 if (control is Dell.AFP.UserControl.ProjectFileListBaseControl)
                                 {
                                     ((ProjectFileListBaseControl)control).Refresh();
                                 }
                             }
                         }, false);

                   if (archiveResponse.MassivePackageID > 0)
                   {
                       this.ViewState["transferPackageId"] = archiveResponse.MassivePackageID;
                       PopupMonitor(archiveResponse.MassivePackageID);
                   }

                    //handled for any erorrs while submitting massive package or any unhandled exceptions will be taken care here
                   if (archiveResponse._CustomError != null && !string.IsNullOrEmpty(archiveResponse._CustomError.Erorrmessage))
                   {
                       if (!archiveResponse._CustomError._Erorrtype.Equals(MessageType.Info))
                           logger.ErrorFormat("Error occurred with details : {0}", archiveResponse._CustomError.Erorrmessage);
                       ShowMsg(divMessage, archiveResponse._CustomError.Erorrmessage, (MessageType)archiveResponse._CustomError._Erorrtype);
                   }
                }
                catch (KnownErrorException ke)
                {
                    //logger.Fatal("UnExpected exception occured. Exception Details " + ke.Message);
                    logger.Fatal(ke.Message);
                    if (ke.Error.Type.Equals(DELL.AFP.Management.Exceptions.ErrorType.Warning))
                        this.ShowMsg(this.divMessage, ke.Message, MessageType.Info);
                    else
                        this.ShowMsg(this.divMessage, ke.Message, MessageType.Failed);
                }
                catch (Exception ke)
                {
                    logger.ErrorFormat("UnExpected exception has occured with details : {0} - {1}", ke.Message, ke.StackTrace);
                    //ShowMsg(divMessage, "UnExpected exception has occured. Details are logged. Please try after sometime", MessageType.Failed);
                    ShowMsg(divMessage,ke.Message, MessageType.Failed);
                }

            }

在这种情况下,我正在调用ProjectManager.cs文件中的方法StartProjectArchive

ProjectManager.cs中的

StartProjectArchive方法如下:

  public ProjectArchiveResponse StartProjectArchive(int projectID, bool promoteAfterArchive, Action uiRefresh, bool waitTillTransfered, string archiveNotificationUrl = null)
        {
            ProjectArchiveResponse projectArchiveResponse = new ProjectArchiveResponse() { ProjectID = projectID, MassivePackageID = -1 };
            string sourceServerPath = String.Empty;
            int packageID =0;
            Int32 sourceServerPathID = GetSourceServerPath(projectID, out sourceServerPath);
            var filesWhichNeedsToBeArchived = GetFilesWhichNeedsToBeArchived(projectID, sourceServerPathID, uiRefresh);
            if (objFilesNotInSourceServer != null && objFilesNotInSourceServer.Count > 0)
                KnownErrorException.Throw("ePRJARCMISSFILE01", string.Join(",", objFilesNotInSourceServer.ToArray()));
            if (filesWhichNeedsToBeArchived != null)
            {
                MassiveServiceClientProxy proxy = new MassiveServiceClientProxy();
                Dictionary<string, string> files = new Dictionary<string, string>();
                filesWhichNeedsToBeArchived.Select(file => new
                {
                    SourcePath = file.FileName,
                    DestinationPath = Path.Combine(ConfigurationManager.AppSettings["ArchiveProcessPrefixFolder"],
                                                   Path.GetDirectoryName(file.FileName), Path.GetFileName(file.FileName),
                                                   projectFilelist.Where(pf => string.Compare(pf.FileName, file.FileName, true) == 0).First().VersionID.ToString(),
                                                   Path.GetFileName(file.FileName))
                }).ToList().
              ForEach(file =>
              {
                  if (!files.ContainsKey(file.SourcePath))
                      files.Add(file.SourcePath, file.DestinationPath);
              });

                if (files.Count > 0)
                {
                    string packageDescription = "AFP 4.0: " + projectID.ToString(),
                           targetServerGroupName = archiveServer.MassiveServerGroupName,
                           userSuppliedId = "AFP 4.0: " + EndUserInfo.UserName;

                    try
                    {
                        packageID = proxy.SubmitPackageWithDestinationPath(files, packageDescription, new[] { sourceServerPath },
                                       targetServerGroupName, userSuppliedId, MassiveService.MassivePriority.URGENT, true);
                    }
                    catch (Exception ex)
                    {
                        if (IsServiceCall == true)
                            KnownErrorException.Throw("wPRJARCMASER01");
                        else
                            return new ProjectArchiveResponse() { _CustomError = new CustomError { _Erorrtype = Model.ErrorType.Failed, Erorrmessage = ex.Message } };
                    }

                    if (packageID > 0)
                    {
                        ProjectFileBizManager projectFileBM = new ProjectFileBizManager();
                        projectFileBM.InsertArchiveTransferPackageByProjectFileList(
                            GetProjectFileIDsByFileName(projectID, filesWhichNeedsToBeArchived.Select(file => file.FileName).ToArray()), filesWhichNeedsToBeArchived.Select(file => file.FileName).ToArray(), packageID, projectID, EndUserInfo.UserId);
                        TransferPackageBizManager transferPackageBM = new TransferPackageBizManager();
                        if (promoteAfterArchive)
                        {
                            transferPackageBM.UpdateTransferPackageFeature(packageID, promoteAfterArchive);
                        }
                        projectArchiveResponse.MassivePackageID = packageID;
                        if (waitTillTransfered)
                        {
                            Task<ProjectArchiveResponse> mainTask = Task<ProjectArchiveResponse>.Factory.StartNew(
                                () =>
                                {
                                    Task<Enums.TransferStatusEnum> packageTransfer = Task<Enums.TransferStatusEnum>.Factory.StartNew(
                                        () =>
                                        {
                                            try
                                            {
                                                TransferPackage transferPackage = null;
                                                while (true)
                                                {
                                                    transferPackage = transferPackageBM.GetTransferPackage(packageID);
                                                    if (transferPackage.TransferStatus.TransferStatusId == (int)Enums.TransferStatusEnum.Submitted || transferPackage.TransferStatus.TransferStatusId == (int)Enums.TransferStatusEnum.Transferring)
                                                        Thread.Sleep(8000);
                                                    else
                                                        break;
                                                }
                                                logger.DebugFormat("Massive package status : {0} for Package : {1}", (Enums.TransferStatusEnum)transferPackage.TransferStatus.TransferStatusId, transferPackage.TransferPackageId);
                                                return (Enums.TransferStatusEnum)transferPackage.TransferStatus.TransferStatusId;
                                            }
                                            catch (Exception exp)
                                            {
                                                logger.ErrorFormat("Project Archive Error, while trying to find massive package status : {0}", exp);
                                                return Enums.TransferStatusEnum.Submitted;
                                            }
                                        });

                                    try
                                    {
                                        Int32 timeOutInMins = (ConfigurationManager.AppSettings["ProjectArchive_PackageMonitorTimeoutInMinutes"] == null) ? 60 :
                                            Convert.ToInt32(ConfigurationManager.AppSettings["ProjectArchive_PackageMonitorTimeoutInMinutes"]);
                                        if (!Task.WaitAll(new Task[] { packageTransfer }, timeOutInMins * 60 * 1000))
                                        {
                                            projectArchiveResponse.Timedout = true;
                                            projectArchiveResponse.TransferStatus = Enums.TransferStatusEnum.Submitted;
                                        }
                                        else
                                            projectArchiveResponse.TransferStatus = packageTransfer.Result;

                                        logger.DebugFormat("Project Archive Response, Project ID: {0}\n Package ID : {1},\n IsTimedout : {2},\n Timeout value : {3} minutes, \n Transfer Status : {4}", projectArchiveResponse.ProjectID, projectArchiveResponse.MassivePackageID, projectArchiveResponse.Timedout, timeOutInMins, projectArchiveResponse.TransferStatus);
                                    }
                                    catch (Exception exp)
                                    {
                                        logger.ErrorFormat("Project Archive Error, while waiting to fetch massive package status : {0}", exp);
                                    }
                                    return projectArchiveResponse;
                                });

                            if (!string.IsNullOrEmpty(archiveNotificationUrl))
                            {
                                mainTask.ContinueWith((a) =>
                                {
                                    try
                                    {
                                        AFPArchiveNotifyProxy archiveNotification = new AFPArchiveNotifyProxy();
                                        ArchiveNotificationService.ProjectArchiveResponse archiveResponse = new ArchiveNotificationService.ProjectArchiveResponse()
                                        {
                                            MassivePackageID = a.Result.MassivePackageID,
                                            ProjectID = a.Result.ProjectID,
                                            IsTimedout = a.Result.Timedout,
                                            ArchiveStatus = (Enum.Parse(typeof(ArchiveNotificationService.ArchiveStatusEnum), (a.Result.TransferStatus.ToString())) as ArchiveNotificationService.ArchiveStatusEnum?).Value
                                        };
                                        MassiveServiceClientProxy massiveServiceClientProxy = new MassiveServiceClientProxy();
                                        FileTransferRequest[] fileTransferRequests = massiveServiceClientProxy.GetFileStatus(a.Result.MassivePackageID);
                                        archiveResponse.Files = fileTransferRequests.Select(f => f.FileName).ToArray();
                                        archiveNotification.ProjectArchiveUpdate(archiveNotificationUrl, archiveResponse);

                                        logger.DebugFormat("Project Archive Response Notification, Project ID: {0}\n Package ID : {1},\n IsTimedout : {2},\n Archive Status :{3},\n Notification Url : {4},\n Total Files : {5}", archiveResponse.ProjectID, archiveResponse.MassivePackageID, archiveResponse.IsTimedout, archiveResponse.ArchiveStatus, archiveNotificationUrl, archiveResponse.Files.Count());
                                        logger.DebugFormat("Package ID : {0}, Files : {1}", archiveResponse.MassivePackageID, string.Join(",", archiveResponse.Files.ToArray()));
                                    }
                                    catch (Exception exp)
                                    {
                                        logger.ErrorFormat("Project Archive Error, while invoking archive notification : {0}", exp);
                                    }
                                });
                                projectArchiveResponse.TransferStatus = Enums.TransferStatusEnum.Submitted;
                                return projectArchiveResponse;
                            }
                            else
                            {
                                mainTask.Wait();
                            }
                        }
                    }
                    else
                    {
                        if (IsServiceCall == true)
                            KnownErrorException.Throw("ePRJARCMASS01");
                        else
                            return new ProjectArchiveResponse() { _CustomError = new CustomError { _Erorrtype = Model.ErrorType.Failed, Erorrmessage = "Massive has not returned the massive packageid" } };
                    }
                }
                else
                {
                    // this.ShowMsg(this.divMessage, Resources.Resource.NoFilesToArchive, MessageType.Info);
                    if (IsServiceCall == true)
                    KnownErrorException.Throw("wPRJARCNOFILES01");
                    else
                        return new ProjectArchiveResponse() { _CustomError = new CustomError { _Erorrtype = Model.ErrorType.Info, Erorrmessage = "There are no files to archive" } };
                }
            }
            return projectArchiveResponse;
        }

在此我们将参数作为“Action uiRefresh”。我们将此uiRefresh称为GetFilesWhichNeedsToBeArchivedstartArchiveProject方法中的方法。 tunrn中的这个Refresh方法调用代码隐藏文件中的方法。当我们在代码隐藏文件中调用startArchiveProject时,它作为控件传递。现在我还有一件事我需要实现。我在代码后面有一个弹出文件的方法。我需要在方法GetFilesWhichNeedsTobeArchive内的 ProjectManager.cs 类中调用它。在弹出窗口中,我将有一个按钮和复选框。选择用户后,我需要从弹出窗口中获取详细信息,然后我必须继续执行 ProjectManger.cs 页面中的剩余执行。

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:0)

假设您有一个名为btnArchive的按钮,那么添加点击事件订阅,指向您拥有的方法(看起来像点击事件句柄proc)

btnArchive.Click+=(s,e)=>btnArchive_Click(s,e);

此致