Я звоню нескольким API для вставки данных в базу данных.
В основном данные представляют собой 2 превосходства, связанные друг с другом.
Я проведу oop до первого Excel fromArray
, вставляйте каждую строку за раз. После добавления строки я получу идентификатор, возвращенный из ответа API, а затем увеличу go до второго excel toArray
, l oop поверх него, чтобы получить связанные строки для строки из первого excel. Каждая строка из второго excel добавляется в базу данных, и я снова получу идентификатор строки, добавленной в db.
Теперь после каждой итерации я получу 2 идентификатора из каждого excel.
let registered_hh_id = '';
let registered_mbr_id = '';
fromArray.forEach((value, idx) => {
// console.log(fromArray[key]['Name'])
let fromArrayPromise = new Promise((resolve, reject)=>{
let attributes = [
{ attribute: "lhMhyp9F1kg", value: value["HH_last_name"] != "" ? value["HH_last_name"] : "" },
{ attribute: "v4nxGLRD3n8", value: value["HH_status"] != "" ? value["HH_status"] : "" }
let data = {
Type: this.formGroup.controls.entity_from.value,
Unit: this.formGroup.controls.organization.value,
attributes: attributes
}
registered_hh_id = '';
this.api.postData(data).subscribe(
(response) => {
// registered_hh_id = '';
// console.log(response)
if (response['httpStatus'] == "OK"
&& response['httpStatusCode'] == 200
&& response['message'] == "Import was successful.") {
registered_hh_id = response['response']['importSummaries'][0]['reference'];
console.log("check hh_id", registered_hh_id)
В этот момент я могу получить на каждой итерации различный registered_hh_id
. Поэтому, если l oop прочитает 3 массива из Excel, на консоли я увижу их нормально.
Теперь, получив 200
в качестве http-кода состояния, я сделаю регистрацию этого идентификатора. в таблицу следующим образом:
this.api.makeEnrollment(registered_hh_id,
this.formGroup.controls.program_from.value,
"ACTIVE", this.formGroup.controls.organization.value,
enrollDate, enrollDate).subscribe(
(response) => {
if (response['httpStatusCode'] == 200) {
resolve();
На этом этапе, после регистрации возвращенного идентификатора из первого вызова, сценарий go переходит ко второму Excel, ищет все массивы, в которых встречается условие требования и добавьте строку за строкой в базу данных:
fromArrayPromise.then(()=>{
toArray.forEach((mbr_value, id) => {
if (mbr_value['hh_new_id'] == value['hh_new_id']) {
let mbr_attributes = [
{ attribute: "TN0ZUAIq3jr", value: mbr_value["hh_new_id"].toString() },
{ attribute: "YvQdThw2NdW", value: mbr_value["mbr_new_id"].toString() },
{ attribute: "jQrM04xaPxb", value: mbr_value["first_name"] != "" ?
mbr_value["first_name"] : "" },
{ attribute: "CybsW0GygpD", value: mbr_value["last_name"] != "" ?
mbr_value["last_name"] : "" },
]
let mbr_data = {
trackedEntityType: this.formGroup.controls.entity_to.value,
orgUnit: this.formGroup.controls.organization.value,
attributes: mbr_attributes
}
this.api.postData(mbr_data).subscribe(
(response) => {
if (response['httpStatus'] == "OK"
&& response['httpStatusCode'] == 200
&& response['message'] == "Import was successful.") {
registered_mbr_id = response['response']['importSummaries'][0]['reference'];
this.api.makeEnrollment(registered_mbr_id,
this.formGroup.controls.program_to.value,
"ACTIVE", this.formGroup.controls.organization.value,
enrollDate, enrollDate).subscribe(
(response) => {
if (response['httpStatusCode'] == 200 && response['httpStatus'] == "OK"
&& response['message'] == "Import was successful.") {
//Problem is occuring here. Connection Section.
}
}
Теперь внутри ответа, если httpStatusCode
равно 200, мы зарегистрируем человека в программу и получим его возвращенный идентификатор registered_mbr_id
.
В конце мне нужно соединить связанный registered_hh_id
из первого l oop, с registered_mbr_id
второго l oop в другой стол.
Что происходит заключается в том, что добавляются только последние два сгенерированных registered_mbr_id
и registered_hh_id
, а остальные просто не связаны друг с другом посредством последнего вызова API:
Этот сценарий находится внутри сценария подключения (см. выше):
console.log(registered_hh_id, registered_mbr_id)
let programOwners = [{
ownerOrgUnit: this.formGroup.controls.organization.value,
program: this.formGroup.controls.program_from.value,
trackedEntityInstance: registered_hh_id
}];
let relationships = [
{
lastUpdated: this.datePipe.transform(myDate, 'yyyy-MM-ddTHH:mm:ss'),
created: this.datePipe.transform(myDate, 'yyyy-MM-ddTHH:mm:ss'),
relationshipName: "LBN_HH_MBR_Relationship",
bidirectional: false,
relationshipType: this.formGroup.controls.relation_id.value,
relationship: "wMECqtsc47R",
from: {
trackedEntityInstance:{
trackedEntityInstance: registered_hh_id,
programOwners: []
}
},
to: {
trackedEntityInstance:{
trackedEntityInstance: registered_mbr_id,
programOwners: []
}
},
// relationshipType: this.formGroup.controls.relation_id.value
}
];
let data = {
programOwners: programOwners,
relationships: relationships
}
this.api.addRelation(registered_hh_id, data).subscribe(
(response) => {
if (response['httpStatusCode'] == 200 && response['message'] == 'Import was successful.') {
console.log("relation added")
}
},
(error) => {
console.log(error)
}
);
Позволяет скажем, у меня есть в первом файле Excel 2 строки.
На первой итерации у меня будет идентификатор, возвращенный из первого вызова API. Затем скрипт будет go во второй l oop и добавит в БД все связанные строки, используя условие if для определенных c критериев. Для каждой строки во втором l oop возвращается другой идентификатор.
Мне нужно соединить эти 2 идентификатора через другой API.
Проблема в том, что последний API вызывается один раз, для окончательных идентификаторов, сгенерированных из финальных l oop итераций.