Simulationsabläufe
So folgen Sie diesem Kapitel
Eingaben: Die Auftragseingaben aus Portfolio eröffnen und eine isolierte Simulationsumgebung.
Schritte und erwartetes Ergebnis: Senden Sie für jedes Szenario einen eigenen Auftrag und prüfen Sie dessen späteren Status. Die erste HTTP-Antwort bestätigt die Anfrage; das Szenario beschreibt die nachfolgende Verarbeitung.
Alternativen und spätere Aktionen: Dies sind optionale Entwicklungsszenarien, getrennt vom normalen Kundenablauf.
DTO-Quellcode: PortfolioOrderOutputModel
In früheren Codeblöcken zugewiesene Variablen werden später wiederverwendet. Kundeneingaben stammen aus Ihrer Oberfläche. Bewahren Sie IDs und Referenzwerte im Kontext des jeweiligen Kunden auf; legen Sie nicht für jeden Schritt einen neuen Kontext an.
Die Beispiele verwenden gemeinsame Hilfsklassen. Lesen Sie Gemeinsame Hilfsklassen: vollständiger C#- und Java-Quellcode bevor Sie ein Beispiel übernehmen.
Voraussetzungen: Eine separat eingerichtete Simulationsumgebung, ein unterstützender Auftragsadapter und die Eingaben aus Portfolio eröffnen.
Für den nächsten Schritt aufbewahren: Ein Auftrag, dessen späterer Status geprüft werden muss. Die Simulationsunterstützung ist integrationsspezifisch.
Die folgenden Schlüsselwörter beschreiben Simulationsszenarien einiger Auftragsadapter. Sie sind integrationsspezifisch. Die WMS-API akzeptiert das Feld Note; daraus folgt jedoch nicht, dass der aktive Adapter ein bestimmtes Schlüsselwort unterstützt.
Klären Sie Unterstützung und Konfiguration mit dem Betreiber Ihrer isolierten Entwicklungsumgebung. Es handelt sich um alternative Szenarien: Senden Sie jeweils einen eigenen Auftrag und prüfen Sie dessen späteren Status. Setzen Sie keine allgemeine Unterstützung durch alle Depotbanken oder Deployments voraus.
Klären Sie Unterstützung und Konfiguration mit dem Betreiber Ihrer isolierten Entwicklungsumgebung. Es handelt sich um alternative Szenarien: Senden Sie jeweils einen eigenen Auftrag und prüfen Sie dessen späteren Status. Setzen Sie keine allgemeine Unterstützung durch alle Depotbanken oder Deployments voraus.
Auftrag konnte nicht gesendet werden
In einem unterstützenden Adapter fordert !#PORTFOLIO-SUBMISSION-FAIL#! einen fehlgeschlagenen Sendeversuch an, beispielsweise einen simulierten Netzwerkfehler.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var orderPortfolioCreationInputModel = new
{
AccountHoldingInstitutionCode = accountHoldingInstitution.Code,
UserId = userId,
InvestmentCategoryId = investmentCategory3A.Id,
ProposalId = proposalSelectedByUser.Id,
ReasonToChangeProposalResponsesIds = selectedReasonIds,
Note = "!#PORTFOLIO-SUBMISSION-FAIL#!"
};
using var httpContent = GuideHttp.CreateMultipartContent(orderPortfolioCreationInputModel, pdfContractAsByteArray);
(await httpClient.PostAsync("api/v1/user-portfolio-orders/creation", httpContent)).EnsureSuccessStatusCode();
// Use only in an environment whose order adapter supports this keyword.
JsonObject payload = new JsonObject();
payload.addProperty("AccountHoldingInstitutionCode", accountHoldingInstitutionObj.Code);
payload.addProperty("UserId", userId);
payload.addProperty("InvestmentCategoryId", investmentCategoryId);
payload.addProperty("ProposalId", proposalId);
payload.add("ReasonToChangeProposalResponsesIds", new Gson().toJsonTree(selectedReasonIds));
payload.addProperty("Note", "!#PORTFOLIO-SUBMISSION-FAIL#!");
MultiPartBodyPublisher body = new MultiPartBodyPublisher()
.addPart("jsonPayload", payload.toString())
.addPart("userContracts", () -> new ByteArrayInputStream(pdfAsByteArray), "Contract.pdf", "application/pdf");
HttpRequest request = HttpRequest.newBuilder()
.uri(Settings.wmsUri("user-portfolio-orders/creation"))
.timeout(Duration.ofMinutes(1))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "multipart/form-data; boundary=" + body.getBoundary())
.POST(body.build()).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
PortfolioOrderOutputModel order = new Gson().fromJson(response.body(), PortfolioOrderOutputModel.class);
// Check the order status separately; HTTP success does not prove the simulated outcome.
Auftrag gesendet
In einem unterstützenden Adapter fordert !#PORTFOLIO-SUBMITTED#! einen gesendeten Auftrag mit simulierten externen Auftragsdaten an.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var orderPortfolioCreationInputModel = new
{
AccountHoldingInstitutionCode = accountHoldingInstitution.Code,
UserId = userId,
InvestmentCategoryId = investmentCategory3A.Id,
ProposalId = proposalSelectedByUser.Id,
ReasonToChangeProposalResponsesIds = selectedReasonIds,
Note = "!#PORTFOLIO-SUBMITTED#!"
};
using var httpContent = GuideHttp.CreateMultipartContent(orderPortfolioCreationInputModel, pdfContractAsByteArray);
(await httpClient.PostAsync("api/v1/user-portfolio-orders/creation", httpContent)).EnsureSuccessStatusCode();
// Use only in an environment whose order adapter supports this keyword.
JsonObject payload = new JsonObject();
payload.addProperty("AccountHoldingInstitutionCode", accountHoldingInstitutionObj.Code);
payload.addProperty("UserId", userId);
payload.addProperty("InvestmentCategoryId", investmentCategoryId);
payload.addProperty("ProposalId", proposalId);
payload.add("ReasonToChangeProposalResponsesIds", new Gson().toJsonTree(selectedReasonIds));
payload.addProperty("Note", "!#PORTFOLIO-SUBMITTED#!");
MultiPartBodyPublisher body = new MultiPartBodyPublisher()
.addPart("jsonPayload", payload.toString())
.addPart("userContracts", () -> new ByteArrayInputStream(pdfAsByteArray), "Contract.pdf", "application/pdf");
HttpRequest request = HttpRequest.newBuilder()
.uri(Settings.wmsUri("user-portfolio-orders/creation"))
.timeout(Duration.ofMinutes(1))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "multipart/form-data; boundary=" + body.getBoundary())
.POST(body.build()).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
PortfolioOrderOutputModel order = new Gson().fromJson(response.body(), PortfolioOrderOutputModel.class);
// Check the order status separately; HTTP success does not prove the simulated outcome.
Auftrag angenommen
In einem unterstützenden Adapter fordert !#PORTFOLIO-ACCEPTED#! einen angenommenen Auftrag mit simulierten externen Auftragsdaten an.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var orderPortfolioCreationInputModel = new
{
AccountHoldingInstitutionCode = accountHoldingInstitution.Code,
UserId = userId,
InvestmentCategoryId = investmentCategory3A.Id,
ProposalId = proposalSelectedByUser.Id,
ReasonToChangeProposalResponsesIds = selectedReasonIds,
Note = "!#PORTFOLIO-ACCEPTED#!"
};
using var httpContent = GuideHttp.CreateMultipartContent(orderPortfolioCreationInputModel, pdfContractAsByteArray);
(await httpClient.PostAsync("api/v1/user-portfolio-orders/creation", httpContent)).EnsureSuccessStatusCode();
// Use only in an environment whose order adapter supports this keyword.
JsonObject payload = new JsonObject();
payload.addProperty("AccountHoldingInstitutionCode", accountHoldingInstitutionObj.Code);
payload.addProperty("UserId", userId);
payload.addProperty("InvestmentCategoryId", investmentCategoryId);
payload.addProperty("ProposalId", proposalId);
payload.add("ReasonToChangeProposalResponsesIds", new Gson().toJsonTree(selectedReasonIds));
payload.addProperty("Note", "!#PORTFOLIO-ACCEPTED#!");
MultiPartBodyPublisher body = new MultiPartBodyPublisher()
.addPart("jsonPayload", payload.toString())
.addPart("userContracts", () -> new ByteArrayInputStream(pdfAsByteArray), "Contract.pdf", "application/pdf");
HttpRequest request = HttpRequest.newBuilder()
.uri(Settings.wmsUri("user-portfolio-orders/creation"))
.timeout(Duration.ofMinutes(1))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "multipart/form-data; boundary=" + body.getBoundary())
.POST(body.build()).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
PortfolioOrderOutputModel order = new Gson().fromJson(response.body(), PortfolioOrderOutputModel.class);
// Check the order status separately; HTTP success does not prove the simulated outcome.
Auftrag angenommen und Portfolio investiert
In einem unterstützenden Adapter fordert !#PORTFOLIO-TRADED#! einen angenommenen und investierten Auftrag an.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var orderPortfolioCreationInputModel = new
{
AccountHoldingInstitutionCode = accountHoldingInstitution.Code,
UserId = userId,
InvestmentCategoryId = investmentCategory3A.Id,
ProposalId = proposalSelectedByUser.Id,
ReasonToChangeProposalResponsesIds = selectedReasonIds,
Note = "!#PORTFOLIO-TRADED#!"
};
using var httpContent = GuideHttp.CreateMultipartContent(orderPortfolioCreationInputModel, pdfContractAsByteArray);
(await httpClient.PostAsync("api/v1/user-portfolio-orders/creation", httpContent)).EnsureSuccessStatusCode();
// Use only in an environment whose order adapter supports this keyword.
JsonObject payload = new JsonObject();
payload.addProperty("AccountHoldingInstitutionCode", accountHoldingInstitutionObj.Code);
payload.addProperty("UserId", userId);
payload.addProperty("InvestmentCategoryId", investmentCategoryId);
payload.addProperty("ProposalId", proposalId);
payload.add("ReasonToChangeProposalResponsesIds", new Gson().toJsonTree(selectedReasonIds));
payload.addProperty("Note", "!#PORTFOLIO-TRADED#!");
MultiPartBodyPublisher body = new MultiPartBodyPublisher()
.addPart("jsonPayload", payload.toString())
.addPart("userContracts", () -> new ByteArrayInputStream(pdfAsByteArray), "Contract.pdf", "application/pdf");
HttpRequest request = HttpRequest.newBuilder()
.uri(Settings.wmsUri("user-portfolio-orders/creation"))
.timeout(Duration.ofMinutes(1))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "multipart/form-data; boundary=" + body.getBoundary())
.POST(body.build()).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
PortfolioOrderOutputModel order = new Gson().fromJson(response.body(), PortfolioOrderOutputModel.class);
// Check the order status separately; HTTP success does not prove the simulated outcome.
Auftrag abgelehnt
In einem unterstützenden Adapter fordert !#PORTFOLIO-REJECTED#! einen abgelehnten Auftrag an.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var orderPortfolioCreationInputModel = new
{
AccountHoldingInstitutionCode = accountHoldingInstitution.Code,
UserId = userId,
InvestmentCategoryId = investmentCategory3A.Id,
ProposalId = proposalSelectedByUser.Id,
ReasonToChangeProposalResponsesIds = selectedReasonIds,
Note = "!#PORTFOLIO-REJECTED#!"
};
using var httpContent = GuideHttp.CreateMultipartContent(orderPortfolioCreationInputModel, pdfContractAsByteArray);
(await httpClient.PostAsync("api/v1/user-portfolio-orders/creation", httpContent)).EnsureSuccessStatusCode();
// Use only in an environment whose order adapter supports this keyword.
JsonObject payload = new JsonObject();
payload.addProperty("AccountHoldingInstitutionCode", accountHoldingInstitutionObj.Code);
payload.addProperty("UserId", userId);
payload.addProperty("InvestmentCategoryId", investmentCategoryId);
payload.addProperty("ProposalId", proposalId);
payload.add("ReasonToChangeProposalResponsesIds", new Gson().toJsonTree(selectedReasonIds));
payload.addProperty("Note", "!#PORTFOLIO-REJECTED#!");
MultiPartBodyPublisher body = new MultiPartBodyPublisher()
.addPart("jsonPayload", payload.toString())
.addPart("userContracts", () -> new ByteArrayInputStream(pdfAsByteArray), "Contract.pdf", "application/pdf");
HttpRequest request = HttpRequest.newBuilder()
.uri(Settings.wmsUri("user-portfolio-orders/creation"))
.timeout(Duration.ofMinutes(1))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "multipart/form-data; boundary=" + body.getBoundary())
.POST(body.build()).build();
var response = httpClient.send(request, BodyHandlers.ofString());
Api.requireSuccess(response);
PortfolioOrderOutputModel order = new Gson().fromJson(response.body(), PortfolioOrderOutputModel.class);
// Check the order status separately; HTTP success does not prove the simulated outcome.