ошибка обновления с предложением где в DB.executeUpdate compiere - PullRequest
0 голосов
/ 11 сентября 2018

я хочу обновить isproven до N в таблице m_requisition

, где m_requisition_id в xx_reqverification = 'value from input'

и docstatus в xx_reqverification = 'VO'

StringBuffer s = new StringBuffer("UPDATE M_Requisition R SET")
    .append(" IsProven=").append("'N'")
    .append(" FROM XX_ReqVerification AS RV")
    .append(" WHERE RV.DocStatus='VO'")
    .append(" AND RV.XX_ReqVerification_id=")
    .append(veri.getXX_ReqVerification_ID())
    .append(" AND R.M_Requisition_id = RV.M_Requisition_id").append(";");
DB.executeUpdate(s.toString(), null);

но этот код выдает ошибку

DB.saveError: DBExecuteError - ОШИБКА: синтаксическая ошибка в или около "где"

я использую postgresqlдля базы данных

когда я печатаю s на консоль

UPDATE M_Requisition R SET IsProven='N' 
FROM XX_ReqVerification AS RV 
WHERE RV.DocStatus='VO' AND RV.XX_ReqVerification_id =1000040 
      AND R.M_Requisition_id = RV.M_Requisition_id;

я не знаю, что не так с моим кодом, пожалуйста, помогите мне исправить это.

1 Ответ

0 голосов
/ 07 марта 2019

Хотя это и не является ответом на конкретный вопрос, см. Мой комментарий / вопрос относительно этого выше ...

Обновление базы данных напрямую, как это, не является рекомендуемым подходом к настройке Adempiere.Это может потенциально нарушить согласованность в приложении, так как вы будете обходить встроенные механизмы приложения, такие как WorkFlows , ModelValidators и, возможно, Callouts .Эти механизмы, наряду с «Словарём приложений», существуют для обеспечения возможности настройки приложения ERP без риска возникновения противоречий.

Если бы вы использовали встроенные механизмы для сохранения сущности, не было бы риска взлома приложения.Каждая «сущность» в модели приложения расширяет класс PO (Persistent Object), который имеет метод save ().Использование этого вместо прямого обновления БД обеспечит выполнение всех правил, определенных в словаре приложений, а также выполнение функциональных возможностей, требуемых с помощью механизмов, упомянутых выше.

На самом деле это должен быть более простой маршрут с чем-токак ...

MRequisition req = new MRequistion(getCtx(), requisition_id, get_TrxName());
req.setDocStatus(DOCSTATUS_Voided);
req.setIsApproved(false);
req.save();

Я также могу порекомендовать прочитать следующую страницу из вики на Расширение Adempiere

Последний момент, часто есть логика, связанная сИзменения в статусе документа, которые, возможно, тоже стоит изучить!

...