public void MaintainSAPActivity(MSProject.Task oMSPTask, String sMethod, int iRefNum,
                                        CSAPData.BAPI_METHOD_PROJECTTable arPrjMethod,
                                        CSAPData.BAPI_NETWORKTable arNtwks,
                                        CSAPData.BAPI_NETWORK_ACTIVITYTable arNtwkActivities,
                                        CSAPData.BAPI_NETWORK_ACTIVITY_UPTable arNtwkActivitiesUpDate)
        {
            // Set the method control parameters
            CSAPData.BAPI_METHOD_PROJECT stMethod = new CSAPData.BAPI_METHOD_PROJECT();
            stMethod.Refnumber  = "00000" + iRefNum.ToString();
            stMethod.Objecttype = "NETWORKACTIVITY";
            stMethod.Method     = sMethod;
            stMethod.Objectkey  = oMSPTask.Text30 + oMSPTask.Text1;
            arPrjMethod.Add(stMethod);

            // Only add a single entry for the SAVE
            if (bSaveMethodAdded == false)  // Save method call has not been added
            {
                CSAPData.BAPI_METHOD_PROJECT stMethodSave = new CSAPData.BAPI_METHOD_PROJECT();
                stMethodSave.Method = "SAVE";
                arPrjMethod.Add(stMethodSave);
                bSaveMethodAdded = true;
            }

            // Define the Network associated with the Activity
            CSAPData.BAPI_NETWORK oNtwk = new CSAPData.BAPI_NETWORK();
            oNtwk.Network = oMSPTask.Text30;
            arNtwks.Add(oNtwk);

            // Set the Activity attributes
            CSAPData.BAPI_NETWORK_ACTIVITY    oNtwkActivity   = new CSAPData.BAPI_NETWORK_ACTIVITY();
            CSAPData.BAPI_NETWORK_ACTIVITY_UP oNtwkActivityUp = new CSAPData.BAPI_NETWORK_ACTIVITY_UP();
            oNtwkActivity.Network     = oMSPTask.Text30;
            oNtwkActivity.Activity    = oMSPTask.Text1;
            oNtwkActivity.Control_Key = "PS03";    //Required by SAP PS configuration
            oNtwkActivity.Description = oMSPTask.Name;
            arNtwkActivities.Add(oNtwkActivity);
            // Fill their update structure
            oNtwkActivityUp.Description = "X";
            arNtwkActivitiesUpDate.Add(oNtwkActivityUp);
        }
        public String MaintainSAPProject()
        //   Assumption: Projects are created in SAP
        //     - Provide support for creating/updating Activity & Network
        //     - Can add support for updating WBSs,
        //       and updating/creating WBS Milestones, WBS Hierarchies
        {
            // MaintainSAPProject
            CSAPData.BAPI_NETWORK_ACTIVITYTable    arNtwkActivities       = new CSAPData.BAPI_NETWORK_ACTIVITYTable();
            CSAPData.BAPI_ACT_ELEMENTTable         arActyElements         = new CSAPData.BAPI_ACT_ELEMENTTable();
            CSAPData.BAPI_ACT_ELEMENT_UPDTable     arActyElementsUpDate   = new CSAPData.BAPI_ACT_ELEMENT_UPDTable();
            CSAPData.BAPI_ACT_MILESTONETable       arActyMilestones       = new CSAPData.BAPI_ACT_MILESTONETable();
            CSAPData.BAPI_ACT_MILESTONE_UPDTable   arActyMilestonesUpDate = new CSAPData.BAPI_ACT_MILESTONE_UPDTable();
            CSAPData.BAPI_NETWORK_ACTIVITY_UPTable arNtwkActivitiesUpDate = new CSAPData.BAPI_NETWORK_ACTIVITY_UPTable();
            CSAPData.BAPI_METHOD_PROJECTTable      arPrjMethod            = new CSAPData.BAPI_METHOD_PROJECTTable();
            CSAPData.BAPI_NETWORKTable             arNtwks       = new CSAPData.BAPI_NETWORKTable();
            CSAPData.BAPI_NETWORK_UPDATETable      arNtwksUpDate = new CSAPData.BAPI_NETWORK_UPDATETable();
            CSAPData.BAPI_NETWORK_RELATIONTable    arRltns       = new CSAPData.BAPI_NETWORK_RELATIONTable();
            CSAPData.BAPI_NETWORK_RELATION_UPTable arRltnsUpDate = new CSAPData.BAPI_NETWORK_RELATION_UPTable();
            CTaskHier oTaskH     = new CTaskHier();
            CTaskHier oTaskHBuff = new CTaskHier();
            Boolean   bReturn    = new Boolean();

            // We save Tasks from MSP to SAP as Network Activities
            //   No WBSs or Networks are added.
            int iRefNum = new int();  //Reference parameter required by SAP

            foreach (MSProject.Task oMSPTask in rProject.Tasks)
            {
                // Maintain Activity
                // We are only adding MSP tasks flagged for SAP and of type Activity
                if (oMSPTask.GetField(Microsoft.Office.Interop.MSProject.PjField.pjTaskOutlineCode1) != "No" &&
                    (oMSPTask.Text16 == TaskType.Activity))
                {
                    // Search for the Activity in the SAP Collection.  Is it a new addition?
                    oTaskHBuff = oTaskCollection.Find(oMSPTask.Text16, oMSPTask.Text30, oMSPTask.Text1);
                    if (oTaskHBuff != null) // Found the related Activity
                    {
                        iRefNum++;
                        MaintainSAPActivity(oMSPTask, "UPDATE", iRefNum, arPrjMethod, arNtwks, arNtwkActivities, arNtwkActivitiesUpDate);
                    }
                    else  // New Activity so we add it
                    {
                        // Assign Activity characteristics
                        iRefNum++;
                        MaintainSAPActivity(oMSPTask, "CREATE", iRefNum, arPrjMethod, arNtwks, arNtwkActivities, arNtwkActivitiesUpDate);
                    }
                } //if (oMSPTask.GetField(Microsoft....PjField.pjTaskOutlineCode1) == "No")
            }     //foreach (MSProject.Task oMSPTask in rProject.Tasks)


            try
            {
                bReturn = oSAP.MaintainNetworkActivities(out stBAPIReturn1, ref arMsgs, ref arNtwkActivities,
                                                         ref arActyElements, ref arActyElementsUpDate, ref arActyMilestones,
                                                         ref arActyMilestonesUpDate, ref arNtwkActivitiesUpDate, ref arPrjMethod,
                                                         ref arNtwks, ref arNtwksUpDate, ref arRltns, ref arRltnsUpDate);
                bSaveMethodAdded = false;  //flag so we only add one "SAVE" method to this fcn call
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error in MaintainSAPProject.");
                return("Error in CSAPInterface:MaintainSAPProject");
            }

            if (bReturn == true)
            {
                return("Project saved to SAP successfully.");
            }
            else
            {
                if (arMsgs != null)
                {
                    MessageBox.Show("Error in MaintainSAPProject.");
                    frmSAPData frmSAP = new frmSAPData(this, rProject.ProjectID);
                    frmSAP.Show();
                    frmSAP.SetTab(4);  // set to error message tab
                }
            }

            return("Error,MaintainSAPProject;" + stBAPIReturn1.Message);
        }