0

こんにちは、
私は 4 つのコンテンツ タイプを持つ SharePoint 2007 カレンダーを使用しています。

  1. 標準会議
  2. スカイプ会議
  3. 電話会議
  4. チャットミーティング

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>
4

1 に答える 1

0

リダイレクトが機能しなかった理由がわからなかったので、リダイレクトを必要としない別のパスを使用しました。それでも、最初の試みの何が問題になっているのか知りたいです。ポップアップする実際の警告ボックスを改善する必要がありますが、以下のコードはうまく機能します。警告は、イベントに参加した人にのみ表示され、72時間以上前に新しいイベントに参加するまで、カレンダーに移動するたびに表示されます。

<script type="text/javascript" language="javascript" src="/myPortal/jquery.1.4.2.min.js"></script>
<script type="text/javascript" language="javascript" src="/myPortal/jquery.SPServices-0.7.2.min.js"></script>
<script type="text/javascript" language="javascript">
/*
Name:           EventTimeLimit
Developer:      RogueVeggie
Version - Date: v1 - 20130207

Purpose:        Test if a Skype meeting has been added less than 72 hours prior to 
                the actual meeting time in a SharePoint Calendar.
                A warning displays if this is the last event entered by the user.

Prerequisite:   Create a Content Type called "Skype Meeting".
                In the SharePoint calendar Create a Calculated column called Skype72hrTest.
                Paste the following script into it:

                IF([Content Type]="Skype Meeting",IF([Sit Down Time]-Created>=3,"Pass","Fail"),"NA")

                Add this code to a Content Editor Web Part at the bottom of your SharePoint 
                Calendar page.
                Set the web part Chrome to "None".
                Don't hide the web part or the warning won't display.
*/

var taskListName = "MYGUID12-3456-7890-ASDF-GHJKLZXCVBNM" // This is the GUID of the list we want to query.
var lastId = $().SPServices.SPGetLastItemId({ 
    listName: taskListName 
}); // This gets the ID of the last event added by the current user.
var testQuery = "<Query><Where><Eq><FieldRef Name='ID' /><Value Type='Text'>"+lastId+"</Value></Eq></Where></Query>"; // This is our CAML Query string.
var divWarn = "<DIV style='Z-INDEX: 999; POSITION: absolute; PADDING-BOTTOM: 25px; BACKGROUND-COLOR: #800505; PADDING-LEFT: 25px; WIDTH: 743px; PADDING-RIGHT: 25px; HEIGHT: 175px; COLOR: white; FONT-SIZE: 150%; TOP: 55%; FONT-WEIGHT: 900; PADDING-TOP: 25px; LEFT: 22.38%' id='VTCWarn'><DIV style='FONT-SIZE: 200%'>WARNING:</DIV><DIV>Skype scheduling requires 72 hour notice to register.<BR>Please contact IT.</DIV></DIV>";//This is the warning message

$(document).ready(function() {
  $().SPServices({
    operation: "GetListItems",
    async: false,
    listName: taskListName ,
   CAMLRowLimit: 1,
    CAMLQuery: testQuery,
    CAMLViewFields: "<ViewFields><FieldRef Name='Skype72hrTest' /></ViewFields>",// Skype72hrTest is a calculated column in the calendar to test if the event was added less than 72 hours before the Skype meeting.
    completefunc: function (xData, Status) {
        $(xData.responseXML).SPFilterNode("z:row").each(function() {
            var passFail = $(this).attr("ows_Skype72hrTest");// Skype72hrTest stores the result in a string as "Pass", "Fail", or "NA".

            if (passFail === "string;#Fail"){// Tests to see if the string Fail is in the Skype72hrTest column
                $("#Warning").append(divWarn);
            }
        });
    }
  });
});
// The below DIV is needed so we have a place to put the warning when passFail=Fail.
</script>
<div id='Warning'></div>
于 2013-02-08T02:56:32.453 に答える