oracle 取消订单API错误-由于字段更改原因,验证失败

ac1kyiln  于 2023-01-04  发布在  Oracle
关注(0)|答案(1)|浏览(284)

我将使用以下代码通过API OE_ORDER_PUB取消销售订单标题
但总是返回Validation failed for the field - Change Reason

DECLARE
    --variable declare
BEGIN
    -- Setting the Enviroment --

    FOR I
        IN (SELECT oh.header_id     order_header_id
              FROM oe_order_headers_all oh
             WHERE oh.order_number IN (12301000013) AND oh.org_id = v_org_id)
    LOOP
        BEGIN
            -- CANCEL HEADER --
            v_header_rec.cancelled_flag := 'Y';
            v_header_rec.change_reason := 'Not Provided';

            DBMS_OUTPUT.put_line ('Starting cancel of API');

            -- CALLING THE API TO CANCEL AN ORDER --

            OE_ORDER_PUB.PROCESS_ORDER (
                x_header_rec               => v_header_rec_out
                --... using the parameter
                );
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        DBMS_OUTPUT.put_line ('error in block. reason is :' || SQLERRM);
END;

如何在OE_ORDER_HEADERS中找到变更原因字段的需求规则?

zxlwwiss

zxlwwiss1#

没有太多的信息在这里工作,但这里是你可以尝试
1.检查页面上是否有验证。此错误最可能的原因是标签为“取消原因”的页面项上有验证。该验证失败,从而引发此验证错误
1.检查过程OE_ORDER_PUB.PROCESS_ORDER是否有任何代码来验证订单是否可以取消。
此外,DBMS_OUTPUT.put_line不能用于apex pl/sql代码。DBMS_OUTPUT将消息打印到客户端(sqlplus/sqldeveloper/apex sql workshop)的缓冲区。在apex中,这些调用不会执行任何操作,但应将其从代码中删除,因为它们可能导致缓冲区溢出。
若要正确检测代码,请使用APEX_DEBUG添加可在调试模式下看到的注解,并使用APEX_ERROR处理错误。
对于您的代码,这将类似于

DECLARE
    --variable declare
BEGIN
    -- Setting the Enviroment --

    FOR I
        IN (SELECT oh.header_id     order_header_id
              FROM oe_order_headers_all oh
             WHERE oh.order_number IN (12301000013) AND oh.org_id = v_org_id)
    LOOP
        BEGIN
            -- CANCEL HEADER --
            v_header_rec.cancelled_flag := 'Y';
            v_header_rec.change_reason := 'Not Provided';

            apex_debug.info('Starting cancel of API');

            -- CALLING THE API TO CANCEL AN ORDER --

            OE_ORDER_PUB.PROCESS_ORDER (
                x_header_rec               => v_header_rec_out
                --... using the parameter
                );
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
     apex_error.add_error (
       p_message          => 'error in block. reason is :' || SQLERRM,
       p_display_location => apex_error.c_inline_in_notification );
END;

相关问题