こんにちは、
私は 4 つのコンテンツ タイプを持つ SharePoint 2007 カレンダーを使用しています。
- 標準会議
- スカイプ会議
- 電話会議
- チャットミーティング
JQuery 1.4.2 を使用しています。
72 時間以内に予定されている Skype ミーティングのカレンダー ページにアラート ポップアップを作成しようとしています。「SkypeError=1」が URL に渡された場合に表示されるアラートをカレンダー ページに組み込みました。
現在、NewForm.aspx に Skype 会議のコンテンツ タイプが選択されていることを認識させ、エラーを表示させようとしています。PreSaveAction 関数には、ContentTypeId が認識されていることを示すアラートと、選択された動的 URL を示す別のアラートがあります。次に、setOnSubmitRedir 関数で、同じ URL が渡されたことを示すアラートと、[送信] ボタンの完全な URL が変更されたことを示す別のアラートがあります。
サタンダード ミーティングをカレンダーに追加すると、すべてが期待どおりに機能します。ただし、他のコンテンツ タイプを選択すると、キャンセル ボタンしか機能しません。[送信] を押すと、一般的な MOSS2007 の「予期しないエラーが発生しました。」というメッセージが表示されます。これは、正しい情報が渡されていることを確認できることを考えると奇妙です。さらに、エラーページの URL を見ると、次のように表示されます。
https://myURL/myPortal/Lists/ConfRes/NewForm.aspx?RootFolder=%2fmyPortal%2fLists%2fConfRes&Source=/myPortal/Pages/MeetingCalendar.aspx?SkypeTime=yes
「 ?SkypeTime=yes」を動的リダイレクトから削除しようとしましたが、おそらく「 ?」が問題を引き起こしていると考えていました。
コンテンツを保存するときにすべてが失敗するようです。エラーが発生した場合、コンテンツは保存されません。ページからコードを削除すると、送信はすべてのコンテンツ タイプで正常に機能します。
支援は非常に高く評価され、必要とされています。開始時間から 72 時間以内に追加されたイベントをテストする方法を理解するための助けも大歓迎です。
コードは CEWP を使用して追加されます。より堅牢なエラーを有効にしたり、ログを確認したりするためのサーバー権限がありません。
<script type="text/javascript" src="/94thaamdc/SiteCollectionCode/jquery-1.4.2.min.js">
//Load JQuery
</script>
<script type="text/javascript">
// Where to go when cancel is clicked on the form
goToWhenCanceled = '/myPortal/Pages/MeetingCalendar.aspx';
// Edit the redirect on the cancel-button's
$('.ms-ButtonHeightWidth[id$="GoBack"]').each(function(){
$(this).click(function(){
STSNavigate(goToWhenCanceled);
})
});
// Function to determine the dynamic URL for the OnSubmit-redirect.
// This function is automatically executed before saving the item.
function PreSaveAction(){
// The URL is determined by the ContentTypeId located in the URL of the content type link.
// Grab the ContentTypeId from the content type link's URL and save it to a local
// variable called contentTypeId.
var contentTypeId = querySt("ContentTypeId");
// Assign a dynamic redirect URL to the function by setting it here
// based on contentTypeId from the URL.
if(contentTypeId=='0x010...'){
var dynamicRedirect = '/myPortal/Pages/MeetingCalendar.aspx?SkypeError=1';
}else{
var dynamicRedirect = '/myPortal/Pages/MeetingCalendar.aspx';
}
// Alerts are just to watch what's going on in the code. Remove when done testing.
alert("1. contentTypeId: "+contentTypeId);
alert("2. dynamicRedirect: "+dynamicRedirect);
// Call the function and set the redirect URL in the form-action attribute
setOnSubmitRedir(dynamicRedirect);
// This function must return true for the save item to happen
return true;
}
//Function to parse the ContentTypeId from the URL string
function querySt(stKey) {
stQString = window.location.search.substring(1);
arKeyValues = stQString.split("&");
for (i = 0; i < arKeyValues.length; i++) {
arPairs = arKeyValues[i].split("=");
if (arPairs[0] == stKey) {
return arPairs[1];
}
}
};
// Function to edit the form-action attribute to add the source=yourCustomRedirectPage
function setOnSubmitRedir(redirURL){
var action = $("#aspnetForm").attr('action');
var end = action.indexOf('&');
if(action.indexOf('&')<0){
newAction = action + "?Source=" + redirURL;
}else{
newAction = action.substring(0,end) + "&Source=" + redirURL;
}
$("#aspnetForm").attr('action',newAction);
// Test to see if the URL was passed correctly. Remove when done testing.
alert("3. redirURL: "+redirURL);
// Test to see if the new URL is properly formatted. Remove when done testing.
alert("4. newAction: "+newAction);
}
</script>