Могу ли я вызвать sp_send_dbmail в Powerbuilder? - PullRequest
0 голосов
/ 16 сентября 2011
DECLARE sp_send_dbmail PROCEDURE FOR sp_send_dbmail
    @profile_name = :ls_Null,
    @recipients = :ls_To,
    @copy_recipients = :ls_Null,
    @blind_copy_recipients = :ls_Null,
    @subject    = :ls_Null,
    @body = :ls_Body,
    @importance = :ls_Importance,
    @rtn = :li_Rtn OUTPUT;

EXECUTE sp_send_dbmail;

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Объявление локальных внешних функций для вашего объекта транзакции. Откройте пользовательский объект транзакции и перейдите на вкладку «Локальные внешние функции».

Определите ваши вызовы процедуры или package.procedure, как некоторые из следующих примеров:

// stored proc no package
SUBROUTINE SubRtnName(args) RPCFUNC   

// function
long ll_rtn = FUNCTION FuncRtnVal(int li_arg) RPCFUNC 

// standard proc with some in/out parameters
SUBROUTINE CalcAmount(string LS_In1, ref string LS_Out2) RPCFUNC

// package.procedure
SUBROUTINE SubRtnName(args) RPCFUNC ALIAS FOR "PackageName.ProcName"

// more complex package.procedure definition
SUBROUTINE CalcPenaltyAmt(string LS_In1, ref string LS_Out2[]) RPCFUNC ALIAS FOR "Penalty.P_Calc_Amount"

Для вызова процедур в коде с использованием имени, определенного после имени подпрограммы ИЛИ функции:

// call standard proc
SQLCA.SubRtnName(parms);

// call package.procedure
SQLCA.CalcPenaltyAmt('stingarg', ref ls_ref_string_array);

Это предполагает, что у вас есть невизуальный объект транзакции, определенный и установленный как SQLCA в вашем объекте приложения. Без пользовательского объекта транзакции вы не можете определить такие внешние функции. Для этого вы создаете стандартную невизуальную транзакцию типа, затем в вашем объекте приложения в пользовательских переменных замените SQLCA на вашу n_tr_transaction.

0 голосов
/ 17 сентября 2011

Я не уверен, почему нет, вызов хранимых процедур традиционно не является проблемой для PowerBuilder.
Этот код выглядит хорошо из того, что я вижу.

После проверки выполнения для SQLCA.SQLCode и SQLCA.SQLErrText, чтобы определить, есть ли ошибка.Вы можете использовать что-то вроде:

if SQLCA.SQLCode <> 0 then
   MessageBox("Error", "Error Code: " + String(SQLCA.SQLDBCode) + "~r~n" + &
   "Error Message: " + SQLCA.SQLErrText)
end if
...