INVOICELINE にオブジェクト起動ポイントを持つスクリプトがあります。mbo の場合、現在の MBO と同じ PONUM を持つすべての INVOICELINES を取得したい (現在の mbo の請求書以外にある可能性があるため)
スクリプトでは、次のようなPOを見つけます:(ステータスをテストするため)
from psdi.server import MXServer
from psdi.mbo import Mbo
from psdi.mbo import MboConstants
from psdi.security import UserInfo
from psdi.server import MXServer
myMXServer = MXServer.getMXServer()
userInfo = mbo.getThisMboSet().getUserInfo()
# find the PO
poSet = myMXServer.getMboSet("PO", userInfo)
poSetWhere = "ponum='" + mbo.getString("PONUM") + "' and siteid='" + mbo.getString("POSITEID") + "' and status not in " + poNoUpdate
poSet.setWhere(poSetWhere)
poMbo = poSet.getMbo(0)
これはうまく機能します。
その後、invoicelines のセットに対してまったく同じことを行います。
ilSet = myMXServer.getMboSet("INVOICELINE", userInfo)
ilSetWhere = "ponum='" + mbo.getString("PONUM") + "' and positeid='" + mbo.getString("POSITEID") + "'"
ilSet.setWhere(ilSetWhere)
ilMbo = ilSet.moveFirst()
while ilMbo is not None:
...
setWhere 行でエラーが発生します。不思議なことに、ロギング (読みやすくするために削除しました) は、(予想どおり) getMboSet の後のすべての送り状レコードが ilSet に含まれていることを示しています。ilSetWhere には、SQL Developer でコピーして貼り付けることができる有効なクエリがあります。
Maximo は、この setWhere を実行する前にインデックスなどを必要としますか?
2 つの setWhere 文字列のログ結果を次に示します。
ponum='4140006682' and siteid='mysite' and status not in ('CLOSED','CAN','GESLTN','ANN')
と
ponum='4140006682' and positeid='mysite'
私が得るエラーは、一般的な BMXAA7837E java.lang.NullPointerException のスクリプトの行です... (この行は、ilSet.setWhere(ilSetWhere) 式の行を参照しています。これを修正する方法がわかりません。それを回避する方法の手がかり。