2

SharePoint 2010 発行サイト コレクションのセットの機能として、複数のマスターページ/ページ レイアウトを備えたソリューションを構築しました。

1 つの一貫した要求は、ページ所有者の連絡先メールを取得して、マスターページのフッターに表示できるようにすることです。ページの Contact Email が入力されていない場合は、People Picker からページ所有者データを取得し、そこから連絡先メールを取得する必要があります。

すべての発行ページ レイアウトをソリューションに追加する必要はなく、Contact Email 列をプレース ホルダーに手動で追加する必要はありません。マスターページ内からページ所有者データを取得する方法が必要だと思いますが、わかりません。jQuery SPServices ライブラリを調べ始めましたが、これまでのところ、それを理解することもできませんでした。

マスターページで提供されたページ所有者の連絡先情報を使用して、連絡先の電子メールを追加した経験のある人はいますか?

4

1 に答える 1

0

OK、これを解決するには、jQuery1.7.x+とSPServicesjQueryライブラリバージョン0.7.2以降がサイトにインストールされている必要があります。

SPServicesからの操作としてGetListItemsを使用します。

Pagesディレクトリ内でページを検索しているので、listNameは「Pages」です。

CAMLビューフィールドは、基本的にPublishingContactEmailとPublishingContactの列です。u2uのCAMLビルダーバージョン4.0.0.0を使用しているものを見つけました

ows_変数は、firebugのPOSTオブジェクトのxmlビューにあります。

ows_PublishingContactは、連絡先の情報の長い厄介な文字列を返します。幸い、メールアドレスはで囲まれ,#ているため、配列に分割してメールを簡単に検索できますが、それが理由です。

function get_page_contact_email() {    
    var thisPageID = _spPageContextInfo.pageItemId;    
    var e;    
    $().SPServices({    
        operation: "GetListItems",    
        async: false,    
        listName: "Pages",    
        CAMLViewFields: "<ViewFields><FieldRef Name='PublishingContactEmail' /><FieldRef Name='PublishingContact' /></ViewFields>",    
        CAMLQueryOptions: "<QueryOptions><ExpandUserField>True</ExpandUserField></QueryOptions>",    
        completefunc: function (xData, Status) {    
            $(xData.responseXML).SPFilterNode("z:row").each(function () {    
                if (thisPageID == $(this).attr("ows_ID")) {    
                    if ($(this).attr("ows_PublishingContactEmail")) { // if page email is set    
                        e = $(this).attr("ows_PublishingContactEmail");    
                    } else if ($(this).attr("ows_PublishingContact")) { //otherwise use contact info    
                        var contact = $(this).attr("ows_PublishingContact").split(",#");    
                        for (var c = 0; c < contact.length; c++) {    
                            if (contact[c].indexOf("@") != -1) {    
                                e = contact[c];    
                            }    
                        }    
                    } else { //or nothing is set.    
                        e = false;    
                    }    
                }    
            });    
        }    
    });    
    return e;    
}
于 2012-12-03T10:21:18.740 に答える