public static void StfcConnection(RfcServerContext serverContext, IRfcFunction function) { MethodBase method = MethodInfo.GetCurrentMethod(); String requtext = function.GetString("REQUTEXT"); Console.WriteLine(); Console.WriteLine("Method {2}.{0} processing RFC call {1}", method.Name, function.Metadata.Name, method.DeclaringType.ToString()); Console.WriteLine("System Attributes:"); Console.WriteLine(AttributesToString(serverContext.SystemAttributes)); Console.WriteLine("Received REQUTEXT: {0}", requtext); // This class is also used in our tRFC & bgRFC Server examples, so let's do some more stuff here to make this more interesting... if (serverContext.InTransaction) { bool bgRFC = false; if (serverContext.TransactionID != null) // It's a tRFC/qRFC. { Console.WriteLine("Currently running in tRFC LUW {0}", serverContext.TransactionID.TID); } else // It's a bgRFC. { Console.WriteLine("Currently running in bgRFC LUW {0}", serverContext.UnitID.Uuid.ToString("N").ToUpper()); bgRFC = true; } if (requtext.Equals("Aborts")) { Console.WriteLine("Let's abort this LUW with an error..."); String errorMessage = "Not in the mood for t/q/bgRFC. Try again later..."; if (bgRFC) { MyUnitIDHandler.SetError(serverContext.UnitID, errorMessage); } else { MyTidHandler.SetError(serverContext.TransactionID, errorMessage); } throw new RfcAbapRuntimeException(errorMessage); } } else // In this case we can send return parameters. { function.SetValue("ECHOTEXT", function.GetString("REQUTEXT")); function.SetValue("RESPTEXT", "NCO3: Hello world."); } }
public static void ExampleShowBgRfcs() { MyUnitIDHandler.ListLUWs(); }