Как проверить, успешно ли выполнены запрос и функция? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть функция, которая принимает несколько аргументов, после чего будет выполнен запрос на удаление. Сразу после этого я вызываю другую функцию, которая обновит таблицу с отметкой времени и идентификатором пользователя. Код, который я использую, выглядит следующим образом:

remote function deleteComment(required string storeID, required string recID) returnFormat="JSON" {
    local.fnResults = structNew();
    local.runProcess = true;

    try {
        if ( !len(arguments.recID) ) {
            local.runProcess = false;
            local.fnResults = {status: 400, message: "Error! Incomplete or invalid data."};
        }

        if ( runProcess ) {
            local.qryParams = {rec_id: {cfsqltype: "cf_sql_numeric", value: "#arguments.recID#"}};
            local.deleteSQL = "DELETE FROM Articles WHERE rec_id = :rec_id";
            queryExecute(deleteSQL, qryParams, {datasource: "#application.datasource#", result: "deleteResult"});
            local.updateResult = updateProfile(arguments.agencyID);

            if ( deleteResult.recordcount && updateResult.recordcount ) {
                local.fnResults = {status: 200, message: "Record successfully removed."};
            } else {
                local.fnResults = {status: 400, message: "Error! Query failed."};
            }
        }
    } catch ( any e) {
        local.fnResults = {status: 400, message: "Error! Please contact your administrator"};
    }

    return fnResults;
}

Вот пример функции updateProfile:

public struct function updateAgencyProfile(required string storeID) {
    try {
        local.qryParams = {
            storeID: {cfsqltype: "cf_sql_numeric", value: "#arguments.storeID#"},
            user_id: client.userid
        };

        local.Profile_SQL = "
            UPDATE profile
            SET last_update = getDate(),
                user_id = :user_id
            WHERE store_id = :storeID
        ";

        queryExecute(Profile_SQL, qryParams, {datasource: "#application.datasource#", result: "updateResult"});

        return updateResult;
    } catch ( any e) {
        return {status: 400};
    }
}

Как вы можете видеть в моем примере выше, запрос на удаление выполняется первым и сразу после того, как я вызываю публичную функцию updateProfile, которая обновит таблицу профиля и вернет результат запроса. Я использовал этот блок кода, чтобы проверить, успешно ли выполнены оба запроса:

if ( deleteResult.recordcount && updateResult.recordcount ) {
    local.fnResults = {status: 200, message: "Record successfully removed."};
} else {
    local.fnResults = {status: 400, message: "Error! Query failed."};
}

Мне интересно, если это необходимо, или я могу позволить попробовать блок catch для обнаружения каких-либо ошибок в этой функции? Кроме того, это хорошо подходит для хранимой процедуры? У меня есть другие функции, которые нужно будет вызвать updateProfile, чтобы обновить записи. Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

...