public virtual IActionResult Execute(FinService service, ITanSource tanSource) { order = OnCreateOrder(service); if (order == null) { return new ActionResult(Status.CouldNotCreateOrder); } FinServiceResult result = service.SendOrder(order); if (result == FinServiceResult.NeedTan) { string tan = tanSource.GetTan(service); if (tan == null) { return new ActionResult(Status.CouldNotCreateOrder); } result = service.SendTan(tan); } if (result == FinServiceResult.NeedTanMediaName) { Io.Write("Bezeichnung des TAN-Mediums erforderlich!"); FinTanMedia[] vTanMedias = service.TanMedias; if (vTanMedias != null) { Io.Write("Bitte geben Sie einen der folgenden Parameter an:"); foreach (FinTanMedia t in vTanMedias) { Io.Write("-tanmedianame \"" + t.TanMediaName + "\""); } } return new ActionResult(Status.NeedTanMediaName); } if (result == FinServiceResult.Fatal) { return new ActionResult(Status.FatalResult); } // Als Rückgabewert wird der höchste Rückmeldecode aus dem HIRMS genommen. // Wurde kein HIRMS übermittelt wird als Rückgabewert 0 eingesetzt. int orderStatusCode = 0; if (order.StatusSegment != null) { int nIndex = order.StatusSegment.FindMax(); orderStatusCode = order.StatusSegment.GetStatusCode(nIndex); } if (result == FinServiceResult.Error) { return new ActionResult(Status.ErrorResult, orderStatusCode); } if (result == FinServiceResult.Success) { return new ActionResult(Status.Success, orderStatusCode); } throw new Exception("The enum FinServiceResult has been changed! " + "Known states: NeedTan, NeedTanMediaName, Fatal, Error, Success " + "New: " + result); }
public virtual IActionResult Execute(FinService service, ITanSource tanSource) { order = OnCreateOrder(service); if (order == null) { return(new ActionResult(Status.CouldNotCreateOrder)); } FinServiceResult result = service.SendOrder(order); if (result == FinServiceResult.NeedTan) { string tan = tanSource.GetTan(service); if (tan == null) { return(new ActionResult(Status.CouldNotCreateOrder)); } result = service.SendTan(tan); } if (result == FinServiceResult.NeedTanMediaName) { Io.Write("Bezeichnung des TAN-Mediums erforderlich!"); FinTanMedia[] vTanMedias = service.TanMedias; if (vTanMedias != null) { Io.Write("Bitte geben Sie einen der folgenden Parameter an:"); foreach (FinTanMedia t in vTanMedias) { Io.Write("-tanmedianame \"" + t.TanMediaName + "\""); } } return(new ActionResult(Status.NeedTanMediaName)); } if (result == FinServiceResult.Fatal) { return(new ActionResult(Status.FatalResult)); } // Als Rückgabewert wird der höchste Rückmeldecode aus dem HIRMS genommen. // Wurde kein HIRMS übermittelt wird als Rückgabewert 0 eingesetzt. int orderStatusCode = 0; if (order.StatusSegment != null) { int nIndex = order.StatusSegment.FindMax(); orderStatusCode = order.StatusSegment.GetStatusCode(nIndex); } if (result == FinServiceResult.Error) { return(new ActionResult(Status.ErrorResult, orderStatusCode)); } if (result == FinServiceResult.Success) { return(new ActionResult(Status.Success, orderStatusCode)); } throw new Exception("The enum FinServiceResult has been changed! " + "Known states: NeedTan, NeedTanMediaName, Fatal, Error, Success " + "New: " + result); }
public IActionResult DoAction(string action, StringDictionary arguments) { // In jedem Fall wird die PIN oder der Dialogkontext zur Fortführung benötigt. string pin = arguments[Arguments.Pin]; string resume = arguments[Arguments.Resume]; // Optional kann eine TAN oder eine TAN-Liste mitgegeben werden. // Wird beides nicht mitgegeben, so wird die TAN auf der Kommandozeile abgefragt. ITanSource tanSource = tanSourceFactory.GetTanSource(arguments); // Optional kann eine Datei für den HBCI-FinTsTrace angegeben werden. string traceFile = arguments[Arguments.Trace]; // Wird der Schalter -suspend angegeben, so wird nach der Aktion keine // Dialogbeendigung durchgeführt, sondern einfach der Zustand in die angegebene Datei gespeichert. string suspend = arguments[Arguments.Suspend]; // Die IAction Implementierung für die gewünschte Aktion erstellen. IAction cmd = actionFactory.GetAction(action); if (!cmd.Parse(action, arguments)) { throw new ArgumentException("Wrong arguments for the given action!"); } FinContact contact; FinDialog dialog = null; if (resume != null) { dialog = new FinDialog(); dialog.Load(resume); contact = dialog.Contact; } else { contact = FinContactCreator.GetFinContact(arguments); } FinService service = FinServiceCreator.GetFinService(contact, dialog, arguments); IActionResult result = new ActionResult(Status.Unknown); try { service.ClearDocket(); if (!service.Online) { // Hinweis: eine erforderliche Synchronisierung wird von LogOn immer automatisch durchführt. if (!service.LogOn(pin)) { result = new ActionResult(Status.CouldNotLogOn); goto _done; } } if (service.Online) { result = cmd.Execute(service, tanSource); if (suspend != null) { service.Dialog.SaveAs(suspend); } else { service.LogOff(); } } _done: // Falls der Bankkontakt aus einer Datei geladen wurde, so muss diese nun noch // gespeichert werden, damit auch alle am Bankkontakt erfolgten Änderungen // erhalten bleiben. string sContactFile = arguments[Arguments.ContactFile]; if (sContactFile != null) { contact.SaveAs(sContactFile); } // Wurde eine Tracedatei angegeben, so wird der komplette HBCI FinTsTrace in diese // Datei geschrieben. if (traceFile != null) { StreamWriter sw = File.CreateText(traceFile); sw.Write(service.Trace); sw.Close(); } // Auftrag ausgeführt. Zuerst geben wir den gesammelten Laufzettel aus, // danach die Antwortdaten, sofern welche vorhanden sind. io.Write(service.Docket); if (result.Status != Status.CouldNotLogOn) { ResponseData responseData = cmd.GetResponseData(service); if (responseData.Formatted != null) { io.Write(responseData.Formatted); } result.Response = responseData; } } catch (Exception x) { throw new ActionException(x, service.Trace); } finally { service.Dispose(); } return(result); }