Microsoft ブログから解決策を見つけました...以下を参照してください
まず、ランダムという言葉は好きではありませんが、この問題のテスト ケースには相関関係が見当たらないので、ランダムを使用してこの問題の一部を説明します。
セットアップ: EditForm.aspx と NewForm.aspx のカスタマイズされた UI を作成したリストがあります。2 つの間で同じ JS ファイルと JavaScript を使用します。場所の選択を説明するために、Google マップを追加しました。いくつかの動的検証のために、「OK」ボタンに追加のコードを追加しました。私は動的メニューのこともたくさんしました。すべてのユーザーは IE 9 を使用し、サイトは MOSS 2007 サーバー上にあります。
問題: EditForm.aspx でのみ、[ランダムに] [OK] をクリックすると、すぐに白い画面が表示されます。フォームが保存されず、白い画面のソース コードを表示すると、空の HTML ページが見つかります。
この問題を見つけようとしたこと: - これが発生するユーザーとコンピューターを絞り込もうとしたところ、すべてのコンピューターのすべての人に発生することがわかりました (もう一度「ランダムに」)。- 「OK」ボタンの前にあるコードを無効にしてみました - IE9 の外部スクリプトをデバッグしてコードをたどってみましたが、エラーは見つかりませんでした
コードを提供できますが、少し長く、どこから始めればよいかわかりません。必要に応じて提供できます。
事前に助けてくれてありがとう。
編集:これはOKボタンを再配線するコードです(以前に値を「保存」にリセットしました)
var okBtns = $('input[value="Save"]')
$.each(okBtns, function(index,value){
okFunction=$(value).attr('onclick');
$(value).attr('onclick','return false;')
$(value).bind('click', function(){
if ($('#'+StatusBox).val()=='Draft') {$('#'+StatusBox).val('New Request')}
var err = clickOKbutton();
if(err==0) {okFunction()};
});
});
これは、元の共有ポイント操作の先頭に追加されたコードである clickOKbutton 関数です。
function clickOKbutton()
{
//all of the imput validation i could ever wish for!!!!
var NoteVal = ''
var NameAry = $('#'+PersonnelBox).parent().children(":first").children("SPAN").children("SPAN");
$.each(NameAry, function(index,value){
var $n=$(value).html();
if(NoteVal.length==0) {NoteVal=$n} else {NoteVal=NoteVal+';'+$n};
});
//$('#'+AddNotes).val(NoteVal);
var plh = $('#'+PersonnelBox).parent().html()
userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','');
$.each(OICUsers, function(i,v){
if(plh.indexOf(v) > -1 && st=='New Request'){
$('#'+StatusBox).val('OIC Bypassed')
$('#'+CommentsBox).val('OIC is travling on this TDY/TAD and cannot approve. So this request is bypassing the "OIC Approval" step')
}
});
/*userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','')
$('#' + ModBox).closest('TR').show();*/
var message=''
message = detectFieldChanges(AllFieldsArray,AllOrgValArray,"Draft,New Request,Modified")
if(message.length>0){
$('#'+ModBox).val(message);
AutoResizeTextarea(ModBox);
}
message = detectFieldChanges(ValFieldsArray,OrgValuesArray,"Draft,New Request,Modified,OIC Approved,OIC Bypassed,Pending RFI,Ready for COS")
userNameTx = $('#zz8_Menu').text();
userNameTx = userNameTx.replace('Welcome ','');
if(message.length>0&&$.inArray(userNameTx,COSUsers)==-1){
$('#'+StatusBox).val('Modified').change;
$('#'+StatusLongBox).val('Modified').change;
}
//Subject box
var pb = NoteVal;
var ep = $('#'+ExtPersonnel).val();
var ab = $('#'+AddressBox).val();
var sd = $('#'+sDateBox).val();
var ed = $('#'+eDateBox).val();
var st = $('#'+StatusBox).val();
var p = pb+';'+ep;
var p = p.replace(/mossaspnetmembershipprovider:/g,'');
var p = p.slice(0,-1);
var ad = ab+' '+sd+' to '+ed;
var s = 'eTDY | '+st+' - '+p+' - '+ad;
if(s.length>255){
var l = s.length-255;
p = p.substring(0,p.length-l);
s = 'eTDY | '+p+' - '+ad;
}
$('#'+Subject).val(s);
//check Lat/Lng value
if($('#'+LatBox).val()=='' || $('#'+LngBox).val()==''){
//alert("Cannot continue unless the Lat Lng has a vallid coordinate");
if($('#LatLngError').length==0){
errorHTML='<br><span class="ms-error" id="LatLngError">You must specify a value for Lat and Lng</span>'
$('#'+AddressBox).closest('TD').append(errorHTML)
}
return -1
}
return 0
};
ややこしいですが、理解していただけると幸いです。
編集2:
ランダム性を追跡したと思います...すべてのカスタムコードを完全にオフにしましたが、まだ問題があります。次に、作業記録と非作業記録を比較してみました。複数人のピッカーでフィールドに着くまで、すべてが正常に見えました。そのフィールドに2人以上いる場合は通常どおり保存されますが、ピープルピッカーフィールドに2人以上いるレコードを変更すると、この問題が発生します。私はもう少し研究を行うつもりであり、私の結果を投稿します。
編集3:
http://blogs.msdn.com/b/jorman/archive/2009/12/22/mystery-of-the-sharepoint-white-screens.aspx
この問題はすべて、IIS の構成と偽装レベルに帰着します。どうやら私たちのサーバー管理者は、誰にも言わずに変更することに決めたようです。