Необходимо при обновлении пользовательского поля пользователя обновлять значение поля в другой таблице.
Логика такая:
1) До обновления данных пользователя (OnBeforeUserUpdateHandler) считываю ID записи в b_form_answer где поле message=UF_PUBLIC_NAME
2) После сохранения( OnAfterUserUpdateHandler) поля UF_PUBLIC_NAME, заменяем значение поля message в таблице b_form_answer новым значением UF_PUBLIC_NAME по найденному ID в пункте 1.
Проблема в том,что когда в форме изменяешь UF_PUBLIC_NAME и нажимаешь сохранить, то он в OnBeforeUserUpdateHandler уже сразу считывает сохраненное значение, хотя не должно, ведь OnBeforeUserUpdate - "вызывается в методе CUser::Update до изменения параметров пользователя, и может быть использовано для отмены изменения или переопределения некоторых полей."
В чем проблема? Как мне сохранить в переменную поле пользователя которое еще не изменено?
Логика такая:
1) До обновления данных пользователя (OnBeforeUserUpdateHandler) считываю ID записи в b_form_answer где поле message=UF_PUBLIC_NAME
2) После сохранения( OnAfterUserUpdateHandler) поля UF_PUBLIC_NAME, заменяем значение поля message в таблице b_form_answer новым значением UF_PUBLIC_NAME по найденному ID в пункте 1.
| Код |
|---|
AddEventHandler("main","OnBeforeUserUpdate","OnBeforeUserUpdateHandler");
function OnBeforeUserUpdateHandler($arFields)
{
global $DB;
global $answerid;
$strSql = "SEL ECT *FR OM b_form_answer WHERE MESSAGE="."'".trim($arFields["UF_PUBLIC_NAME"])."'";
echo '<pre>';
var_dump($strSql);
print_r($array);
echo '</pre>';
$rs = $DB->Query($strSql, false, "FILE: ".__FILE__."<br>LINE: ".__LINE__);
$answerid=$rs->Fetch();
}
AddEventHandler("main","OnAfterUserUpdate","OnAfterUserUpdateHandler");
function OnAfterUserUpdateHandler(&$arFields)
{
global $DB;
$DB->PrepareFields("b_form_answer");
$arFields = array(
"TIMESTAMP_X" => $DB->GetNowFunction(),
"FIELD_ID" => "'".trim("22")."'",
"FIELD_TYPE"=> "'".trim("dropdown")."'",
"MESSAGE" => "'".trim($arFields["UF_PUBLIC_NAME"])."'"
);
$DB->StartTransaction();
$DB->Update("b_form_answer", $arFields, "WHERE ID='".trim($answerid["ID"])."'", $err_mess.__LINE__);
$DB->Commit();
return $arFields;
} |
Проблема в том,что когда в форме изменяешь UF_PUBLIC_NAME и нажимаешь сохранить, то он в OnBeforeUserUpdateHandler уже сразу считывает сохраненное значение, хотя не должно, ведь OnBeforeUserUpdate - "вызывается в методе CUser::Update до изменения параметров пользователя, и может быть использовано для отмены изменения или переопределения некоторых полей."
В чем проблема? Как мне сохранить в переменную поле пользователя которое еще не изменено?