0

過去3〜4か月間(テストと製品の両方で)PowerShellスクリプトがスケジュールされ、正常に実行されました。スクリプトの目的は、特定のトリガーが外部システムから起動されたときにSharePointのドキュメントプロパティを更新することです。詳細に立ち入ることなく、レコードとして宣言されたドキュメントのアイテムプロパティを更新するために使用されたコードを以下に示します。

$recordsmanagement=[Microsoft.Office.RecordsManagement.RecordsRepository.Records]
$recordsmanagement::UndeclareItemAsRecord($item)
$item = $list.GetItemById($item.id)     
$item.File.CheckOut()
$item[$sSpFieldName]=$sDbValue
$item.Update()                                          
$item = $list.GetItemById($item.id)                                 
$item.File.CheckIn("")                          
$recordsmanagement::DeclareItemAsRecord($item)

このコードは何百回も問題なく機能しています。何らかの理由で、このコードは1週間前に最後の行で爆撃を開始しました(レコードとして再宣言する場合)。

System.Management.Automation.MethodInvocationException: Exception calling "DeclareItemAsRecord" with "1" argument(s): "The file /lib/folder/file.pdf has been modified by SHAREPOINT\system on 10 Oct 2012 00:00:47 -0500."

他の奇妙な部分は、これがProdでのみ発生していることです。テスト環境は問題なく実行されているようです。まだ本番環境の修正を試していませんが、GetItemById(チェックイン後)を使用して$itemオブジェクトを再度取得できると確信しています。最初に他の人の視点を取得したかったので、私はまだこれを行うのを少しためらっています。

誰かがこれについて何か意見がありますか?前もって感謝します。

4

1 に答える 1

0

あなたが言うように、私は最善の策はチェックイン後にアイテムを再び手に入れることだと思います。

エラーメッセージはまさにそれを示しています。変更されたSPListItemに対して操作を実行しようとしています。したがって、レコードとして宣言する前に、GetItemByIdを使用して再度プルします。

一部のレコードと一部の環境でのみ発生する理由はわかりません。Sharepointは少し気まぐれだと思います。

私も試してみたいこと:

  • チェックインするときに、そのアイテムに対して何らかの作業を行うワークフローがあるかどうかを確認します
  • 要件に合う場合は、Update()の代わりにSystemUpdate()を使用してみてください

幸運を

于 2012-10-15T14:14:14.900 に答える