/// <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; } }
/// <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); }