У меня есть файл с 2 функциями. Одна из функций работает отлично, поэтому я не буду включать ее в это. Я включу функцию, вызывающую проблему.Блокировка транзакции, не высвобождающаяся на последней записи
Функция ss_update является той, которая вызывает у меня проблему и не освобождает блокировку, как я предполагал. Я, наконец, должен работать таким образом, добавляя текущую функцию show no screen. заявление. Мне интересно, может ли кто-нибудь объяснить это мне, и если есть лучший способ справиться с этой ситуацией.
FUNCTION ss_update RETURNS INTEGER
(INPUT iUserName AS CHAR,
INPUT iScreenName AS CHAR,
INPUT iWidgetName AS CHAR,
INPUT iWidgetValue AS CHAR):
DEFINE VARIABLE retStatus AS INTEGER NO-UNDO.
FIND ScreenState EXCLUSIVE-LOCK WHERE ScreenState.userName = iUserName AND
ScreenState.screenName = iScreenName AND
ScreenState.widgetName = iWidgetName NO-ERROR.
IF AVAIL ScreenState THEN
DO:
IF ScreenState.widgetValue <> iWidgetValue THEN
DO:
ASSIGN
ScreenState.widgetValue = iWidgetValue.
END.
retStatus = 1.
END.
IF NOT AVAIL ScreenState THEN
DO:
CREATE ScreenState.
ASSIGN
ScreenState.screenStateId = NEXT-VALUE(seq-ScreenStateId)
ScreenState.userName = iUserName
ScreenState.screenName = iScreenName
ScreenState.widgetName = iWidgetName
ScreenState.widgetValue = iWidgetValue.
retStatus = 2.
END.
/* This was added to release the lock. */
FIND CURRENT screenstate NO-LOCK.
RETURN retStatus.
END FUNCTION.
У меня есть код, который будет вызывать функцию обновления несколько раз подряд. Как это ...
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "t-ActiveOnly", t-ActiveOnly:SCREEN-VALUE).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "t-BadAdd", t-BadAdd:SCREEN-VALUE).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "LastCompany", company.companyId).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "rs-Filter", rs-Filter:SCREEN-VALUE).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "cb-Salesman", cb-Salesman:SCREEN-VALUE).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "cb-Search", cb-Search:SCREEN-VALUE).
ss_update(USERID(LDBNAME(1)), "FindComp2.w", "scr-Search", TRIM(scr-Search:SCREEN-VALUE)).
Проблема у меня была в том, что прогресс не отпуская замок от последней называемой ss_update функции. Мне нужно было добавить текущее состояние экрана без блокировки, чтобы понизить блокировку. Это просто кажется уродливым и неправильно закодированным и задается вопросом, почему это произошло и каков правильный способ справиться с этой проблемой.
Отличный Том. Спасибо за объяснение, а также за решение. Очень ученик, и это работало как шарм. – dayv2005