今回は、Chatterグループ参加メンバーの通知頻度を一括更新する画面を作成してみました。
Salesforceのヘルプでは、以下のリンクで案内されています。
■Chatterグループについてのユーザごとの通知頻度の設定
なになに・・、データローダを使用することにより、一括更新が可能・・
ユーザデータをExportして、ChatterグループのExportして、
Chatterグループについてのユーザごとの通知頻度の設定をして、
※「NOTIFICATIONFREQUENCY」の値を目的の値に変更します。
P:Email on each post(各投稿のメール)
D:Daily digests(毎日のダイジェスト)
W:Weekly digests(毎週のダイジェスト)
N:Never(受信しない)
その後、データローダで一括アップロード・・
めんどい
ということで、Visualforce画面を作成してみました。
以下、プログラムです。ダブルクリックすると全選択できます。
コピーしてご自由にお使いください。
※内部的な話としては、AJAX Toolkitを利用しています。
Visualforce内で処理が完結。
コントローラ処理の記述はないため、テストコードは不要。すぐにリリースできます。
<apex:page> <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" /> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" /> <script type="text/javascript"> var __sfdcSessionId = '{!GETSESSIONID()}'; var __limit = 10; var __offset = 0; </script> <script src="../../soap/ajax/40.0/connection.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ setupPage(); }); // function setupPage() { var queryString = ""; queryString += "Select Id, Name, Description, CollaborationType, MemberCount, LastFeedModifiedDate From CollaborationGroup"; var inputChatterGroupName = document.getElementById("chatterGroupName").value; if (inputChatterGroupName != "") { queryString += " Where "; queryString += " Name like '%" + sanitize(inputChatterGroupName) + "%'"; } queryString += " order by Name"; queryString += " LIMIT " + __limit; queryString += " OFFSET " + __offset; var queryResult = sforce.connection.query(queryString); var output = ""; if (queryResult.size > 0) { //get the records array var records = queryResult.getArray('records'); //loop through the records and construct html string for (var i = 0; i < records.length; i++) { var collaborationGroup = records[i]; output += '<tr>'; output += '<td><a href="/' + collaborationGroup.Id + '" target="_blank">' + collaborationGroup.Name + '</a></td>'; output += '<td>' + collaborationGroup.Description + '</td>'; output += '<td>' + collaborationGroup.CollaborationType + '</td>'; output += '<td>' + collaborationGroup.MemberCount + '</td>'; output += '<td>' + collaborationGroup.LastFeedModifiedDate + '</td>'; output += '<td>'; output += '<button type="button" class="btn" onclick="bulk_update(\'' + collaborationGroup.Id + '\', \'D\');">D</button>'; output += '<button type="button" class="btn" onclick="bulk_update(\'' + collaborationGroup.Id + '\', \'W\');">W</button>'; output += '<button type="button" class="btn" onclick="bulk_update(\'' + collaborationGroup.Id + '\', \'N\');">N</button>'; output += '<button type="button" class="btn" onclick="bulk_update(\'' + collaborationGroup.Id + '\', \'P\');">P</button>'; output += '</td>'; output += '</tr>'; } } else { output += '<tr>'; output += '<td colspan="2">No Search Results</td>'; output += '</tr>'; } //render the generated html string document.getElementById("output").innerHTML = output; } function search() { __offset = 0; setupPage(); } function prevPage() { if (__offset > 0) { __offset = __offset - __limit; } setupPage(); } function nextPage() { __offset = __offset + __limit; setupPage(); } // function bulk_update(targetId, type) { var queryString = "SELECT Id, NotificationFrequency from CollaborationGroupMember Where CollaborationGroupId = '"+ targetId + "'"; var queryResult = sforce.connection.query(queryString); if (queryResult.size > 0) { var records = queryResult.getArray('records'); alert(records); var updateRecords = []; for (var i = 0; i < records.length; i++) { var collaborationGroupMember = records[i]; var sobject = new sforce.SObject("CollaborationGroupMember"); sobject.Id = collaborationGroupMember.Id; sobject.NotificationFrequency = type; updateRecords.push(sobject); } updateResults = sforce.connection.update(updateRecords); messages = getErrorMessages(updateResults); if (messages.length > 0) { alert(messages.join("\n")); return; } else { alert('success'); } } } function getErrorMessages(results) { var messages = [], i = 0, len = results.length, r; for (; i < len; i++) { r = results[i]; if (! r.getBoolean("success")) { messages = messages.concat(getMessagesOfAResult(r)); } } return messages; } function sanitize(val) { val = val.replace(/\"/g, '\\\"'); val = val.replace(/\'/g, "\\\'"); return val; } </script> <form class="form-inline"> <div class="form-group"> <label for="name">ChatterGroupName</label> <input type="text" class="form-control" id="chatterGroupName"/> </div> <button type="button" class="btn" onclick="search();">Search</button> </form> <a href="#" onclick="prevPage();">prevPage</a> <a href="#" onclick="nextPage();">nextPage</a> <br/> <table class="table table-bordered table-condensed table-striped"> <thead> <tr> <th>Name</th> <th>Description</th> <th>Collaboration<br/>Type</th> <th>Member<br/>Count</th> <th>LastFeed<br/>ModifiedDate</th> <th>Member NotificationFrequency Action<br/>(D—Daily,W—Weekly,N—Never,P—On every post)</th> </tr> </thead> <tbody id="output"> </tbody> </table> </apex:page>
Salesforceにシステム管理者権限でログインします。
設定画面を開いて、検索ボックスに「Visualforce」と入力、[Visualforceページ]をクリックします。
※[ビルド]→[開発]→[Visualforceページ]でもOKです。

Visualforce ページ画面が表示されます。新規ボタンをクリック。
以下を入力して、保存ボタンをクリック。
表示ラベル:GroupMemberUpdate
名前:GroupMemberUpdate
Visualforce Markupタブにコードをコピペ
プレビューボタンをクリックすると、動作確認できます。
画面を表示すると、Chatterグループが一覧表示されます。
Chatterグループ毎に、「D」「W」「N」「P」のボタンをクリックすると、
そのChatterグループに参加しているユーザ全員の通知頻度を一括更新します。
各ボタンは、以下で一括更新します。
D:Daily digests(毎日のダイジェスト)
W:Weekly digests(毎週のダイジェスト)
N:Never(受信しない)
P:Email on each post(各投稿のメール)
内部処理的な話としては、
対象のCollaborationGroupに関連するCollaborationGroupMemberオブジェクトの項目「NotificationFrequency」を更新しています。
では!
0 コメント:
コメントを投稿