Почему возвращаемое значение всегда пустая строка? - PullRequest
0 голосов
/ 13 сентября 2018

Моя функция PowerBuilder возвращает жестко закодированные строковые значения при определенных условиях.

Я зарегистрировался в отладчике, и одно из условий наверняка вернуло жестко закодированную строку, но на стороне, где был сделан вызов функции, я всегда получаю пустую строку "".

Этот трюк PowerBuilder является новым для меня, и я не могу понять, является ли эта функция проблемной или сценарий, который вызывает функцию.

Пожалуйста, посмотрите код функции и помогите мнеиз этих канав PowerBuilder.: (

С уважением,

/// Function Name: _wichTransObject
/// Parameters: Gets Datawindow control
/// Return: String name of the transaction object to use.
/// Purpose: when image is there in nested reports or the directly blob column is used in datawindow object,
/// only native connection can display images while ODBC fails. This function was written to select proper 
/// transaction object so images are displayed in reports.

String dwSyntax, dwo, OriginalDwo
Long RptAt, RptDwoAt, BlobAt

dw_1.SetRedraw(FALSE)
OriginalDwo = dw_1.DataObject

dwSyntax = dw_1.Describe("datawindow.syntax");

/// Nested Reports may have images in them. That can be checked 
/// find the report and if exist then pick its dwo and repeat same steps again for more reports
RptAt = Pos(dwSyntax, "report(", 1)
DO WHILE RptAt > 0
    RptDwoAt = 0
    RptDwoAt = Pos(dwSyntax, "dataobject=", RptAt) /// Get the dataobject of current report
    IF RptDwoAt > 0 THEN
        /// set the dataobject to dw_1 and explore it further
        dwo = Mid(dwSyntax, RptDwoAt + 12, Pos(dwSyntax, "~"", RptDwoAt + 12)  - ( RptDwoAt + 12 ))
        dw_1.DataObject = dwo

        /// explore the nested dataobject and look for blob column
        dwSyntax = dw_1.Describe("datawindow.syntax");
        BlobAt = Pos(dwSyntax, "keyclause", 1) 
        IF BlobAt > 0 THEN /// if blob exist then return NATCA
            dw_1.DataObject = OriginalDwo
            dw_1.SetRedraw(TRUE)
            Return "NATCA"
        END IF
    END IF
LOOP

/// find the report and if exist then pick its dwo and repeat same steps again for more reports
BlobAt = Pos(dwSyntax, "keyclause", 1)
IF BlobAt > 0 THEN
    dw_1.DataObject = OriginalDwo
    dw_1.SetRedraw(TRUE)
    Return "NATCA"
ELSE
    dw_1.DataObject = OriginalDwo
    dw_1.SetRedraw(TRUE)
    Return "SQLCA"  
END IF

/// Ниже приведен код, который вызывает функцию выше

String WTO

WTO = _WhichTransObject(dw_pb_report)
IF WTO = "NATCA" THEN
    /// Make a native connection
    dw_1.SetTransObject(NATCA)
ELSE
    /// Go away with ODBC
    dw_1.SetTransObject(SQLCA)
END IF

1 Ответ

0 голосов
/ 09 октября 2018

Переименование функции решило эту проблему.

Это никогда не было проблемой с событиями, которые я всегда начинаю с подчеркивания.Но я сделал предположение, чтобы изменить имя функции, не зная точную причину.«WTO = oayoay_whichtransobject (dw_pb_report)» получает правильное возвращаемое значение из функции.Это была глобальная функция.

...