ブログ記事が2,000件を越えたため、再びMTでエラーが発生。
過去記事で、MT4の記事数が1000件を越えた場合のエラーの対処法についての回避策を書いた。
参考「MT4のエラーメッセージ:「Can't call method "execute" on an undefined value ・・・」の対策の一案」
1000件の記事を出力すると表題にあるように、
「Can't call method "execute" on an undefined value ・・・」のエラーが出力される。
具体的には、下記コードで
<MTEntries lastn="xxxx">
</MTEntries>
lastnの数字(xxxx)が、1000以上で記事数が1000件以上ある場合である。
言い換えるとlastnが1000以上でも、記事数が1000件以上ない場合はエラーが発生しない。
今回、ブログ記事が2,000件になって新たにわかったことと回避した方法である。
・MTEntriesのループ回数はどうやら999回が限界値、上限値であること。
・回避策として、分割してループ処理を行う、そのためにはoffsetとlastnの組み合わせによる回避を行う。
<MTEntries lastn="999">
・・・
・・・
</MTEntries>
<MTEntries offset="999" lastn="999">
・・・
・・・
</MTEntries>
<MTEntries offset="1998" lastn="999">
・・・
・・・
</MTEntries>
最大999単位で出力する。
次の3000件(正確には2998)達成になったら、ループを一つ追加する。
もう少しすっきりした方法もあるであろうが、今回はサイトマップ(xml)への対応のみであること、
MTのバージョンによるバグ?であるのか、サーバ依存によるものであるのか、原因が特定できないのであまり追求しないこととする。
といいつつも、かなり調査したところ、MTデータベースの各テーブルの上限サイズ(文字数)などの情報はあるが、その他の設定値に関してはわからないのが実情である。
MT5系での不具合情報は見つからなかったので、MTバージョンでのエラーかも。
そもそも1000件以上を1ページに表示するということは、通常はあまり発生しない。
基本的に不具合発生のケースも少ないということだろう。