Scénarios de simulation
Comment suivre ce chapitre
Entrées : Les données d’ordre d’Ouvrir un portefeuille et un environnement isolé.
Étapes et résultat attendu : Envoyez un ordre distinct par scénario et vérifiez son état ultérieur. La première réponse HTTP confirme la demande ; le scénario décrit le traitement suivant.
Alternatives et actions ultérieures : Scénarios de développement facultatifs, séparés du parcours normal.
Code source des DTO : PortfolioOrderOutputModel
Les variables affectées dans un bloc précédent sont réutilisées dans les suivants. Les saisies du client proviennent de votre interface. Conservez les identifiants et les valeurs de référence dans le contexte du client ; ne recréez pas ce contexte à chaque étape.
Les exemples utilisent des classes utilitaires communes. Consultez Classes utilitaires communes : code source C# et Java complet avant de copier un exemple.
Prérequis : Un environnement de simulation configuré séparément, un adaptateur compatible et les entrées d’Ouvrir un portefeuille.
À conserver pour la suite : Un ordre dont l’état ultérieur doit être vérifié. La simulation dépend de l’intégration.
Les mots-clés suivants décrivent les scénarios de certains adaptateurs d’ordres. Ils sont propres à l’intégration. L’API accepte Note, mais cela ne garantit pas que l’adaptateur actif prend en charge un mot-clé.
Vérifiez la prise en charge et la configuration avec l’opérateur de l’environnement isolé. Ce sont des scénarios alternatifs : envoyez un ordre distinct pour chacun et vérifiez son état ultérieur. Ne supposez pas une prise en charge universelle par toutes les banques ou tous les déploiements.
Vérifiez la prise en charge et la configuration avec l’opérateur de l’environnement isolé. Ce sont des scénarios alternatifs : envoyez un ordre distinct pour chacun et vérifiez son état ultérieur. Ne supposez pas une prise en charge universelle par toutes les banques ou tous les déploiements.
Échec d’envoi de l’ordre
Dans un adaptateur compatible, !#PORTFOLIO-SUBMISSION-FAIL#! demande un échec d’envoi, par exemple une panne réseau simulée.
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.
Ordre envoyé
Dans un adaptateur compatible, !#PORTFOLIO-SUBMITTED#! demande un ordre envoyé avec des données externes simulées.
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.
Ordre accepté
Dans un adaptateur compatible, !#PORTFOLIO-ACCEPTED#! demande un ordre accepté avec des données externes simulées.
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.
Ordre accepté et portefeuille investi
Dans un adaptateur compatible, !#PORTFOLIO-TRADED#! demande un ordre accepté et investi.
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.
Ordre refusé
Dans un adaptateur compatible, !#PORTFOLIO-REJECTED#! demande un ordre refusé.
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.