示例#1
0
        /// <summary>
        /// Service callable code to get all RWR issues
        /// </summary>
        /// <returns>A IssuesCD object with a Issues DataTable</returns>
        public static IssuesCD GetIssues()
        {
            IssuesCD           cd = new IssuesCD();
            IssuesTableAdapter ta = new IssuesTableAdapter();

            ta.Fill(cd.Issues);
            ta.Dispose();
            return(cd);
        }
示例#2
0
        /// <summary>
        /// Service callable code to Delete/Insert/Update Issues
        /// </summary>
        /// <param name="cd">A ClientDataSet of type IssuesCD</param>
        /// <returns>A IssuesCD ClientDataSet. If ALL OK contains updated data, if not contains the RowErrors</returns>
        public static IssuesCD UpdateIssues(IssuesCD cd)
        {
            if (cd == null || cd.Tables["Issues"] == null || cd.Tables["Issues"].Rows.Count == 0)
            {
                throw new Exception("The DataSet and/or DataTable is null or empty.");
            }

            TasksTD.TasksDataTable   tt = new TasksTD.TasksDataTable();
            IssuesCD.IssuesDataTable ct = new IssuesCD.IssuesDataTable();

            foreach (IssuesRow modifiedRow in cd.Issues.Select("", "", DataViewRowState.ModifiedCurrent))
            {
                ct.Clear();                                      // clear for next row to import
                ct.ImportRow(modifiedRow);                       // import single row into Table for merge

                tt.Merge(TasksTD.GetTask(modifiedRow.TaskId));   // populate with all current columns
                tt.Merge(ct, false, MissingSchemaAction.Ignore); // overlay with updated columns
            }

            TasksTD td = new TasksTD();

            td.Tasks.BeginLoadData();
            td.Tasks.Merge(cd.Issues, false, MissingSchemaAction.Ignore);
            td.Tasks.Merge(tt, false, MissingSchemaAction.Ignore);

            SqlTransaction transaction = null;

            try
            {
                TasksTD.UpdateTasks(td, ref transaction);
                SqlUtils.CommitTransaction(transaction);

                if (transaction.Connection != null && transaction.Connection.State == ConnectionState.Open)
                {
                    transaction.Connection.Close();
                }
                transaction.Dispose();
            }
            catch (Exception ex)
            {
                SqlUtils.RollbackTransaction(transaction);
                throw ex;
            }

            return(cd);
        }
示例#3
0
        /// <summary>
        /// Client callable code to Delete/Insert/Update Issues
        /// </summary>
        /// <returns>True if update is successful. If False, check for RowErrors.</returns>
        public bool ClientUpdateIssues(bool async)
        {
            PrepareDataBeforeUpdate();

            IssuesCD updatedIssues = new IssuesCD();

            updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Deleted), false, MissingSchemaAction.Ignore);
            updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.Added), false, MissingSchemaAction.Ignore);
            updatedIssues.Merge(Tables["Issues"].Select("", "", DataViewRowState.ModifiedCurrent), false, MissingSchemaAction.Ignore);

            if (updatedIssues.Issues.Rows.Count > 0)
            {
                if (UseWcfService)
                {
                    try
                    {
                        WCF.IssuesContractClient svWCF = new WCF.IssuesContractClient();
                        WCF.UpdateIssuesRequest  rqWCF = new WCF.UpdateIssuesRequest();
                        rqWCF.IssuesCD = new IssuesServiceWCF.IssuesCD();
                        rqWCF.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore);

                        if (async)
                        {
                            string ping = svWCF.Ping();
                            if (String.IsNullOrEmpty(ping))
                            {
                                throw new Exception("WCF is offline.");
                            }
                            svWCF.BeginUpdateIssues(rqWCF, wcf_ClientUpdateIssuesCompleted, svWCF);
                            return(true);
                        }
                        else
                        {
                            WCF.UpdateIssuesResponse rsWCF = svWCF.UpdateIssues(rqWCF);
                            Merge(rsWCF.IssuesCD, false, MissingSchemaAction.Ignore);
                            PrepareDataAfterUpdate();
                            return(true);
                        }
                    }
                    catch { UseWcfService = false; }                     // ignore if not responding
                }
                if (UseAsmxService)
                {
                    try
                    {
                        ASMX.IssuesServiceASMX   svASMX = new ASMX.IssuesServiceASMX();
                        ASMX.UpdateIssuesRequest rqASMX = new ASMX.UpdateIssuesRequest();
                        rqASMX.IssuesCD = new IssuesServiceASMX.IssuesCD();
                        rqASMX.IssuesCD.Merge(updatedIssues, false, MissingSchemaAction.Ignore);

                        if (async)
                        {
                            svASMX.UpdateIssuesCompleted += asmx_ClientUpdateIssuesCompleted;
                            svASMX.UpdateIssuesAsync(rqASMX);
                            return(true);
                        }
                        else
                        {
                            ASMX.UpdateIssuesResponse rsASMX = svASMX.UpdateIssues(rqASMX);
                            Merge(rsASMX.IssuesCD, false, MissingSchemaAction.Ignore);
                            PrepareDataAfterUpdate();
                            return(true);
                        }
                    }
                    catch { UseAsmxService = false; }                     // ignore if not responding
                }
                if (UseClientServer)
                {
                    try
                    {
                        Merge(UpdateIssues(updatedIssues), false, MissingSchemaAction.Ignore);
                        PrepareDataAfterUpdate();
                        return(true);
                    }
                    catch { UseClientServer = false; }                     // ignore if not responding
                }
            }

            return(false);
        }