как подсчитать, сколько раз пользователь открывал страницу visualforce?

Мне нужно понять процесс подсчета количества конкретных страниц Visualforce, открытых пользователем. Причина этого вопроса в том, чтобы посмотреть, смогу ли я узнать, какие страницы в основном используются пользователями, и улучшить их, чтобы облегчить пользователям жизнь :).

Я знаю, что нам нужно использовать какую-то функцию при загрузке страницы. Если есть какой-либо другой, я хотел бы понять это. Если у вас есть вопросы, пожалуйста, не стесняйтесь спрашивать, я знаю, что иногда мы не можем изложить в письменной форме то, что у нас на уме.


person user3116    schedule 23.12.2013    source источник
comment
Вам следует задать этот вопрос в [salesforce.stackoverflow.com](salesforce.stackoverflow.com)   -  person jordan.baucke    schedule 23.12.2013


Ответы (2)


На стороне сервера

Контроллеры страниц VF (как пользовательские контроллеры, так и расширения) не могут выполнять какие-либо операции DML. Причина этого несколько проста - действие простого перехода на заданную страницу и, возможно, чтение некоторых данных не должно иметь побочных эффектов, таких как обновления БД. Поэтому, если вы думаете о сохранении каких-то данных, вы должны делать это либо в действиях, вызываемых на этих страницах, либо в файле <apex:page ... action="{!doSomething}">. Но параметр action не одобряется, потому что это неприятный обходной путь для этого (нормального) ограничения. Если вы планируете отправить свой код на проверку безопасности SF или проверку качества кода Checkmarx, это будет указано.

На стороне клиента

Установите отслеживающий javascript либо на боковую панель, либо на страницы VF. (этот JS мог бы даже сделать RemoteAction или что-то подобное в качестве альтернативы этому action).

Вы также можете взглянуть на Google Analytics (зависит от того, согласны ли вы с агрегированными 10 наиболее посещаемыми страницами или вам нужно что-то для каждого пользователя).

Как упомянул @jordan.baucke, попробуйте кросс-постинг на Salesforce.StackExchange.com :)

person eyescream    schedule 23.12.2013
comment
Благодарю вас! это был отличный совет. - person user3116; 23.12.2013

Это просто с JavaScript, глобальными переменными, объектами и некоторыми вызовами ajax (RemoteAction). Пример кода будет:

<script src="http://code.jquery.com/jquery-1.10.2.min.js"/>
<script>
    var j$ = jQuery.noConflict();
    j$(document).ready(function(){
        var userID = '{!userInfo.getUserID}';    //Gets user ID

        Visualforce.remoting.Manager.invokeAction(
            '{!$RemoteAction.ClassName.MethodName}',    //Method where you increment the click counter stored in the record for that object
                userID,
               //Function on completion
        );
    });
</script>

Тем не менее, я полагаю, что нецелесообразно выполнять какие-либо DML/SOQL при загрузке страницы.

person ipradhansk    schedule 24.12.2013