/// <summary>
        /// Klasa odpowiedzialna za wykonanie operacji na bazie SAP - wyslanie kontenera na ukladnice
        /// </summary>
        /// <param name="x">Nie uzywane</param>
        private void SendContainer(object x)
        {
            if (string.IsNullOrWhiteSpace(ContainerId))
            {
                Messenger.Default.Send(new LogMessage("Nie podano Id kontenera, przerwano operacje.", LogType.ERROR), "Log");
                return;
            }

            var  sc   = new SendingContainerReturn();
            bool done = DriverSAP.Inst.SendingContainer(
                Environment.UserName,
                ContainerId,
                FVI_EMPTY,
                FVI_NO_LAGP,
                FVI_ABC,
                sc);

            if (done)
            {
                Messenger.Default.Send(new LogMessage("Wysłano kontener " + ContainerId, LogType.DONE), "Log");
            }
            else
            {
                Messenger.Default.Send(new LogMessage(string.Format("Wystąpił błąd przy wysyłaniu kontenera {0}, kod błedu: {1} - {2}", ContainerId, sc.ReturnCode, sc.Error), LogType.ERROR), "Log");
                return;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Metoda wysylajaca kontener na ukladnice.
        /// </summary>
        /// <param name="mode">Tryb pracy (PROD/DEV)</param>
        /// <param name="userName">Nazwa uzytkownika</param>
        /// <param name="idUser_NUM8">ID uzytkownika z SAP</param>
        /// <param name="idContainer_CHAR10">Numer kontenera</param>
        /// <param name="FVI_EMPTY">czy pusty kontener (CHAR1 X - tak; spacja - nie)</param>
        /// <param name="FVI_NO_LAGP">Ignoruje czy kontener istnieje w SAPie (CHAR1 X - tak; spacja - nie) </param>
        /// <param name="FVI_ABC">Wskazniki ABC</param>
        /// <param name="sc">Zmienna pomocnicza, zapisywane sa do niej zwracane kody i informacje przez SAP<</param>
        /// <returns>Zwraca prawde/falsz zaleznie od tego czy udalo sie wykonac akcje.</returns>
        public bool SendingContainer(string userName, string idContainer_CHAR10, char FVI_EMPTY, char FVI_NO_LAGP, char FVI_ABC, SendingContainerReturn sc)
        {
            // char FVI_NO_LQUA_CHK, domyślny 'X'
            bool success = false;

            try
            {
                // Get a destination object from the destination manager
                // To connect to sap and extract data from it you must create an instance of SAP.Middleware.Connector.RfcDestination
                RfcDestination dest = RfcDestinationManager.GetDestination(AppMode);

                // Now that we have a valid RfcDestination object, we need access to the SAP Repository.
                // The repository contains information about the BAPI calls we are going to make.

                // Using the RfcRepository object, acquire a reference to the SAP BAPI by calling method RfcRepository.CreateFunction() method.
                // Pass in the name of the desired function as a string parameter to CreateFunction().
                // This method returns an object we can use to setup parameters, invoke the function, and retrieve results.
                RfcRepository repo = dest.Repository;

                // function: Z_MFCS_SEND
                IRfcFunction z_mfcs_send = repo.CreateFunction("Z_MFCS_SEND");

                // IMPORTING
                // VALUE(FVI_VLPLA) TYPE  LTAP_VLPLA
                // VALUE(FVI_PERNR) TYPE  PERNR_D
                // VALUE(FVI_EMPTY) TYPE  FLAG_X
                // VALUE(FVI_NO_LQUA_CHK) TYPE  FLAG_X
                // FVI_NO_LAGP CHAR(1) - nowy 11/02/16
                // FVI_ABC CHAR(1) [A,B,C] - Wskaźnik ABC - nowy 11/02/16

                // FVI_VLPLA - nr kontenera (CHAR10)
                z_mfcs_send.SetValue("FVI_VLPLA", idContainer_CHAR10);

                // FVI_PERNR - id użytkownika (NUM 8)
                z_mfcs_send.SetValue("FVI_PERNR", PerNBR);

                // czy pusty kontener (CHAR1 X - tak; spacja - nie)
                z_mfcs_send.SetValue("FVI_EMPTY", FVI_EMPTY);

                // FVI_NO_LQUA_CHK - brak kontroli ilosci (CHAR1 X - tak; spacja - nie)
                z_mfcs_send.SetValue("FVI_NO_LQUA_CHK", 'X'); // X

                // Ignoruje czy kontener istnieje w SAPie (CHAR1 X - tak; spacja - nie)
                z_mfcs_send.SetValue("FVI_NO_LAGP", FVI_NO_LAGP);

                // Wskaźnik ABC (CHAR1 A,B,C)
                if (FVI_ABC != FALSE) // domyślny parametr C
                {
                    z_mfcs_send.SetValue("FVI_ABC", FVI_ABC);
                }

                // call
                z_mfcs_send.Invoke(dest);

                // EXPORTING
                // VALUE(FVO_RETURN) TYPE  NUM03
                //* 100 - OK
                //* 101 - Błąd  (FVI_NO_LAGP, 'X') -> testowy błedy numer kontenera | (FVI_NO_LAGP, ' ') -> Kontener nie istnieje.
                //* 102 - Pusta lokalizacja w SAP
                //* 103 - Nie należy przyjmować -> istnieje zlecenie wydania
                //* 333 - błąd komunikacji z serwerem układnicy
                //* 666 - brak uprawnień
                sc.FVO_RETURN = z_mfcs_send.GetValue("FVO_RETURN").ToString();
                sc.ReturnCode = Convert.ToInt32(z_mfcs_send.GetValue("FVO_RETURN"));

                switch (sc.ReturnCode)
                {
                case 100:
                    sc.Error = "OK";
                    success  = true;
                    break;

                case 101:
                    if (FVI_NO_LAGP == FALSE)     // zmiana komunikatu: 11/02/16
                    {
                        sc.Error = $"Kontener [{idContainer_CHAR10}] nie istnieje.";
                    }
                    else
                    {
                        sc.Error = $"Błedny numer kontenera.";
                    }
                    break;

                case 102:
                    sc.Error = "Pusta lokalizacja w SAP.";
                    break;

                case 103:
                    sc.Error = "Istnieje zlecenie wydania.";
                    break;

                case 333:
                    sc.Error = "Błąd komunikacji z serwerem układnicy.";
                    break;

                case 666:
                    sc.Error = "Brak uprawnień.";
                    break;

                default:
                    sc.Error = "Nieznany komunikat błędu: " + sc.ReturnCode;
                    break;
                }

                try
                {
                    DatabaseController.AddingLogData(idContainer_CHAR10, "Wysłanie kontenera na układnicę ", PerNBR, userName, "Z_MFCS_SEND", sc.ReturnCode);
                }
                catch (Exception ex)
                {
                    Messenger.Default.Send(new LogMessage(ex.Message, LogType.DATABASELOG), "Log");
                }
            }
            catch (Exception ex)
            {
                if (ex is RfcAbapRuntimeException || ex is RfcAbapBaseException || ex is RfcBaseException)
                {
                    Messenger.Default.Send(new LogMessage(ex.Message, LogType.ERROR_SAP), "Log");
                    return(false);
                }
            }

            return(success);
        }